Chat:Ru/2020-06-18

From CG community
Jump to navigation Jump to search

NightLuna: а где можно посмотреть с какими флагами запускается c++?

tutubalin: https://www.codingame.com/faq

tutubalin: но там только либы перечислены.

tutubalin: обо всех флагах умалчивают

tutubalin: поэтому лучше #pragma использовать

NightLuna: понятно, спасибо

NightLuna: в англ чате забанили чувака за такой же вопрос, это какая-то тайна?

735487: да не понятно за что забанили

Uljahn: gays :joy:

735487: 10:58:36) Qoter: AntiSquid why did you ban rkhapov? 11:00 (11:04:00) Qoter вышел из комнаты.

735487: его тоже забанили?

NightLuna: нет

Uljahn: научите чувака правильно писать guys

Uljahn: Definitions of gay: (of a person, especially a man) homosexual.

NightLuna: аахахха)

NightLuna: это прикол)

tutubalin: YurkovAS про солвер

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

tutubalin: ход, который приводит к поражению - плохой, туда ходить не надо, поэтому удаляешь его

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

tutubalin: если из текущего нода все ходы плохие (и таким образом удалены удалены), значит это плохой нод. значит противник правильно сделал, что сюда сходил

tutubalin: и в нод-родитель становится гарантированно выигрышным. тогда снова смотри п1.

YurkovAS: tutubalin спс. там тоже подсказали другую статью, позже попытаюсь еще раз понять и сделать.

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

tutubalin: у меня именно на этом мозг кипеть начинает )

tutubalin: это немного проще понять на игре Баше

tutubalin: если в твой ход ноль камней - ты проиграл. значит этот нод проигрышный.

если в твой ход 1 камень, ты его берёшь, и противник начинает ход в проигрышной позиции

tutubalin: значит это выигрышная позиция

tutubalin: если в твой ход 2 камня, можно взять 1 (и противнику достанется выигрышная позиция) или 2 (и достанется проигрышная). так как есть хотя бы один выигрышный ход, именно его ты и сделаешь. значит 2 - выигрышная позиция

tutubalin: та же фигня с тремя камнями

tutubalin: а если в твой ход 4 камня, ты сколько бы ты не взял: 1, 2 или 3 камня - противнику достанется выигрышная позиция. раз ни одного хорошего хода нет, значит 4 - это проигрышная позиция

tutubalin: 5,6,7 - выигрышные, 8 - проигрышная. и т.д.

tutubalin: в крестиках всё то же самое, только дерево поветвистее

Uljahn: tomatoes в одной сотой от смита)

735487: YurkovAS: дай и мне тоже плиз

Uljahn: Score Bounded Monte-Carlo Tree Search?

YurkovAS: да

735487: Uljahn: tomatoes его походу мы своими сабмитами так подогнали. могу сабмитнуть еще раз и нарушить картину )))

tutubalin: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.621.8607&rep=rep1&type=pdf

735487: подкинул томатоса )))

Uljahn: зачёт))

tomatoes: спасиб) :sweat_smile:

735487: пробую убер идею )))

735487: походу может и в 10 не войти ))))

735487: не зашла фишка ))

tutubalin: ещё несколько фишек попробуй, может томат и на первое место выйдет )

735487: да запросто )))))

Uljahn: tutubalin: что это за фича - создавать ноды в роллаутах?

Uljahn: "one of my failed attempts was when i created a node for every played state for example, during random playout i created a node for every played move"

Uljahn: откуда вообще такая идея взялась?

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

735487: но блин это постоянни при бекпропе надо проверять получается?

vrabosh: вы минимакс в рекурсии делаете?

735487: я минимакс почти не писал. мало чем смогу подсказать

vrabosh: а я чисто решил хоть раз написать.. сделал сейчас просто играет в крестики нолики и оптимизирую..

vrabosh: хотя понимаю, что в тиктактое чуть другой принцип

tomatoes: дерево ифов на 40 строк в солвере

tomatoes: рекурсия попроще должна выглядеть

Uljahn: обычно вроде делают нерекурсивгый минимакс с модификацией ID (iterative deepening), чтобы углубляться, пока хватает времени

vrabosh: а как время проверяют?

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

vrabosh: онож тоже забирает ресурсы

Uljahn: копейки

tomatoes: иф время брек

