Chat:Ru/2020-06-18
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 ход есть.. занес эти ходы в базу и из базы даю.