Chat:Ru/2021-02-26

From CG community
Jump to navigation Jump to search

mykeich: все чучуть не хватает чтоб пройти в следующую лигу по https://www.codingame.com/share-replay/530807536 есть подсказки?:)

mykeich: хочу принципиально минимаксом. сосредоточился на оценочной, но чет не выходит каменный цветок

magaiti: ERROR "you must be the owner to share this replay"

samrrr: https://www.codingame.com/replay/530939845

samrrr: вот всё непойму как он так круто обыгрывает....

mykeich: samrrr да твой бот за 31 ход проигрывает:) https://www.codingame.com/replay/530940288

mykeich: magaiti да я про https://www.codingame.com/ide/puzzle/othello-1

samrrr: тебя нет в моей лиге

magaiti: я в бронзе уттт, можно клепать мыцытыэс

samrrr: ты его мог и для малой доски делать

magaiti: нафиг

magaiti: и так получилось

magaiti: мегастратегия в вуд лиге - если ход выигрывает, ходишь. иначе если враг выигрывает ходом в какую-то клетку, то ходишь туда. иначе рандом. первый ход 2-2 иначе 0-0

mykeich: samrrr ну на чем остановился?

samrrr: на томже

mykeich: пилишь mcts?

samrrr: написал, но толку мало

mykeich: ты раньше писал mcts?

samrrr: нет

mykeich: шансы малы что не ошибся

Uljahn: тут даже дело не столько в ошибке (без ошибок такое почти нереально запилить), а в том, что если не понимаешь алгоритм, то дебажить задолбаешься

samrrr: пока мемори корраптов нету

mykeich: месяц подебажить принтами и разберёшься:)

samrrr: у меня есть вижуал

mykeich: да нафиг оно надо, принт всегда помогает

samrrr: лимит же

mykeich: samrrr осталось разобраться не прикрутил ли ты велосипед

samrrr: прикрутил конечно, на простом мктс выше 50 не поднятся

mykeich: у тебя есть функция mcts_start и mcts?

samrrr: нет

mykeich: неожиданно:)

mykeich: ну вот примерно так

mykeich: http://chat.codingame.com/pastebin/8e43edd8-1d4a-4afe-9be4-cfb4b07da659

mykeich: сделал боса в othello-1 ура. нашел правильную простую оценочную без лапши ифоф и без придумывания сложных эвристик

mykeich: samrrr а что у тебя?

samrrr: что-то похожее

mykeich: В теле MCTS сложней, там есть простор для оптимизаций и я вывел удобную мне последовательность действий

mykeich: treeExpand у тебя есть что создает все дочерние ноды равное числу возможных ходов?

samrrr: да

samrrr: http://chat.codingame.com/pastebin/554050cc-c802-4c5b-957e-80473daa1c18

samrrr: http://chat.codingame.com/pastebin/51732555-a844-456c-a386-5c1e8a6100ca

mykeich: resize что там?

samrrr: да вродн как всегла в векторе

Uljahn: ресайзить не слишком дорого? можно указатель на свободную ноду хранить, а массив нод выделять в первый ход

samrrr: не, недорого

mykeich: объекто ориентированное программирование подводит в скорости:)

samrrr: http://chat.codingame.com/pastebin/1b7fbe50-6529-4627-962d-dcac023eff29

Uljahn: профилировал?

samrrr: этож вектор простой

mykeich: в спорте каждая мелочь важна:)

samrrr: да, в профайлере нет больших пробелов в ресайзе

Uljahn: а родителей как хранишь?

samrrr: никак, нафиг они мне

Uljahn: лол

mykeich: ты не прав

Uljahn: какой 4-й этап в мктс?

samrrr: 4, эмм что?

Uljahn: запилил он

Uljahn: ахах

mykeich: Uljahn наверное оценочная из минимакса:)

Uljahn: не удивительно, что в топ-50 еле вползает

samrrr: всё как мне сказали, беру ход с топ визитов и всё

Uljahn: лол

samrrr: да не, он в топ 5 входит

samrrr: это сейчас ошибка 1 есть

mykeich: samrrr короче как хочешь но самый быстрый код это связанные списки тут через индекс в заранее созданном массиве

