Chat:Ru/2020-06-11
Kadim: как убрать всплывающие менюшки при наведении мышки на код?
Uljahn: это вообще возможно? тут встроен Monaco editor
tutubalin: ты имеешь в виду autocomplete?
Kadim: когда ошибка в коде то при наведении мышки всплывает менюшка, проверку на ошибки можно выключить?
Uljahn: Automaton2000: можно, но только нельзя
Automaton2000: один и тот же код
BorisZ: Kadim можно забить на встроенный редактор - в настройках есть пункт использовать внешний редактор
BorisZ: надо будет установить расширение и пиши код локально где привык
BorisZ: оно будет синхронизироваться
Uljahn: такая настройка вроде только в хроме
BorisZ: у меня хром, из оперы тоже заводил, за остальные не скажу
Hamibar: При стандартной формуле UCB дерево должно получаться широким правильно? или у меня косяк и оно должно быть достаточно глубоким?
BorisZ: там же константа в формуле которая регулирует соотношение ширина/глубина
Hamibar: ага. Просто на статейке в хабре написано, что при ее увеличении глубина растет, а у меня наоборот при уменьшении растет глубина
Hamibar: вот я и думаю, там опечатка
Hamibar: или у меня баг
tomatoes: при увеличении ширина растет
Hamibar: ага, спасибо. Тогда все ок
tutubalin: не всё так однозначно
Hamibar: вот какой выбрать это действительно неоднозначно.
BorisZ: тут то просто, перебором
Hamibar: нужно похоже что-то типа брутал тестера ставить
BorisZ: на самом деле это не очень принципиально
BorisZ: я пробовал, у меня играло примерно одинаково в диапазоне от 0.4 до 1
BorisZ: не помню точно уже цифр
BorisZ: если больше или меньше то заметно было ухудшение результатов
Hamibar: я тоже пришел к коэфу меньше 1)
BorisZ: количество ролаутов важнее, надо туда копать
Uljahn: может, лучше cg benchmark всё же?
BorisZ: игр мало там получается
Hamibar: мб и лучше)
BorisZ: а против кого играешь вроде примерно пофиг
Uljahn: против реальных противников, а не против потенциально забагованного своего бота
Uljahn: сколько раз такое было - пилишь фичу, а становится хуже, выпиливаешь баг, становится ещё хуже
tomatoes: тоже где-то 0.5-0.7 стояло. потом переделал скор роллаута от -1 до 1 и коэффицент увеличил в 2 раза т.е. 1-1.4 стал
Uljahn: ну это как раз логично
Uljahn: коэф зависит от значений наград
BorisZ: да, кстати, наверное логично, должна быть зависимость от того как исход взвешен, у всех по раному
Uljahn: в статьях встречал оба случая
Uljahn: т.е. это не принципиально, кому как удобнее, но важно помнить про зависимость
Uljahn: оптимальное значение всё равно перебором искать, а тут типа отправная точка
tutubalin: по идее MCTS - не совсем подходящий случай для UCB
tutubalin: UCB основывается на предположении, что испытания независимые
tutubalin: а тут они ещё как зависимые
BorisZ: почему зависимые то? разверни тезис )
BorisZ: при данном ходе имеем некоторое множество- дерево продолжений
BorisZ: много раз проходим по дереву этому случайно выбирая ветку - роллауты
BorisZ: каждый ролаут независим от остальных ролаутов
BorisZ: в дереве этом
wlesavo: но по сути каждый путь путь начинается из корня и в этом смысле испытания зависимые, это не совсем бандиты
BorisZ: друг от друга то не зависимые
BorisZ: от начальных условий - все одинаково зависимые
wlesavo: по сути роллаут это путь от корня до терминальной ноды, первая часть пути детерминирована, и она зависит от предыдущих испытаний
BorisZ: может tutubalin имел ввиду что это наше чистое псевдо дерево ролаутов постепенно превращается в настоящее дерево с нодами, в котором выбор уже не случаен?
BorisZ: я думал речь идет про лолауты из одной и той же ноды
BorisZ: лолауты лол
wlesavo: а, если из одной и той же то да, можно считать независимыми
wlesavo: но это если ты их пачкой запускаешь
wlesavo: а если по одному то у тебя не будет двух роллаутов из одной ноды же
BorisZ: потому что ноду сразу разворачиваем после первого ролаута?
wlesavo: ну да
wlesavo: хотя никто не мешает модификацию прикрутить чтобы не разворачивать пока там статистика не наберется небольшая
wlesavo: но вероятно будет хуже
tutubalin: допустим, уже построена часть дерева. мы начинаем ролаут из корня. выбираем ребёнка по формуле. потом опять выбираем ребёнка по формуле, потом ещё раз... это уже не совсем рандом
BorisZ: это не ролаут - тут путаница в терминологии
tutubalin: ну плейаут
BorisZ: вроде все называют ролаутом случайное доигрывание из уже построенной ноды
wlesavo: если роллаут именно из ноды считать то его начальное положение все равно зависит от предыдущих испытаний, а значит и результат испытания зависит
tutubalin: ну вот по идее формула должна работать для терминальных нод, где действительно сталкиваемся с рандомом
BorisZ: путь вниз по построенному дереву делается по формуле - он отношения к рандому не имеет - как я понимаю
tutubalin: вооот! а формула основана на предположении, что испытания случайны и независимы
tutubalin: вот полный курс про UCB: https://banditalgs.com/2016/08/01/table-of-contents/
BorisZ: ролауты из одной ноды не зависимы от других ролаутов из той же ноды
tutubalin: как называется, когда из корня идёшь?
BorisZ: а если они из раных нод то вобще бессмыслено про независимость говорить
tutubalin: представь, что у тебя многорукий бандит, но шансы выигрыша на каждой руке не постоянны, а меняются в зависимости от того, сколько раз ты эту руку уже дёргал
BorisZ: в нашем случае это не так ведь
BorisZ: допустим мы запретили дереву расти
BorisZ: просто проходим сверху вниз, копим статистику
BorisZ: ролауты из одной ноды не влияют на ролауты из других нод
BorisZ: на результаты
BorisZ: они могут повлиять на частоту, с которой мы будет посещать другие ноды
Uljahn: из корня идёт selection до неразвёрнутой ноды, потом идёт playout (rollout)
BorisZ: но этот процесс и так не должен быть случайным
BorisZ: из неслучайности этого процесса - выбора нод, мы извлекаем выгоду - дерево растет не равномерно как было бы при случайном выборе
BorisZ: а в интересные места глубже
tutubalin: это понятно
tutubalin: но вот конкретно вот это корень из логарифма берётся на основе предположения о независимости испытаний
BorisZ: Uljahn спасай
BorisZ: у меня работа
BorisZ: сожги еретика )
Uljahn: почему шансы выигрыша на каждой руке не постоянны?
tutubalin: потому что внутри бандита сидит несколько маленьких бандитов, которые не хотят, чтобы ты выиграл
tutubalin: они точно так же выбирают лучшего из бандитов. а выбирают они на основе статистики. и каждый раз, когда дёргаешь руку, статистика меняется
Uljahn: для каждой ноды есть предельная вероятность выигрыша, которая равна суммарному значению выигрышей в полностью построенном дереве, не?
Uljahn: в полном дереве уже нет вероятностей
tutubalin: в полностью построенном дереве каждая нода или 100% выигрышная или 100% проигрышная
Uljahn: или ничья
tutubalin: ну да, или ничья
Uljahn: или противник может сыграть неоптимально и отдать тебе победу)
tutubalin: тоже может быть
Uljahn: я про все исходы говорю
Uljahn: рандомные роллауты как раз пытаются собирать непредвзятую статистику по всем возможным стратегиям
tomatoes: добавил маленькую эвристику (избегать фримувов для противника и захват минидосок) в правую часть уцб и ворвался на 5 место :sweat_smile:
tutubalin: смотри. есть нода, из неё 5 ходов. 4 хода ведут к моментальному проигрышу, 1 ход ведёт к моментальному выигрышу
tutubalin: с точки зрения рандома шанс 1/5. но если против нас играет не рандом, а игрок, то он выберет выигрышный вариант
Uljahn: tomatoes :fire:
Uljahn: tutubalin: мы не знаем, что выберет противник, но хотим, чтобы его выбор нам навредил как можно меньше, это минимакс
tutubalin: да, но в минимаксе мы выбираем наиболее неприятный ход противника
tutubalin: а для себя выбираем наиболее приятный
tutubalin: вот тут рассказывается, откуда растут ноги у формулы. https://banditalgs.com/2016/09/18/the-upper-confidence-bound-algorithm/
wlesavo: tomatoes хех, я на этих эвристиках как раз играю
Uljahn: вместо UCB можно epsilon-greedy использовать или thompson sampling
Uljahn: ага, как раз в этом цикле статей и читал про это
tutubalin: >> if X1, X2,…,Xn are independent and 1-subgaussian
tutubalin: надо взять какую-нибудь игру, для которой дерево не такое большое (те же крестики-нолики) и посмотреть, как оно там работать будет
Uljahn: я не понимаю суть претензий :(
Uljahn: минимакс строит полное дерево, MCTS строит такое же полное дерево, только иначе
tutubalin: претензия к правой части UCB
Uljahn: по-моему, она связана с regret
tutubalin: она основана на предположении, что испытания независимы и подчиняются подгауссовскому распределению. но это может быть совсем не так
Uljahn: вот inoryy бы объяснил, он спец в статистике, а у меня только интуитивное ощущение понимания)
tutubalin: ну вот откуда в формуле взялись корень и логарифм?
tutubalin: они взялись из функции Гаусса
Uljahn: https://banditalgs.com/2019/03/17/bayesianminimax-duality-for-adversarial-bandits/
tutubalin: там игра попроще
Hamibar: не давать фримув сопернику - это значит не отправлять в пустую доску?
wlesavo: на заполненную наоборот
Hamibar: ааа, я понял
Hamibar: спасибо
Hamibar: я вот думаю, если можно победить на маленькой доске стоит ли делать этот ход. Или лучше монте карло пусть решит.
BorisZ: дерево должно решать
BorisZ: может после этого взятия у тебя форсированный проигрыш
Hamibar: хорошо, спасибо)
BorisZ: я вот подумал как можно дополнять эвристиками дерево
BorisZ: когда ход выбираешь - надо брать не одну с лучшим скором а несколько если скор отличается незначительно
BorisZ: и потом уже выбирать ход если он подходит под какие-то железобетонные эвристики
Hamibar: я тоже подумал. Типа штрафовать за определенные ходы
BorisZ: в пределах какой-то дельты - 1-2 процента это фигня так то
BorisZ: не, не так
BorisZ: когда уже все время исчерпалось на ход, дерево построено
BorisZ: ты просто выбираешь лучшего чайлда рута, с наибольшим скором
Hamibar: я понял, так тоже можно поробовать
BorisZ: а там может 2-3 чайлда у которых скор отличается на волосок
BorisZ: в пределах погрешности короче
BorisZ: и если один из них попадает в эвристику - теклес, закрытие доски, еще что там, то его и брать
BorisZ: если не попадает то как обччно - с лучшим скором
Uljahn: можно уже при создании чайлда ему задавать начальный скор, если соответствует какой-то эвристике, у меня так
BorisZ: не скор, я попутал, по визитам выбираем же
Uljahn: тогда MCTS его будет чаще выбирать и набъёт ему больше визитов, если вариант действительно хороший
Uljahn: *чаще выбирать в начале
BorisZ: Uljahn мне как-то не очень - подталкиваешь как бы к тому ходу который тебе нравится
Uljahn: а подкрепление хода эвристикой - это не подталкивание?
tomatoes: немного можно
BorisZ: а если наоборот - как я описал, тогда оно считает что-то там, а ты в конце выбираешь из нескольких лучших, по дебютам или как там
Uljahn: кстати, а если но относительному количеству проигрышей выбирать?
tomatoes: то же самое по идеи получится
tomatoes: или я не понял
BorisZ: проверить то недолго
Uljahn: (10 wins, 0 draws, 6 loses) -> 10*1+0*0.5+6*0 = 10pts., 16 visits
(4 wins, 12 draws, 0 loses) -> 4*1+12*0.5+0*0 = 10pts., 16 visits
Uljahn: 0 проигрышей лучше, мне кажется
Uljahn: особенно если за нолики
tomatoes: у меня сделано крестикам за ничью -0.5, ноликам 0.5
BorisZ: может за нолики просто за ничью давать чуть больше?
BorisZ: ничего себе разница у тебя)
tomatoes: ну я не сказать что особо думал, так "на глаз" поставил 😅
tomatoes: за проигрыш -1, выигрыш 1
tomatoes: http://chat.codingame.com/pastebin/af12a59f-a1dc-48e3-9045-87fc92bb175f
tomatoes: как-то в итоге будет :thinking:
BorisZ: хм я выбираю ход чисто по визитам, а статистику побед и поражений в одном счетчике храню, то есть даже не знаю сколько там чего
BorisZ: просто за победу 1 з апоражение 0 за ничью половинка
BorisZ: я думал просто за ничью типа не половинку а 0.4 крестикам и 0.6 ноликам
Uljahn: или 0.25 и 0.75 как у tomatoes
Uljahn: кстати, заметили, в каких случаях karliso проигрывает? у него похоже принудительный вин минидоски стоит в лолаутах
tomatoes: тоже всё вместе, pts это то что в счетчике будет
tomatoes: я из самих ролаутов всё вытащил что раньше насовал. только рандом теперь
BorisZ: во, практика - критерий истины )
BorisZ: все принудительные ходы и инставины - толко тормозят все, а добавляют чего-то или не вобще хз
Uljahn: и за крестики он проигрывает только при ходе на сторону, а не в угол
Uljahn: скорее всего, дебютная книга не очень у него для этого варика
Uljahn: BorisZ: в среднем могут давать больше, пока все не закодят контр-стратегии, эксплуатирующие эти уязвимости
Uljahn: раньше у рекурса как раз на сторону было начало за нолики
BorisZ: какие уж тут контрстратегии
BorisZ: задача на оптимизацию по сути
Uljahn: ну, например за нолики выбирать из двух ходов с некоторой вероятностью
Uljahn: тогда будет шанс порекать топа)
BorisZ: сильно сомневаюсь
Uljahn: мне кажется, даже несколько выигрышей ноликами дадут сильный буст к рейтингу
Uljahn: ну, не в смысле совсем порекать, а подняться в рейтинге за счёт побед над ним
BorisZ: если один из вариантов сильно хуже то проиграешь, если одинаковые то не важно
Uljahn: тогда ему придётся перезатачивать свою стратегию
Uljahn: оба варианта примерно одинаковые, один немного лучше, но второй хуже исследован
BorisZ: да вроде никто тут не затачивает ничего, или я не знаю чего-то
Uljahn: ))))))
BorisZ: дак он его исследует на следующем ходу
Uljahn: недавно топы сабмитили без книг дебютов
BorisZ: ну и заранее тоже уже было исследовано если дерево переиспользуем
Uljahn: книги-то в офлайне составляются
BorisZ: книга дебютов не отменяет обычного расчета деревом
Uljahn: у смита месяцами в фоне MCTS статистики собирает
Uljahn: да, но эффект горизонта встаёт
BorisZ: если у человека 100к ролаутов - не победишь его с 10К и любой книгой, она конечна
Uljahn: я такого и не утверждал
BorisZ: книга просто экономит время нескольких ходов, - против другого с 100к это может оказаться критичным, да
Uljahn: или против другой книги
BorisZ: не считаются лишние ветки, не входящие в дебют
BorisZ: если ход будет сделан не по дебюту то все посчитается быстро
Uljahn: до самого конца просчитается?
BorisZ: нет, и не надо до конца
Uljahn: эффект горизонта - когда просчиталось до хода, который кажется хорошим, но если добавить больше времени, то он становится плохим
BorisZ: с дебютом дерево то все равно строится, просто в недебютные ветки не заходится или заходится намного реже
Uljahn: для недебютных веток статистики будут неточными, ч.т.д.
BorisZ: потому что они априори не выгодные для тех кто их делает
Uljahn: конечно не выгодные, в них выше вероятность проиграть, но и выиграть тоже можно
Uljahn: у смита месяцами MCTS в фоне статистики собирает
BorisZ: ладно, мы с тобой спорим как будто оба в топ 10, все оптимизации перепробовали и только дебютной книги не хватает )
BorisZ: как если бы мы сейчас партию ли седоля против альфа го взялись обсуждать
Uljahn: во, кстати... крутая статейка сегодня попалася https://www.yuzeh.com/data/agz-cost.html
Uljahn: просто абассака
BorisZ: да уж наверное гугл или кто там, дипмайнд отбил эти вложения пного раз уже
tutubalin: Each move during self-play uses about 0.4 seconds of computer thinking time.
tutubalin: за 400 миллисекунд-то конечно можно норм играть
Uljahn: ну это же го, а не крестики
BorisZ: когда в 90х был дипблю против каспарова там тоже жутко дорогая была эта дипблю, ее долго строили и тренировали
BorisZ: а сейчас прога в телефоне телефон выигрывает у гроссов
Uljahn: я к тому, что RL - это развлечение для богатых, на мобильной видюшке только обратный маятник и обучишь, наверное
Uljahn: естественно, deepmind выгодно гонять своё железо для пиара, чтобы потом выгодно продавать мощности
Uljahn: телефоны сейчас слишком мощные :smirk:
Uljahn: Your smartphone is millions of times more powerful than the Apollo 11 guidance computers, Automaton2000
Automaton2000: главное - никогда не прекращать учиться
tutubalin: Automaton2000 там по-тихому не прекращает учиться
Automaton2000: а если у тебя есть
Uljahn: логи-то запоминает, чем не обучение
Uljahn: лол, чел из топ-5 в крестиках говорит, что у него 10к роллаутов
tomatoes: он вроде выводит. на втором 20-30+, потом падает до 10
tomatoes: может реально как-то странно считает :thinking:
Uljahn: так это он с первого хода переиспользует часть дерева, наверное
Uljahn: а, он топ-6, это смитс ресабмитнулся
Hamibar: разве повторное использование дерева даст такой буст?
Uljahn: на первом ходе 1 секунда, там можно дофига насчитать, вариантов начальных ходов не так уж и много
Uljahn: т.е. переиспользовать можно процентов 50 сразу
Uljahn: с учётом симметрии, конечно
Hamibar: а ну с симметрией мб.
Hamibar: Я так посмотрел мне это может добавить 10к роллаутов на 2м ходу.
Hamibar: Но это число быстро упадет
tomatoes: оно в теории помогает, но на практике не заметил разницы
Hamibar: по прикидкам добавит 5% роллаутов. По крайней мере у меня примерно так получается.
gybson_samara: босс, гад такой, рандомно ходит, хз как отлаживать =)
Uljahn: https://www.codingame.com/replay/472263657 эффект горизонта на 36-м ходу, судя по статистикам в месейдже
Uljahn: а через несколько ходов смит уже просчитал партию до конца
gybson_samara: 31 ход непонятный, крестик отправляет синего завершить ряд совершенно ни с чего
gybson_samara: 43 ход крестик отправляет нголик в свободный поиск при наличии других вариантов
tomatoes: в конце часто бывает такое что как ни крутись, но 100% проигрыш
Hamibar: если я правильно понял, что значит слово win в отладке, то на 40м игра была уже закончена
gybson_samara: это не значит, что надо ходить как попало
Hamibar: это значит, что как не ходи проигрыш
gybson_samara: Т.е. на 40 ходу у него пошел другой алгоритм, не как в основной игре?
gybson_samara: Если это не другой алгоритм, а тот же, то он неверно ходит и какая разница на каком ходу?
Hamibar: там нет верного хода.
Uljahn: Смитс же в месейдж пишет WIN, то есть выигрыш при любом ответе соперника, и у соперника оценка в минуса уходит, тоже без вариков значит
tomatoes: алгоритм (мцтс) по сути выдает шанс выигрыша для каждого хода. и вот в конце он начинает выдавать для всех ноль
tomatoes: и берется первый попавшийся
ilt: а как он определяет что WIN?
Hamibar: наверное просто дерево до конца посчиталось
Uljahn: угу
Uljahn: а дроп на 36-м с 0.69 до 0.32 - это как раз эффект горизонта, когда глубина дерева не достаточная, либо эксплорейшон слабый
Uljahn: возможно, что из-за эвристик, которые игнорируют некоторые ходы
Munchkin: Слушайте, а какой синтаксис у команды "BOOST"?
Uljahn: print(x, y, "BOOST")
Munchkin: Спасибо большое!)
Uljahn: просто строковые символы вместо thrust выводи
Uljahn: вот что jacek написал в общаке: i have 1-ply check for win and moves that can win small board are twice as likely chosen as others, i dont have any pool node or log table or other fancy optimizators, but i reuse tree
Uljahn: и этого для топ-6 достаточно с 10к на втором ходу
Uljahn: либо недоговаривает
Hamibar: я вообще не понимаю как так)
ilt: если дерево до конца просчиталось, то как понять это победа или поражение?
ilt: оценка ноды близка к WIN_SCORE что ли
Hamibar: если оно просчиталось до конца, то каждый роллаут возвращает поражение.
ilt: почему?
Hamibar: ну так у нас теперь больше нет рандома
Hamibar: во всех листах дерева достоверно известно, что это проигрыш
Munchkin: У меня тут еще вопрос по Coders Strike Back: существуют ли еще какие-то режимы мощности двигателя кроме thrust и BOOST? Сорь за такие вопросы, но я новичок))
gybson_samara: SHIELD
gybson_samara: ускорение 0 на три хода
Munchkin: У меня просто Wood Division 3 to 1
Munchkin: Его же там еще нет
Munchkin: по-моему)
ilt: Hamibar ты же можешь опираться только на оценку ноды или количество визитов
ilt: для двух терминальных детей это будет 1 и 0 как я понимаю
ilt: если оценка
ilt: и количество визитов близко к общему числу роллаутов
ilt: когда большое дерево не понимаю как из этого понятно, что это WIN
ilt: 14 ходов до конца
Hamibar: если оно у тебя уже построено до конца(например ты его переиспользуешь), то у всех дочерних ноду рутов будет 0 побед.
Hamibar: а если ты достроил и продолжаешь ходить, то будет наверное очень большая разница между количеством роллаутов и количесвом побед
ilt: это поражение, а не победа, как это нет побед?
Hamibar: ну если из данного нода мы не можем прийти к победе, то откуда они появятся ?
ilt: МСмитс пишет вин
ilt: значит он понял, что это точно победа
Hamibar: а ну без разницы
ilt: как это без разницы
ilt: я бы себе такое запилил, если бы понял как это определить
Hamibar: так то же самое получается, только у детей рута не будет ни одного поражения
ilt: Hamibar ты меня на 20 мест вверх запушил?
Hamibar: вроде не я. Хотя я много сабмитил, там что мб и я
BorisZ: за 14 концов до конца дерево достроено - вполне реально, в концовке мало мвриантов хода
ilt: почему у детей не будет поражений? в том реплее я тебе накидаю последовательность чтобы он проиграл
BorisZ: каждая нода - терминальная, либо победа либо поражение
BorisZ: ролауты не нужны уже
Uljahn: ilt: среди любых детей будет вариант, который ведёт к победе
ilt: логически я это понимаю, а технически то как?
Uljahn: строишь полное дерево до конца игры, но это должно роллаутов хватать, а у смита их дохрена
BorisZ: невозможно развернуть список чайлдов
Uljahn: т.е. дерево в данном случае будет равноценно минимаксу с глубиной до конца игры
Uljahn: полный перебор
BorisZ: он 100 тыщь раз пробежал по дереву сверу вниз и ни разу не развернул ноду
Uljahn: ?
ilt: у него фримув там
Hamibar: Кстати ведь мы не можем идти в ребенка, если в ноде еще не из всех детей сыграли?
Uljahn: а, значит именно ход, ведущий к фримуву и был победным
ilt: 28 вариантов на выбор
Uljahn: Hamibar: да
Hamibar: я так на всякий случай, а то вдруг)
Uljahn: ilt: скорее всего jacek именно не учёл, что смитс будет делать фримув, поэтому оценка была оптимистичная слишком
Uljahn: а смитс просчитал все варики, и нашёл беспроигрышный
Uljahn: который как раз с фримува начинался
ilt: у него не мкст?
Uljahn: у обоих
Uljahn: только количество роллаутов разное и эвристики
ilt: я думал как для мкст это определить
Hamibar: да у него вообще странно как-то все работает. 10к роллаутов всего и в топе легенды.
Uljahn: ilt: MCTS сам тебе найдёт этот вариант по формуле, он будет в эту ветку чаще всего ходить
Uljahn: но только если будет достаточно роллаутов
wlesavo: может там не рандомные роллауты
wlesavo: по этому всего 10 к и поэтому в топе
ilt: в минике вроде понятия роллаут разве есть?
Uljahn: нет, тут у обоих MCTS
Uljahn: просто дерево будет одинаковое в итоге
ilt: Uljahn запутал
ilt: если MCST то как он WIN определяет?
Uljahn: по отсутствию неразвёрнутых нод, наверное, т.е. раз дерево полное, то можно точно найти лучший вариант
Uljahn: идёшь по формуле до конца дерева, оно приводит тебя в лучшую концовку
Uljahn: *она
YurkovAS: может проще? bestNode.score / bestNode.visits >= 0.85
ilt: вот и я что-то такое подозреваю
ilt: но может ли быть для 26 вариантов такое соотношение справедливо?
ilt: тем более если роллауты останавливаются
ilt: надо попробовать
Hamibar: мне кажется, что не обязательно определять вин. Если это действительно вин, то дерево туда тебя и приведет.
Hamibar: Только если вывести в сообщение)
ilt: я только для сообщения интересуюсь!
vrabosh: это вы все крестики нолики обсуждаете?
vrabosh: BorisZ, у тебя задача классная, отложил ее на потом.. почитаю про эту систему счисления.. я как понял, раньше компы могли быть такими
Uljahn: чем хороши крестики - их можно обсуждать бесконечно
Hamibar: только сейчас увидел, что в первую калибровочную игру с боссом сыграл
Hamibar: лега так близко и так далеко)
MelnikovIgor: Hamibar) В очередь за мной)
Hamibar: ты главное там босса выигрывай)
MelnikovIgor: Я застрял в топ 2 навечно)
MelnikovIgor: Босса 38% винрейт
Hamibar: это конечно капец, когда 2й.
MelnikovIgor: Я на C# еще упорлся
MelnikovIgor: Принциписально хочу на нем
MelnikovIgor: На плюсах думаю уже в леге был бы
YurkovAS: MelnikovIgor добавь ходы теклеса и пройдешь. посмотри как у него за Х первые ~20 ходов ставит.
MelnikovIgor: Я так и не понял в тот раз что такое теклес
MelnikovIgor: Поясните еще раз плиз
Hamibar: когда ты на пустой доске ходи так, чтобы враг на ней остался
YurkovAS: https://www.codingame.com/share-replay/472301310 смотри внимательно куда он Х-ы ставит и заметишь
Hamibar: 0-0 0-4
YurkovAS: первые 20 ходов, примерно.
Hamibar: 0-8 4-0 4-4 и тд
MelnikovIgor: Хм, спавсибо, проанализирую, отпишусь потом)
YurkovAS: кстати, там он до 11 так ходит, потом мой его обманул и сам стал О в остальные проставлять.
MelnikovIgor: Это в четь чувака того так назвали?)
MelnikovIgor: честь*
YurkovAS: да
YurkovAS: и сделай реюз дерева, там же статистика накопленная остается. оно заметно прибавляет.
MelnikovIgor: Реюз есть
MelnikovIgor: Ессесно
MelnikovIgor: А есть прикидки насколько теклесс хорош? Кому то помогло?)
YurkovAS: +10 мест
Hamibar: кстати интересная стратегия против теклеса. Уже на 6 ходу можно самому начать так ходить
ilt: MelnikovIgor +20 мест в золоте дало
MelnikovIgor: Кто нибудь юзает зеркалирование/поворот борды?
MelnikovIgor: А поиск уже существующей?
Hamibar: что значит поиск уже существующей?
MelnikovIgor: искать тот стейт борды который был уже проанализирован в других ветках
MelnikovIgor: И обьединить
amurushkin: это скорее всего не будет такой же стейт потому что очередность другая и противнику ходить в другой борде
MelnikovIgor: Ну учитывать чей ход надо тоже
MelnikovIgor: Конечно
Uljahn: это типа transposition tables, смитс говорил, что толку от них мало
Uljahn: а ты в легу собрался, смотрю. хороший сабмит, и винрейт против босса
MelnikovIgor: Спс
MelnikovIgor: Теклес прикрутил на скорую руку
Uljahn: если не сразу, то за пару сабмитов можно боссу сдуть рейтинг, если винрейт хороший
MelnikovIgor: Ага)
Uljahn: у тебя теклесы только за нолики работают?
MelnikovIgor: За всех, за Х скорее всего первые ходи из плейбука
MelnikovIgor: Отрублю плейбук следующим сабмитом если не прокатит
YurkovAS: MelnikovIgor за О у тебя не работает. смотри 3-4 ход https://www.codingame.com/replay/472314366
MelnikovIgor: Плейбук сработал
MelnikovIgor: На 4 хода
MelnikovIgor: Там 3я цифра в выводе
MelnikovIgor: сколько ходов из плейбка
MelnikovIgor: Уберу плейбук следующим сабмитом
YurkovAS: tomatoes-а порекал :smiley:
gybson_samara: а я нашел баг и исправил
gybson_samara: @MelnikovIgor гратс =)
MelnikovIgor: Рано еще)
gybson_samara: ага, вижу =)
gybson_samara: но все-равно близко уже
ilt: amurushkin скажи пожалуйста как у тебя кэш сложных вычислений в uct сделан
ilt: это двумерный массив?
tutubalin: добавил UCB, стало хуже
Uljahn: есть лега! грац
Uljahn: теклесы помогли?
amurushkin: ilt: нет 2 одномерных
Uljahn: tutubalin: у тебя случайно не повышенный приоритет ходов выигрыша миниборд?
ilt: а что в них хранится?
tutubalin: Uljahn кроме текслеса никаких эвристик пока
tutubalin: завтра поколупаю ещё. может быть бага где-то
Uljahn: а фримувы нормально обсчитывает? надо бы 1ply win check запилить себе
tutubalin: а может из-за того, что медленнее стало и сим меньше
Uljahn: ilt: у меня корень логарифма и обратный корень
tutubalin: фримувы немного криво
ilt: у меня нет обратного корня
ilt: но там же два параметра
ilt: как двумя одномерными массивами это толпу чисел закэшировать
MelnikovIgor: ЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕ
MelnikovIgor: ЕЕЕЕЕЕЕ
tutubalin: фримув у меня - это два хода одного игрока: выбор доски и потом выбор клетки на ней
MelnikovIgor: Лега
MelnikovIgor: Спасибо ребята
ilt: :v:
Uljahn: :thumbsup:
MelnikovIgor: Теклес помог)
wlesavo: хорош
amurushkin: ilt for (int i = 1; i < PRECOMPUTED_VALUES; ++i) { SQRT_LOG[i] = (float)(EXPLORATION_PARAM * sqrt(log(i))); INV_SQRT[i] = invSqrt(i); }
gybson_samara: ребята с рандомом очень затрудняют мне работу с одинм багом, но я его вижу и отлажу и так
Uljahn: играй против себя, тут половина ботов с рандомом
Uljahn: особенно в верхней части лидерборды
Uljahn: а, у тебя бага... тогда наверное не вариант
ilt: INV_SQRT[i] это нижняя часть?
amurushkin: это 1 делить на корень
Uljahn: 1/корень от числа визитов, наверное
Uljahn: *визитов ноды, а SQRT_LOG для визитов родителя
gybson_samara: Uljahn тут Босс с рандомом, вот в чем печаль и несправедливость
Uljahn: а ты хотел против него книгу дебютов захардкодить?)
gybson_samara: Uljahn нет, я хотел возможность отладки алгоритма
gybson_samara: и свое я получу
Uljahn: у тебя всё ещё эвристики?
gybson_samara: разумеется!
gybson_samara: я еще не все баги нашел
gybson_samara: вот сейчас исправил баг, при котором не делал выигрышный последний ход. как с этим багом в золото залез я не знаю
gybson_samara: на выходных буду делать симу на два-три хода вперед, самому тяжело анализировать
gybson_samara: Так вот, если бы Босс бы стабилен, я мог бы отлаживать на нем, но я вынужден искать противника без рандома и искать баги на нем
gybson_samara: Это совершенно нечестно я считаю
ilt: не добавляет такой кеш скорости
ilt: странно
gybson_samara: короче, я ожидал от кнопки "same condition" именно "same condition"
amurushkin: same condition гарантирует входящие параметры на рефери а не то что противник будет играть также
MelnikovIgor: 103 в леге стал)
MelnikovIgor: о, и 2ой в мире на шарпике
Uljahn: у первого на шарпике вроде бы минимакс
MelnikovIgor: Да как они это делают?)
MelnikovIgor: Минимакс это же определенная глубина просмотра дерева + эвристика?
Uljahn: ну да, оценка нужна хорошая
MelnikovIgor: Там же плейаутов до конца нет?
MelnikovIgor: Там же по глубине режется?
Uljahn: на некоторую глубину только, на которую времени хватит\
Uljahn: называется iterative deepening, поэтапное увеличение глубины
MelnikovIgor: Бимсерч там наверное хорошо заходит
MelnikovIgor: Если эвристика хорошая есть
Uljahn: кстати, про бимсёрч в крестиках не слышал ни разу
gybson_samara: вот вылезу на эвристиках в легу =)
Hamibar: MelnikovIgor ооо, вышел на шарпе в легу. Поздравляю)
MelnikovIgor: Ага, спасибо)
gybson_samara: возможность составить многочлен для решщения задачи и есть задача про PnP в своем роде
Uljahn: кстати, нейронки примерно так и работают - подбирают некую нелинейную апроксимацию оптимальной функции стоимости
Uljahn: т.е. если получится обучить нейронку оценивать ситуацию и прикрутить к минимаксу, то может взлететь, хотя у рекурса не особо получилось, говорят на уровне днища леги
ilt: скорость взлетела, регулярно бью босса
ilt: но вернулись таймауты
ilt: вроде все что не таймаут все выиграно
Uljahn: за счёт чего взлетела? массивы запилил?
ilt: от лямбды одной избавился
ilt: лямбда занимала 30% времени
ilt: как то что я от нее избавился привело к росту скорости в 3,5 раза
ilt: гребанная джава
Uljahn: даже я слышал про то, что лямбды в джаве медленные
ilt: они то медленные то не очень
ilt: я много раз проверял
ilt: видимо все-таки проблема с GC не только в переиспользовании дерева
ilt: сильный рост роллаутов где-то в другом месте вылезает
YurkovAS: эти ходы теклеса можно по разному сделать и результат будет сильно отличаться. него самого похоже они работают только за Х и у томатоса тоже. и не очень форсированно выбираются...
tomatoes: у меня им в начале поиска фейковые роллауты накиданы немного
YurkovAS: а за О нет? у меня лучше играет, когда за Х и О пытается сделать. сделано через бонус к скору ноды.
tomatoes: который сейчас сабмит только за Х
YurkovAS: tomatoes ты несколько раз сабмитил? и всегда на 5-е заходит? не пойму, стоит ли мне пытаться найти улучшение. только ухудшать получается :smiley:
tomatoes: где-то 10-15 было, добавил эвристику и залетело
tomatoes: с первого сабмита
YurkovAS: а, понятно, может быть и удачным сабмитом. который потом не так просто воспроизвести...
tomatoes: смитс сабмитил пару раз потом, кое как держалось вроде :sweat_smile:
tomatoes: и вроде он еще карлисо почти скинул
tomatoes: не знаю правда он улучшал что-то или просто пересабмитил
YurkovAS: значит нормально у тебя должно быть. надо и мне улучшать
tomatoes: спёр у смитса начало за нолики, пока норм вроде
YurkovAS: да, круто идет. мы с тобой одновременно сабмитнулись.
YurkovAS: еще у топов 1-2 константа в формуле меняется. но это не точно.
tomatoes: в зависмости от количества детей и от прогресса игры пробовал. но непонятно как получше и в какую сторону
YurkovAS: по оценке сейчас проверяю. локально показало прибавку, а по факту хз.
tomatoes: локально пробую некоторые ситуации, и с одной константой одни выигрывает, а в другой другие
tomatoes: а что конретно влияет вообще непонятно
YurkovAS: деталей не помню, но топы обсуждали, что константу меняют. давно это было