Uljahn: с ID у тебя всегда есть результат с предыдущей глубины

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

tutubalin: Uljahn это я в очередной раз неправильно понял MCTS и строил дерево прям дерево

Uljahn: tutubalin: ясно

tutubalin: в итоге GC начинало корёжить очень быстро )

tutubalin: amurushkin проверять надо, если ты пришёл в Game Over не рандомом, а по дереву

Uljahn: tomatoes: реально с питона сразу на раст пересел?

tomatoes: ну не то чтобы пересел, попробовал и вроде пошло

tutubalin: если пришёл рандомом, то победа или поражение - штука случайная и мы просто обновляем статистику

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

tutubalin: не весь, а его окончание неудачное для одного из игроков

Uljahn: "вроде пошло" - порекал рекурса :sweat_smile:

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

tomatoes: в разных репах/исходниках

Uljahn: угу, легаси жёсткое, стандартов куча

tutubalin: tomatoes а чистый С?

tomatoes: чистый с как-то тяжко пошел, моменты с массивами/строками

Uljahn: чистый Си слишком чистый :smirk:

tutubalin: массивы как массивы. а строки в UTTT и не нужны кроме констант

vrabosh: вообщем мой минимакс 2000 раз может посчитать партию 3х3, с первого хода

vrabosh: до таймаута..

vrabosh: это норм?

Uljahn: за сколько времни?

vrabosh: не знаю... пока таймаут не падает

vrabosh: 100ms

vrabosh: ну я правда еще в код вставил свой.. грубо говоря может 10мс запас есть

Uljahn: а где ты партии 3х3 берёшь?

Uljahn: у нас вроде 9х9 уже

vrabosh: for i in range(2000):

       a = mimax(0b000001,0b0000,1)

Uljahn: эм, ты одно и то же 2к раз вычисляешь?

vrabosh: я пока учусь, сделал минимакс для 3х3)

vrabosh: я просто время проверить решил

Uljahn: так замеры не делаются

Uljahn: высока вероятность, что что-то закешируется

vrabosh: а какая разница? думаешь он быстрее считает след фунцию?

Uljahn: что тут думать, когда можно померить

vrabosh: так закэшировать я могу тогда в самом начале

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

vrabosh: 2000 это норм или мало?

tutubalin: Uljahn я так понимаю, он как раз кэш и делает

vrabosh: я просто тестирую без плана)

tutubalin: чтобы потом проверять состояние борды

tomatoes: C еще до раста пробовал

tutubalin: 2000 маловато

tomatoes: скорее всего сейчас получше пойдет

vrabosh: tutubalin, а сколько норм?)

tutubalin: смотря что ты потом с этим делать собираешься

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

Uljahn: текущая доска имеет ценность только в совокупности с остальными

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

tomatoes: https://bleedingedgemachine.blogspot.com/2013/08/a-heuristic-for-ultimate-tic-tac-toe.html

tomatoes: такое можно попробовать

tomatoes: хотя там надо предрасчитать :thinking:

tomatoes: и довольно прилично вроде бы

Uljahn: почти что прикручивать нейронку

Uljahn: мне кажется, на питоне миник/MCTS с нейронкой выглядят более реальными кандидатами на легу, чем MCTS с рандомными роллаутами

735487: так то да. вполне может неплохо будет играть

vrabosh: на крестиках классно учиться.. я даже в них не играю.. а у себя чтото там тестирую..

735487: капец там есть посчитанные какие то вероятности уже но нихерасеньки не понятно что к чему ))

tutubalin: угу

tutubalin: amurushkin вероятности кривые причём

tutubalin: один угол 11%, другие 50%

tutubalin: нижняя сторона почему-то 90%

735487: ну он 20000 рандомных позиций вроде брал

735487: я вроде разобрался как он эвристику для доски считает. если лень не будет это все на плюсы перенести надо будет попробовать

735487: хотя не. нафиг наверное. там эти все вероятности в код переносить не хватит тупо 100кб

Hamibar: томатос уже и смити порекал.

tomatoes: запушили, при сабмите ниже был

Hamibar: а это уже не важно :stuck_out_tongue:

Uljahn: кстати, в топе ещё миарема не хватает, он же без книги сабмитнул

735487: ага конкуренция все больше

tutubalin: AntiSquid there was collateral damage. you banned rkhapov for asking about compiler flags