mykeich: и парента надо хранить

Uljahn: можно отдельным массивом

samrrr: а нафмг мне этот парент?

mykeich: потому что тебе надо распространять оценку по всем парентам до рута

Uljahn: +

samrrr: но у меня на это есть трейс

samrrr: vector<uint32_t> trace;

mykeich: когда mcts проваливается глуюже ты хранишь список пройденных нод?

samrrr: да

samrrr: там всегото 6-8 индексов

Uljahn: ну вот это и есть паренты

samrrr: но я их не храню в дереве

mykeich: да лишняя возня

Uljahn: цепочку нод во время селекшна можно хранить отдельно

Uljahn: но хранить надо, чтобы оценку вернуть

samrrr: ну у меня есть трейс пока доска идёт внутри дерева

mykeich: просто твой код медленный

Uljahn: у топов на втором ходу 70-100к роллаутов

samrrr: 70% времени на роллаут уходит

Uljahn: битборды юзаешь?

samrrr: да

Uljahn: проверки выигрыша доски в таблице?

samrrr: да

Uljahn: 70% - это вроде нормальное соотношение, но можно селекшн ускорить за счёт fast_rand и fast_inv_sqrt, логарифмы закэшировать или ещё что

samrrr: какие логарифмы?

Uljahn: о_О

mykeich: samrrr select у тебя канонический?

samrrr: что за селект?

mykeich: ну как ты проваливаешься по дереву?

Uljahn: 70% - роллаут, а 30% - всё остальное, в т.ч. и селект

samrrr: беру ноду с топ приоритетом

Uljahn: как вычисляетс приоритет?

samrrr: по какойто формуле, с корнем

Uljahn: что под корнем?

samrrr: tmp_turns_pri[i] = node_child.score / (float)node_child.visit + CC * sqrt(node.visit / (float)node_child.visit)

Uljahn: :upside_down:

Uljahn: Automaton2000: adios

Automaton2000: а то я уже готов в золото (ну хотя бы серебро), пролазить

samrrr: так причём тут логарифмы?

Default avatar.png mitfity: как поменять аватар на этом сайте?

samrrr: https://www.codingame.com/share-replay/530948122 не ну рили так слить....

Uljahn: mitfity: наведи курсор на аву, вылезет попап с новой авой, в чате попозже обновится

mykeich: samrrr типовая формула разве такая?

mykeich: tmp_turns_pri[i] = node_child.score / (float)node_child.visit + CC * sqrt(log(node.visit) / (float)node_child.visit)

Uljahn: вон же логарифм

samrrr: понятия не имею, я просто подставлял всё подряд под корень, чтоб заработало

mykeich: https://wikimedia.org/api/rest_v1/media/math/render/svg/b607bd848f08876b247148bad27c3c26a1066a0d

samrrr: 42 и 1/42 на зашло

Uljahn: тогда не говори, что мктс запилил

samrrr: это мктс так как есть дерево, приоритеты, роллауты

Uljahn: формально да, но на практике - нет

samrrr: но работает же

mykeich: samrrr сделаешь маленькую ошибку и работать будет криво

Uljahn: вот-вот

Uljahn: велосипед с квадратными колёсами тоже ездит же

Uljahn: логарифм в формулу не зря засунули, почитай про upper confidence bound

mykeich: samrrr делай формулу из вики. только буквально не пиши, log Один раз вычисляется в select функции

mykeich: у меня логариф и корни вычисляются при старте, а дальше из буффера вытаскивается, но оставь эту оптимизацию на будущее.

mykeich: samrrr согласен или думаешь мы тебя обманываем?:)

mykeich: не знаю как с++, но в си есть sqrtf и logf

Uljahn: есть прагма ffast-math или типа того

mykeich: еще rollout надо проверить, там тоже могут быть сюрпризы. по себе знаю:)

Uljahn: mykeich: у тебя проверки на инста вин есть в роллаутах?

Uljahn: как magaiti выше писал

mykeich: Uljahn я не очень понимаю вопроса

mykeich: если я верно понял вопроса, то в ролаут у меня чисто случайные, никаких предпочтений перед выигрышными ходами нет

