Chat:Ru/2020-06-20
tutubalin: я в золото с глубиной 1 прошёл.
tutubalin: точнее глубина там не совсем подходящее слово. каждый из доступных ходов тестировал монтекарлой
vrabosh: просто баги оказывается..)
vrabosh: у меня минимакс считает от 8-0, а гдето 0-8, ну и сама игра 0-8, поэтому запутался.
vrabosh: хотя всеравно в притык с боссом иду
vrabosh: я кстати решил для крестиков 3х3 протестить, идею, что в статье написано на главнй тиктака, он какойто медленный..
amurushkin: а что там написано?
vrabosh: хотя хз, я на картинки тупо посмотрел и мне идея пришла
vrabosh: def mkarlo(aa, bb, p): http://chat.codingame.com/pastebin/63f28697-b4df-4a24-8d5e-517e411a72f7
vrabosh: воттак вот сделал
vrabosh: и что думаете насчет кода? прально делаю или есть способ быстрее?
amurushkin: какая то непонятная хрень :)
amurushkin: похоже на какой то перебор вроде. типа перебираем все ходы и смотрим какой чаще выигрывает?
vrabosh: не хило так в золото влетел.. думал на самом дне буду
vrabosh: а я тут к 250 подбираюсь
gybson_samara: совершенно неожиданный таймаут на первом же ходе при считывании параметров ...
gybson_samara: и это после того, как убрал кучу операций =)
vrabosh: у меня ходы где 1 клетка занята в базу занесены.
gybson_samara: есть где-то мануал, как мне со скачанным рефери отлаживать? как его собрать и вызывать?
vrabosh: а когда нечего нет, сразу выдает равные позиции и нечего не считает
vrabosh: top500 уверенно беру, и хватит.. дальше там походу уже надо переасмысливать все и заного делать.
gybson_samara: opponent_row, opponent_col = [int(i) for i in input().split()] - две секунды ... и чо делать?
vrabosh: а что в троне от минимакса и графов? там же вроде физика?
amurushkin: там дискретно все
vrabosh: я не понимаю слово дискретность
vrabosh: все уже туплю, перепутал трон с гонками.. по картинке
gybson_samara: в гонках тоже все дискретно :-P
vrabosh: gybson_samara, ты каким способом в золото вошел?
vrabosh: я вот думаю, может написать минимакс на поле 81, до первой локальной победы или до первого открытия всего поля всего.. Ктото делал такое, есть резон?
gybson_samara: я баги пофиксил =)
gybson_samara: правда уже новых наделал =)
vrabosh: я тоже сегодня пофиксил баги и вышел в золото..
gybson_samara: теперь вот делаю перебор своей эвристики на 4 хода вперед
vrabosh: по всей доске?
gybson_samara: но так, как коварный баг случился с инпутом, то пойду на пляж
gybson_samara: у меня оценка всех возможных ходов и выбор лучшего
vrabosh: у меня адекватно пока получается сделать без глубины
gybson_samara: до золота хватило и один ход просчитать, дальше буду считать несколько ходов вперед и выбирать лучшую последовательность
Uljahn: gybson_samara: зачем ты инпут измеряешь?
vrabosh: т.е просчитываю себя и потом все ходы противника.. и все
gybson_samara: Uljahn а что мне измерять, если у меня на инпутах таймацт?
vrabosh: там с инпутом как я понял баг из за таймаутов.. он как бы проходит но не доконца
gybson_samara: Uljahn до него я тоже все измерил
gybson_samara: Standard Error Stream: http://chat.codingame.com/pastebin/31ad33bd-3dba-4824-8e71-dcd69f09b12a
vrabosh: т.е. это у тебя тормазин скорей всего какойто скрит..
vrabosh: у тебя пишет длиную ошибку?
gybson_samara: Uljahn это уже на 1000 умножено
gybson_samara: vrabosh не пишет он мне длинную ошибку
Uljahn: во время первого инпута у тебя программа останавливается и ждёт ответ от рефери
Uljahn: это время не учитывается
gybson_samara: http://chat.codingame.com/pastebin/8501624a-f832-4b26-bce7-3f54612099fe
gybson_samara: вот до последней строчки не доходит
vrabosh: а ты проверь когда первый интупт идет от opponent_row, opponent_co
vrabosh: до этого возможно противник ходит
gybson_samara: это самый первый ход в игре
gybson_samara: мой ход
vrabosh: на разных противниках такая ошибка?
vrabosh: да и вообще по таймауту ты проигрываешь?
gybson_samara: ну если первый ход в игре заканчивается таймаутом, то наверное не выигрыываю, а то уже в леге был бы
gybson_samara: после первого инпута
gybson_samara: http://chat.codingame.com/pastebin/42e69f56-264a-4fc1-bb6e-53773ae208dd
gybson_samara: все считал и упал =)
vrabosh: попробуй на чистом коде.. посмотреть
gybson_samara: да даже на прошлой версии работает
vrabosh: может питон во время инпутов решил мусор чистить?)
vrabosh: у тебя много до этого просчетов идет?
gybson_samara: ни одного
Uljahn: что за единицы измерения? нельзя просто мс выводить?
gybson_samara: Uljahn скажи как
Uljahn: я вместо datetime использую timeit.default_timer
gybson_samara: интересный тут кейс, короче
vrabosh: щаз как возьмусь на просчет минимакс на поле 81, опять неделю за компом просижу)
Uljahn: как правило, все интересные кейсы сводятся к непониманию каких-то основ
gybson_samara: Uljahn смотри, вот так работает без ТА, но неправильно
gybson_samara: http://chat.codingame.com/pastebin/8900b586-c4a4-448f-a8eb-c78a8142fd63
gybson_samara: в последней строке меняем передачу параметра
Uljahn: valid_action_count откуда берётся?
gybson_samara: это из инпутов
gybson_samara: там все станлдартно
Uljahn: что за cc.make_sim?
gybson_samara: вот так не работает
gybson_samara: http://chat.codingame.com/pastebin/9c491894-0768-43c4-9a42-869c7df39b60
gybson_samara: Uljahn это ход возвращает
gybson_samara: но если туда передавать заполненный список, то он не вызывается
Uljahn: :rolling_eyes:
gybson_samara: а если пустой, то вызывается, просто ход неверный выдает
gybson_samara: первый кусок кода - работает, второй - таймаут
gybson_samara: притом внезапно, тут давно ничего не менялось уже
Uljahn: так может он со списком нормально работает, но не успевает просто?
gybson_samara: или или или это баг с выводом в стдерр
vrabosh: а много стдерр выводит?
gybson_samara: при входе в эту процедуру сообщение выводится
Uljahn: у меня всё работает, и в дебаг много выводит
gybson_samara: http://chat.codingame.com/pastebin/e0495c06-4185-489f-bafd-5f79c4599d70
gybson_samara: вывод в дебаг не отрабатывает
gybson_samara: а так отрабатывает
gybson_samara: http://chat.codingame.com/pastebin/53637d66-e9f8-4e6e-8f67-6a9516a455bc
Uljahn: а что за DEBUG?
gybson_samara: def DEBUG(msg, params = None): http://chat.codingame.com/pastebin/755b24be-9cc9-4755-9e7f-f4824bac9cc2
Uljahn: у тебя там есть flush=True?
Uljahn: добавь в принт
gybson_samara: Uljahn а подробнее?
Uljahn: когда таймаут или ошибка происходит, твой дебаг игнорируется и не выводится, если flush не сделать
vrabosh: map(str, None) - у меня выдает ошибку
Uljahn: :joy:
vrabosh: упс не заметил условие)
gybson_samara: Uljahn не помогло :thinking:
Uljahn: http://chat.codingame.com/pastebin/56196cdb-35b3-4d84-bde3-e2ec9ec88094
Uljahn: тоже не помогает?
Uljahn: тогда хз
tutubalin: можно ж проще
tutubalin: def DEBUG(*params):
if RELEASE == 1:return print(*params, file=sys.stderr, flush=True)
tutubalin: ещё проще def DEBUG(*params):
if RELEASE != 1: print(*params, file=sys.stderr, flush=True)
tutubalin: а чтоб уменьшить оверхед в релизе, можно и так:
tutubalin: if RELEASE:
def DEBUG(*params):print(*params, file=sys.stderr, flush=True)
else:
def DEBUG(*params):pass
YurkovAS: tutubalin у тебя есть солвер в крестиках? Сделал как понял, но мне кажется, что солвер должен как-то нестандартно менять score, visits у нод и у родительских нод.
tutubalin: YurkovAS если я правильно понимаю, что такое солвер, то есть
tutubalin: я просто убираю заведомо проигрышные ходы. а заведомо выигрышные оставляю единственными потомками
tutubalin: статистику никак не корректирую пока при этом. возможно надо
YurkovAS: а ничью?
tutubalin: ничью просто оставляю, потому что не понятно, что с ней делать
tutubalin: по идее, если все остальные заведомо проигрышные, то ничья останется единственным вариантом
tutubalin: если найдётся заведомо выигрышный, он уберёт вариант с ничьей
tutubalin: но если, скажем, будет две ничьи, они обе так и будут висеть и каждый раз перепроверяться
YurkovAS: но тогда у родительской ноды не проставишь информацию = ничья. типа ее не решишь.
tutubalin: угу. это недочёт )
YurkovAS: а ты же помечаешь такие "решенные ноды"?
tutubalin: пока что нет. когда буду дерево реюзать, надо будет помечать
YurkovAS: и останавливаешь на selection-е первой такой
tutubalin: пока что там много косяков ещё
YurkovAS: ох, ладно, не просто с этим солвером. самое не понятное, стоил ли экспериментировать, т.к. проверяю разные варианты, это можно и неделю делать безрезультатно...
tutubalin: ну база-то простая
tutubalin: только с ничьёй проблема
tutubalin: гарантированно проигрышный ход - удалить. гарантированно выигрышный ход - удалить всё, кроме него.
tutubalin: если детей не осталось - это проигрышный ход
tutubalin: точнее, это проигрышный нод. а ход, который в него ведёт - выигрышный
vrabosh: я как понял, алгоритмы минимакс всеволишь 25лет?
Uljahn: более шестидесяти
vrabosh: перепутал..
vrabosh: https://en.wikipedia.org/wiki/MTD-f - а это что за алгоритм тогда?
wlesavo: там же написано Memory-enhanced Test Driver with node n and value f
wlesavo: вариация минимакса просто
Uljahn: альфа-бета с нулевым окном, даёт больше отсечений, но меньше инфы
Uljahn: почти как NegaScout
gybson_samara: Uljahn в итоге, да, помогло, теперь я знаю где таймаут
TTeaLL: я в коде роял играю, и сейчас в деревянной лиге на пути к бронзе, написал простенький алгоритм, чтобы он строил 2 барака и строил из них юнитов
TTeaLL: но я заметил, что в некоторых играх, он отдаёт команду строить, но не строит барак, но при этом добавляет в список номер барака как будто он его построил, причём в игре анимация строительства идёт
TTeaLL: я много думал над этим, возможно ли такое, что он не строит потому что анимация слишком долго идёт, он добавляет его в список, но не успевает построить и идёт дальше делать дела
TTeaLL: и ещё забавный момент, он иногда, отдаёт команду на построение, и при этом строит одно и тоже здание на одном месте, 2 раза, но при этом записывает их как 2 разных здания, с одинаковым номером, и такое происходит раз в 6-7 игр
TTeaLL: может это как-то связанно быть с анимацией в игре, типо она слишком долгая и пока он проходит, он успевает 2 хода сделать вместо одного
tomatoes: с анимацией вряд ли связано, она уже потом поверх накладывается
TTeaLL: странно, просто он командует построить, идёт анимация строительства, и типо не проходит, и такое происходит редко но происходит, и это какой-то прекол
TTeaLL: а с тем, что он забивает в список 2 одинаковых номера вообще какая-то лажа, ну потому что это против логики, то есть он как бы 2 раза успевает построить одно здания и 2 раза это записать, очень странно, хотя конечно я мог накосячить
Uljahn: проверь, нет ли лишних аутпутов
Uljahn: может тупо рассинхронизация
Uljahn: ну и правила перечитай, многие вещи надо с лупой выискивать
Uljahn: и реплей покажи