tutubalin: sorry, wrong chat room )

Uljahn: np)

wlesavo: import numpy as np

tutubalin: хорошее начало )

Uljahn: в данном случае это no problem

Uljahn: про нампи правда тоже подумал)

tutubalin: профдеформ )

vrabosh: я как понял тикток это дохренища ифов, а потом когда нить взять их все и переписать?)

735487: нет :)

tomatoes: 79 ифов :relieved:

Hamibar: используешь тернарный и как-будто нет ифа

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

Hiker: джавовский код платтформы же просто принимает путь до экзешника страты

tomatoes: https://www.codingame.com/playgrounds/53705/contest-tools-and-workflow/introduction как вариант

tomatoes: а именно с рефери если, то там проблема что оно по таймауту отваливается

tomatoes: я обычно или тестами или файлами ситуацию генерирую

Hiker: блин какой ужас=) где ж мой раик милый и привычный. понял, наверно можно у рефери в коде подкрутить таймауты....

Hiker: чтобы ждал ответа вечно

Hiker: качать реплеи я учился вчера =) и это тоже была та еще боль(

tomatoes: там два таймату подкручивать надо

tomatoes: один на ход и есть гдето внутри зависимостей еще один что игра не может длиться дольше 30 секунд

tomatoes: и вот со вторым у меня проблема была, но я не умею джаву

Hiker: блин там просто так не поменяешь ( это в либе, которая подкачивается как-то через референсы

735487: да большинству хватает вывода в дебаг а если сильно надо можно стейт сохранить и локально отдебажить

735487: привыкнешь потом еще на раик будешь косо смотреть :)

Hiker: мда, я работаю над собой в этом направлении, но пока оч тяжко

Hiker: я пока только больше их ценю)

Hiker: раннер ,репитер ОТРИСОВКА ДЕБАГ ИНФЫ!

Uljahn: над каким мульти работаешь?

MelnikovIgor: Hiker для C# есть решение

MelnikovIgor: https://docs.microsoft.com/ru-ru/dotnet/api/system.diagnostics.debugger.launch?view=netcore-3.1

735487: ну отрисовка дебаг инфы последние пару раиков только были

735487: зато тут сразу дают код симы )))

vrabosh: есть какая нить функция вычисления средней арефметич не учитывая нуля?

gybson_samara: температуры?

Hiker: Uljahn, хочу допилить пакманов до ума ( легенды). Заодно освоить платформу ближе, я начал прямо с первого дня контеста, не было времени освоиться, MelnikovIgor, да я нашел, но 1. у меня студия комьюнити и там не работает джит отладка, но вроде это решаемо 2. таймауты в коде рефери не будут ждать пока я там отлаживаюсь. Так что видимо это +- тупик

gybson_samara: vrabosh исключение 0 из среднего несколько бессмысленно, но если очень надо, то надо получить ряд без нулей

vrabosh: просто у меня так получилось, что я под нуль кинул клетки куда не надо ходить

vrabosh: я то свою написал. но мне кажется из библиотечных будет быстрее

Uljahn: а нельзя нули отфильтровать и использовать библиотечную функцию для среднего?

vrabosh: Warning: your code did not read all available input before printing an instruction, your outputs will not be synchronized with the game's turns and unexpected behaviour may occur.

vrabosh: из за чего эта ошибка? из за тайматов?

735487: тут 2 варианта. либо все так как там написано либо это баг на сервере

vrabosh: это походу выдает когда уже подлимит таймаут подходит.

gybson_samara: зафигачил первую симу в крестиках

gybson_samara: ищу таймаут =)

Uljahn: [CG]Thibaud06/12/2020 We've added a warning for input/output desynchronization when not all lines of input are read in gameloop puzzles (except for code golf I think)

Uljahn: ...It detects that the program sent data to its stdout before you give the new input

gybson_samara: NEW

gybson_samara: у меня в крестиках код работает между инпутами и ничего

gybson_samara: я так понимаю тут главное чтобы на один инпут был один вывод

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

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

gybson_samara: у меня в крестиках инпут раньше, чем считывание хода противника

gybson_samara: т.е. вывод

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

vrabosh: просто когда подходишь к лимиту такая ерунда появляется.

vrabosh: я перестал просчитывать хода которые на пустой доске и где 1 ход есть.. занес эти ходы в базу и из базы даю.