Uljahn: ну как бы да, проностью лучайные - это обычные роллауты, а роллауты с предпочтениями и эвристиками - это heavy rollouts

Uljahn: *случайные

mykeich: можно замутить конечно, лень немного:)

Uljahn: где-то читал, что формула UCB даёт оптимистичную оценку, т.е. уязвима к ловушкам, если роллауты подрихтовать, должно стать получше

Uljahn: ловушка - это когда у противника есть возможность навязать хотя бы одну гарантированно проигрышную для тебя линию игры среди множества вариантов, статистически её трудно распознать на начальных этапах из-за эффекта горизонта

YurkovAS: вроде на днях карлисо тоже писал, что выбирает всегда выйгрышный миниборд в роллаутах. и это их быстрее завершает

YurkovAS: и давно томатос тогда про них писал, не помню только что, вроде тоже юзает

Uljahn: смитс и робо тоже вроде писали, у кого-то просто вероятность выбора повышается для такого хода

Uljahn: т.е. если можем завершить миниборду, то делаем ход с вероятностью 50%

YurkovAS: еще есть момент: на этапе экспанда, можно для всех детей запустить роллауты сразу. это заметно повышает скорость, но играет хуже, примерно на 15% (-7-12 мест)

YurkovAS: экспериментировал с этим и заметил, что с этой фичей скорость получается как у томатоса, но у него играет хорошо

YurkovAS: возможно он как-то правильно юзает эту фичу

YurkovAS: там же заметно статстика по визитам и скорам меняется

Uljahn: а сколько роллаутов сразу запускаешь?

YurkovAS: может надо брать только небольшой срез лучших нод да и опять же, визуально не заметишь, придется долго бенчмаркать или много сабмитить

YurkovAS: 1 роллаут запускаю при экспанде

YurkovAS: в других мульти тоже проверял эту фичу и везде она играет хуже но кол-во роллаутов заметно выше, на 20к+ в крестиках

mykeich: сделал так что ролаут выбирает из ходов что ведут к выигрышу на малой доске, у меня там сассив, так что просто сделал копию этого массива и проверил есть ли выигрышные ходы

Uljahn: если выигрыш на малой доске выигрывает партию, то это обязательный ход, мне кажется

mykeich: такую проверку не сделал, это следующий шаг:)

Uljahn: глупо полагать, что противник упустит возможность выиграть, или заблочить тебе выигрыш

Uljahn: рандомный роллаут это не проверяет

mykeich: надо минимакс в ролаут встроить:)

Uljahn: солверы примерно так и работают

Uljahn: что-то типа, когда ветка дерева близка к достроению, дешевле полным перебором заминимаксить и получить гарантированную оценку, чем каждый раз от рута проваливаться

mykeich: глядя на результат понял что это фигня на малых досках выигрывать, часто выигрывать не требуется на малой доске, а я исключил ходы без выигрыша. надо делать только выигрыш на большой доске

YurkovAS: может их еще и несколько бывает и тогда уже надо их в список выписывать и рандомить

YurkovAS: mykeich юзаешь null window (или zero) в минике в ксб?

mykeich: Пока термин не знаком.

Default avatar.png YusufK: всем привет

Default avatar.png YusufK: я здесь новеньки можете мне помогать пж

mykeich: YusufK привет

mykeich: YurkovAS что то не гуглица:)

YurkovAS: mykeich поиши: set new null window https://www.chessprogramming.org/NegaScout <https://www.chessprogramming.org/NegaScout>

YurkovAS: одно из улучшений минимаксов

YurkovAS: я сам еще не освоил, дай думаю тебе сообщу и узнаю за одно

mykeich: с наскоку смыла не понял:) можно повторить и проверить

YurkovAS: смысл не расскажу. видел что его еще немного по разному делают, например в pvs https://www.chessprogramming.org/Principal_Variation_Search

mykeich: попробовал в othello. у меня там как раз обычный negamax. что то провал, может ошибся где:)

mykeich: И в UTTT что то ролауты с фильтром по выигрышным последним ходам плохо себя показало.

YurkovAS: ясно. ну я только хотел помочь чего-нибудь улучшить... бывает

