Chat:Ru/2020-06-14
tutubalin: а где-то официально написано про эти 2.5 секунды? и насколько они гарантированны?
ilt: нигде, это такая фича
ilt: словил странную ситуацию в локале, если я ставлю 3м нод
ilt: то на первом ходы в 6 раз падает число роллаутов
ilt: точнее нет у меня такой фичи
ilt: вылетает по таймауту
ilt: не у меня нет такой фичи
ilt: 1с +несколько мс иногда на первый ход
ilt: не больше
vrabosh: что за Automaton2000 вы часто пишете?
Automaton2000: вместо ucb можно epsilon-greedy использовать или thompson sampling
Uljahn: чат-бот
vrabosh: а вот чел отвечает Automaton2000 и вроде как чел) это чат-бот?)
Automaton2000: Прикол в том, что я не понимаю
vrabosh: Automaton2000, привет
Automaton2000: я не могу со сраного клиента зайти, требуется пароль, а у меня нет
Uljahn: http://chat.codingame.com/pastebin/d0273d84-f188-4fb5-aa06-c13455ed92a1
Uljahn: как тебе такое, Automaton2000?
Automaton2000: вот у меня не получилось
Uljahn: вот сам же говорил, что np.zeros - хитрый зверь
Uljahn: и где эта сволочь память выделяет? она в основном процессе не учитывается
Uljahn: при этом np.ones учитывается
tutubalin: может она лениво выделяет?
Uljahn: я пишу в первую и последнюю ячейку для теста, всё там сохраняется
Uljahn: похоже на баг
Uljahn: почитал релиз ноуты - в numpy как раз в районе этой версии чинили утечки памяти, надо локально на более новой версии пробовать
Uljahn: такая же хрень на винде с нумпи 1.18.1, память резервируется и учитывается при последующих выделениях, но не отображается в статистике, видимо это нормальное поведение для zeros :confused:
Uljahn: а начинаешь заполнять - появляется в статистике, вот оно что. действительно - ленивое выделение
YurkovAS: и это вроде на уровне ОС сделано, чтобы всю память программы не сожрали.
ilt: а может быть что в середине игры в дереве для какой-то ноды второй уровень не раксрывается или это нонсенс?
ilt: написано 25к роллаутов
ilt: нод всего 6
Uljahn: видимо, есть какой-то механизм безопасного выделения памяти с нулями, потому что ещё есть np.empty, он чуть быстрее, чем np.zeros, но не гарантирует отсутствия мусора. при этому np.ones на порядок медленнее, потому что нет быстрого механизма установки памяти в единицу
735487: ilt: теоретически должны все по разу быть раскрыты. на 2 уровне так точно
Uljahn: ilt: бага, очевидно
Uljahn: если только коэффициент эксплорейшна не ноль
ilt: первый уровень раскрыт целиком
ilt: для одной из нод не раскрыт второй уровень
YurkovAS: и визитов там 0?
Uljahn: выводи Q и U для нод первого уровня
Uljahn: т.е. левое и правое слагаемое в формуле UCT
YurkovAS: может в формуле ошибка. как минимум у этой ноды долже быть 1 визит.
ilt: проблема в том что при сдвигании дерева два раза нового рута нет
ilt: выводить и просматривать тяжело
ilt: да и редкая это ситуация
YurkovAS: посмотри на визиты на этой ноде. если есть 1 визит, тогда у тебя константа слишком маленькая может быть.
ilt: нода первого уровня точно есть
Uljahn: так надо определить, почему формула её не выбирает, хотя роллаутов достаточно, для этого надо слагаемые формулы выводить в дебаг
ilt: и визит на ней есть
Uljahn: значит, экспанд глючный
Uljahn: или ты один визит при создании присваиваешь?
ilt: нет
YurkovAS: http://chat.codingame.com/pastebin/8841d5fe-3880-4d9f-a19d-95ed6643f244
ilt: визит присваиваю только если был хоть один проход
ilt: вообще там глубина дерева большая 14-16
Uljahn: хм, а когда может скорости не хватить? когда несколько фримувов подряд?
YurkovAS: у тебя же так? 0 визитов - не раскрываем и играем рандомно есть визиты, но не раскрыта - тогда раскрываем, берем рандомного ребенка и играем рандом игру.
ilt: 0 визитов - раскрываем и играем рандомно на одной из нод
ilt: а смысл играть не раскрывая?
YurkovAS: лучше, сначала сыграть 1 рандомную игру. и только уже потом раскрывать и грать с ребенком нормально прибавляет.
Uljahn: но у этой ноды тоже будет 0 визитов, её тоже раскрывать будешь?
ilt: YurkovAS то ли реализовать твою идею сразу, то ли в список записать
YurkovAS: точно даст прирост
Uljahn: "есть визиты, но не раскрыта" - это ведь только для одного визита ситуация возможна?
YurkovAS: да
YurkovAS: не получается ни чего улучшить. наверное проще уже сделать книгу дебютов.
YurkovAS: по разному пытался заставить работать это метод "full expand" - быстрый, но играет хуже. и в другой игре так же, но там клон мктс-а.
ilt: https://www.codingame.com/replay/472754783
ilt: тут не совсем пример такой какой хотел
ilt: 32 ход
ilt: ответ противника вообще не раскрывается
ilt: на нем 0 визитов
YurkovAS: значит баг в раскрытии
Uljahn: может быть как-то с фримувом связано?
Rush_iam: Ребята, привет! Я здесь третий день, подскажите можно ли как-то посмотреть сколько времени занял мой код на выполнение?
735487: замерять самому
Uljahn: from timeit import default_timer as tmr start_tmr = tmr() my_function_to_profile() print(tmr() - start_tmr)
Uljahn: Rush_iam: ты же питон изучаешь?
Uljahn: кстати, в Horse-racing Duals в последнем тесте оптимизации не помогут
Uljahn: надо перерабатывать сам алгоритм
Uljahn: вроде слева должна быть кнопка Hints
Rush_iam: Спасибо большое, Uljahn!
Rush_iam: Если получаю 0.20 - это 0.2 мс или 0.2 сек?
Uljahn: сек
Uljahn: для мс надо на 1000 умножить
Uljahn: замер лучше начинать после первого инпута
Rush_iam: :thumbsup: CG даёт таймаут при >1 сек?
Uljahn: в пазлах по-разному, вроде до 3 сек бывает
735487: прикольно было очков 26.70. поменял одну строчку. стало 26.72 нифига не поменялось ))
vrabosh: подскажите по этому пазлу
vrabosh: энкодер проходит , написан норм..
vrabosh: но выполняю последний тест, он мне говорит декодировать его.. но я проверяю результат енкодером, и он получается другой чем то, что мне датется в message
Uljahn: по этому пазлу? :thinking:
vrabosh: Disordered First Contact
vrabosh: def encode(m,s=,c=0): http://chat.codingame.com/pastebin/fe68a316-2c3c-464a-8537-b3ecf4091290
vrabosh: код энкодера
Uljahn: какой не проходит?
vrabosh: последний, но при сабмите два..
Uljahn: тесты же посмотреть можно
vrabosh: Lorem ipsum dolor sit amet, con...dit ut ac est. Fusce at dui ipsum. Aliquam est nibh, tempor id. - я ему должен это вернуть, но мой енкодер возращается другое, чем мне дает message
vrabosh: а все тесты по еэкодеру проходят
Uljahn: так там декодер нужен
Uljahn: Output One line: The original message (if N is positive)
vrabosh: да, только как мой декодер может дать пральный результат если мне message дают не тот
vrabosh: который должен быть.. а проверил я это своим енкодером
vrabosh: в обратном порядке
Uljahn: значит, где-то баг
vrabosh: либо я гдето ошибся в енкодере, то и естественно не прально декодер сделал..
vrabosh: посмотри плз, там код мелкий.. сравни со своим
Uljahn: не похоже совсем
Uljahn: в чужих решениях посмотрел - есть похожие
vrabosh: вот так я вызываю
vrabosh: if n<0:
for i in range(abs(n)): m = encode(m)
Uljahn: def encode(m): http://chat.codingame.com/pastebin/fbca0efe-b09a-49c3-8d3b-edaac824f8d9
Uljahn: почти то же самое, что и у тебя нашёл
Uljahn: r на s только заменить
Uljahn: однобуквенные имена это пипец, хуже только буква с цифрой
vrabosh: тотже результат дает
Uljahn: http://chat.codingame.com/pastebin/3f5ab53e-6d21-4338-a7ce-066ab75651fe
Uljahn: это не я писал, но так проходит
Uljahn: может, у тебя декодер не правильный всё же?
vrabosh: даже если он не пральный.. то поему мой енкодер показывает другою строку, чем мне приходит от message?
Uljahn: может, функция кодирования не обратима?
vrabosh: как они тогда закодировали?
Uljahn: магия
vrabosh: другим энкодиром чтоли?
vrabosh: скинь того чела декодер плз, проверю)
Uljahn: def decode(s): http://chat.codingame.com/pastebin/92e7f7f6-5f67-4f4d-bc02-09244f824be2
vrabosh: страно заработало
vrabosh: возможно правила не допонял
vrabosh: всетаки некодер не пральный.. я оказывается не всю стр скопировал...
vrabosh: понял, он у меня проверку всегда с начала начинал, а тут с конца надо делать..
vrabosh: Uljahn, а чего тебе не нравятся имена в один символ, читать удобно.. как мат формула почти)
ilt: когда ты вернешься к своему коду через некоторое время ты в него будешь долго втыкать с этими формулами
Uljahn: я не против, когда известные физические формулы записываются односимвольными именами
Uljahn: или математические
Uljahn: или если односимвольные имена используются для индексов или обозначения координат
Uljahn: во всех прочих случаях получается codegolf на равном месте
Uljahn: хорошее имя подсказывает, что можно ожидать от значения переменной, это особенно важно в питоне с его динамической типизацией
Uljahn: к тому же, однобуквенных переменных не так уж и много (особенно не рекомендуется использовать l, I, O), т.е. для скрипта на пару десятков строчек - норм, но что-то крупнее писать уже больно
Uljahn: возможно, у меня другое представление об удобстве чтения, - я люблю когда имена выстраиваются с командами и названиями функций в осмысленные фразы, на питоне очень красиво выглядит, почти как человеческая речь
Uljahn: я когда первый раз увидел такой код, прям катарсис пережил - "а что, так можно было?!"
735487: самый топчик случайно русскую c вписать где нибудь :)
Uljahn: угу, классика
Uljahn: тоже стараюсь не использовать с
735487: я еще недавно совсем ловил багу несколько часов
735487: считываю текстовик. делю его по разделителю. и в базе ищу по словам. смотрю тупо на первой строке не находит а на второй тоже самое и уже находит
735487: долго очень ковырялся
735487: угадаешь в чем дело?
ilt: 15к достиг на втором ходе
ilt: но почему-то пока играет хуже, чем прошлая стабильная версия
ilt: есть ряд сомнительных ходов
ilt: иногда дает противнику немотивированный фримув
ilt: скорости что-ли не хватает!?
735487: да может быть мало роллаутов чтобы понять что есть лучше ходы
tomatoes: на фримув какойто штраф надо делать. чтоб и мцтс не пыталось так ходить и саму мцтс разгружало
tomatoes: новым только
wlesavo: засабмитил в крестики на плюсах, 1.5k роллаутов)) но я вообще пока ничего не делал, чисто наивная такая реализация, по сравнению с 300 питоновскими конечно даже в такой версии выглядит лучше