YurkovAS: проверял negascout + null window в wondev woman и тоже не показало улучшения, чем просто альфа-бета правда там средняя глубина 2-3 хода...

YurkovAS: mykeich в общем чате пишут про оценочную к отелло

YurkovAS: стабильные диски надо юзать

mykeich: ну я так и сделал, вопрос как запилить не грузной алгоритм

mykeich: YurkovAS у тебя позиция выше, наверное что то запилил крутое ты?:)

YurkovAS: mykeich у меня там мктс с оценочной по позициям на доске как тут в табличке http://play-othello.appspot.com/files/Othello.pdf

samrrr: не ну босс крыса он тупо себе рейт апает, но со мной не бьётся

YurkovAS: + еще в самих мктс нодах небольшие бонусы за кол-во ходов противнику: чем у него их меньше, тем лучше для нас

Uljahn: о, почти в легу закатился, можешь ведь

Uljahn: http://cgstats.magusgeek.com/app/multi-tic-tac-toe/samrrr

Uljahn: тут можно статистику по сабмиту посмотреть

Uljahn: сливаешь боссу, но выезжаешь за счёт победы над игроками

YurkovAS: да, быстро он мктс запилил

samrrr: какихто жалких 30 часов ну ну

YurkovAS: ну хз, я очередно раз подумал: как обидно (раздражает) что большинство людей намного быстрее меня разбираются в алгоритмах или технологиях

YurkovAS: у каждого свои тараканы :)

Uljahn: кто-то лучше пилит, кто-то лучше разбирается :relieved:

samrrr: может потому, что я по 8 часов в день лет 10 занимаюсь программированием?

YurkovAS: я не меньше

samrrr: насчёт меня можешь особо не беспокоится, таких как я мало. в основном я встречал людей которые и с 3 раза не особо понимают

YurkovAS: :)

Uljahn: кодинг - это освоение инструмента, а чтобы грамотно прикладывать инструмент, нужно иметь компетенции в смежных областях

samrrr: да не, нафиг ненужно. в 99.9% игр боты хуже чем в серебре играют, на стелларис вон посмотри

samrrr: алгоритмы тоже нафиг ненужны, еслиб мне не уужно было 20к роллаутов, то я тупо вектор чилдов в ноду запичнул и всё топ работалобы

samrrr: из всех игр, чтьо мне известны только в star ruler есть что-то запредельно сложное

Uljahn: в RAIC участвовал?

Uljahn: думаю, самое то для тебя

samrrr: не, вообще не слышал

samrrr: у меня такое впечатление, что выйгрыш на малой доске ничего не даёт

samrrr: https://www.codingame.com/share-replay/530990476

samrrr: вон 2 доски отжал, а толку нет

Uljahn: эти две доски не образуют выигрышную комбинацию

Uljahn: выигрыш на малой доске даёт фримувы, если на других досках противник может их выиграть ходом в эту доску

Uljahn: фримувы взрывают пространство вариантов, мктс с недостаточным количеством роллаутов начинает тупить

samrrr: https://www.codingame.com/replay/530994316 вот 2 доски отжал, а серавно начал проигрывать уже на середине

Uljahn: опять они не входят в выигрышную комбинацию

Uljahn: тупо отжиманием досок тут не выиграть

Uljahn: если противник не дурак

samrrr: так это не я отжимаю, это он меня туды спихивает

Uljahn: значит, он игру контролирует, а ты - ент

Uljahn: *нет

Uljahn: Automaton2000: в ты - энт

Automaton2000: это при том что я не прав

samrrr: вотименно и я хз чё с этим делать

Uljahn: а ты в начале всегда на сторону ходишь за нолики?

Uljahn: в угол вроде немного лучше ходить

samrrr: https://www.codingame.com/replay/530995251 вот как так то? мой бот уже слился ещё до занимания какой либо доски

Uljahn: у крестиков преимущество же

Uljahn: попробуй ходить в угол принудительно

samrrr: https://www.codingame.com/replay/530995538 что он творит, все углы отдал и победил как так то

Uljahn: углы отдал в обмен на центр и фримув

Uljahn: неплохой размен

samrrr: 51 ход он просто обязан был выйграть, но мой бот просто взял и слился

samrrr: на ровном месте

Uljahn: возможно, где-то баг

Uljahn: удачи с поиском

tomatoes: возможно недостаточно багов :smirk:

magaiti: нужно ошибиться в знаке в нечетном числе мест

magaiti: похоже я порвал бронзу своим деревянным алгоритмом, просто усовершенствовал до доски 9 на 9

magaiti: мктсом и не пахнет пока

YurkovAS: tomatoes <https://www.codingame.com/profile/66b5c3037cc9a0c762f4f9022612ffd44307061> ты тут? подскажи по крестикам, плиз

Uljahn: что-то я не вижу, как там можно было выиграть на 51-м

tomatoes: тута, а какой вопрос

samrrr: нужно было брать клетку, там шанс вина дольше

YurkovAS: tomatoes <https://www.codingame.com/profile/66b5c3037cc9a0c762f4f9022612ffd44307061> после фазы expand, ты запускаешь рандомные rollout игры для всех новых дочерних нод? по моим экспериментам, что да, но оно же играет заметно хуже

tomatoes: только один

Uljahn: по одному роллауту на каждого чайлда сразу?

magaiti: через 2 минуты буду в серебре

magaiti: я крутой

Uljahn: жжош

samrrr: нет

tomatoes: но у меня рандомная нода не выбирается, сразу уцт (немного измененный) используется

YurkovAS: спасибо!

magaiti: 120 строк кода

samrrr: ты мимо, на количество символов тут всеравно

Uljahn: magaiti крут, это не обсуждается

YurkovAS: tomatoes странно что, у меня такая же скорость достигается именно когда запускать рандомные игры сразу для всех новых нод.

Uljahn: я думаю, по одному роллауту - это мало для сбора статистики

tomatoes: у меня в начале скорость изза того что несколько роллаутов из одной ноды запускаю

Uljahn: вооот

YurkovAS: всегда, или только после экспанда? когда выбрал одну по формуле

tomatoes: когда выбрал

tomatoes: экспанд только на втором визите

Uljahn: блин, я же уже про это читал раньше

Uljahn: где-то в одном из чатов

YurkovAS: спасибо. сохранил и потестирую еще потом

tomatoes: пробовал еще константу побольше в начале, чтоб он не уползал черти куда, а более объективно пытался. но как-то не пошло

samrrr: новая попытка измерить инициативу...

YurkovAS: tomatoes тебя там уже поджимают, еще один новый чел догнал

tomatoes: боюсь трогать, а то затянет снова на неопределенный срок

YurkovAS: это точно

samrrr: пока мне удалось перетасовать топ, и вывесть боулдер на 1 место...

samrrr: паньше там сф заседал

Uljahn: константа решает, конечно

Uljahn: единственное, что в ванильном мктс можно теребонькать

samrrr: простой мктс на 40 месте был

samrrr: ре лаже вальнуть босса не мог

tomatoes: в легенде внизу reLu какой-то с ниеровой пикчей, рекурс снова твинководит чтоль :thinking:

samrrr: о наконец завалил босса

samrrr: по честному без занимания редиректа

Uljahn: tomatoes: это он с нейронками экспериментирует

tomatoes: а. точно вспомнил говорили об этом

samrrr: а нейронку как прикрутить к игре?

tomatoes: насколько знаю самому надо всё полностью сделать, никаких библиотек нет

Uljahn: в офлайне гонять игры и обучать, потом веса загрузить в код, упихнуть только в 100к символов

Uljahn: библиотеки-то для исполнения не нужны особо

Uljahn: вот для обучения - да

samrrr: ну это то понятно, а что на вход нейронке подать?

Uljahn: фичи

samrrr: чаво?

Uljahn: features

Uljahn: можешь попробовать стейт подавать и доступные ходы

Uljahn: но это тупиковый вариант, скорее всего

samrrr: да точно тупик...

Uljahn: можно граф борды подавать ещё, вторичные свойства придумать и т.д.

samrrr: уже лучше звучит

samrrr: во в легу промот выдали

samrrr: чё тут так мало народу?

Uljahn: потому что босс лютый в голде

Uljahn: зато в леге все крутые

samrrr: я всётаки вычислил чего босс такой крутой, он не делает 20к роллаутов, он использует оценку, вместо полного раскручивания цепочки

Uljahn: и какую оценку? повторить сможешь?

samrrr: по крайней мере когда я убрал роллауты в бесконечность и добавил оценку инициативы босс слился

samrrr: да генерик 3 уровня, оценивает насколько хороши дела в каждой миниборде

Uljahn: так как оценивает, по каким параметрам?

samrrr: ну и оценка прогресса по каждой из 8 линий поверх

samrrr: сколько надо ещё наставить, чтобы занять

samrrr: http://chat.codingame.com/pastebin/60d8a8b7-6272-4d66-8d53-45ca693bff96

Uljahn: ну, это звучит логично, но как на практике будет играть? топ-20 леги займёт?

samrrr: нет конечно, иначе в леге только 20 человек былобы

tomatoes: где-то на 120-е место после голды приземляются

samrrr: да, к тому и идёт

Uljahn: в районе кубера)

samrrr: тут главное по честному босса завалить, без редиректов

samrrr: смотри аж в топ 100 зашло

MadKnight: ну ты крут

MadKnight: samrrr

MadKnight: тыж ещё тут?

tutubalin: у меня новый фетиш

tutubalin: http://chat.codingame.com/pastebin/4b8f0287-bcb5-45bb-ba65-fc39ce3b5743

MadKnight: ага, ты

MadKnight: это показывал

MadKnight: но это же ооочень старый фетиш

tutubalin: только это уже совсем другая задачка )

MadKnight: непонел

MadKnight: что другая задачка? в чём прикол?

tutubalin: я раньше показывал решение Rational Number Tree

tutubalin: а теперь решение Find winning strategy

MadKnight: aaaa

MadKnight: чё, а контест на чём будешь пилить?

tutubalin: не знаю пока. наверное опять на сях придётся

MadKnight: да го на шарпы

tutubalin: может быть на TS попробую. он в принципе ничотак, и пошустрее питона

MadKnight: они по скорости почти как плюсы стали

MadKnight: и очень похожи на TS

tutubalin: шарпы я не знаю вообще :(

MadKnight: да TS списывали с шарпов

MadKnight: подгоняя под жс

tutubalin: это всё что я знаю про шарпы :)

MadKnight: а что ещё нужно знать?)

MadKnight: еулер их обожает

MadKnight: marchete и illedan тоже

MadKnight: на шарпах все контесты пилят

MadKnight: вообще отличный язык

MadKnight: затести

tutubalin: попробую

tutubalin: кстати вот интересно

MadKnight: продолжение будет?)

tutubalin: шарпы срисовали с джавы. JS как бы не срисовали с джавы, но назвали в её часть

tutubalin: а TS срисовали с шарпа по мотивам JS

MadKnight: JS вообще какой-то студент изначально запилил

MadKnight: так TS и шарпы от одного создателя

MadKnight: от одного "автора"

tutubalin: а слышал про CEO мозиллы, которого прогнали элгэбэташники за то что он дал бабла сторонникам традиционных браков?

tutubalin: так вот это тот самый "студент", который JS придумал

MadKnight: а слышал как кола устроила сотрудникам тренинги, где прямым текстом говорили How to stop being so white"

MadKnight: ?

tutubalin: не, про это не слышал

MadKnight: https://cdn.newsapi.com.au/image/v1/597380bfdf845140bed73a3914e665ec?width=1280

MadKnight: https://www.entrepreneur.com/article/366132

MadKnight: могу в лс таких новостей покидать

MadKnight: tutubalin

tutubalin: да я не про то вобще

tutubalin: я про то, что JS придумал не совсем студент

MadKnight: а кто

MadKnight: ты слишком тонко сравнил

MadKnight: и слишком непонятно

MadKnight: tutubalin а чё ты не спишь?

tutubalin: https://en.wikipedia.org/wiki/Brendan_Eich

MadKnight: а ну ок

MadKnight: а, я кажется понял твоё офигенное сравнение