Chat:Ru/2020-06-20

From CG community
Jump to navigation Jump to search

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 в итоге, да, помогло, теперь я знаю где таймаут

Default avatar.png TTeaLL: ребят, есть вопрос

Default avatar.png TTeaLL: я в коде роял играю, и сейчас в деревянной лиге на пути к бронзе, написал простенький алгоритм, чтобы он строил 2 барака и строил из них юнитов

Default avatar.png TTeaLL: но я заметил, что в некоторых играх, он отдаёт команду строить, но не строит барак, но при этом добавляет в список номер барака как будто он его построил, причём в игре анимация строительства идёт

Default avatar.png TTeaLL: но самого барака нету

Default avatar.png TTeaLL: я много думал над этим, возможно ли такое, что он не строит потому что анимация слишком долго идёт, он добавляет его в список, но не успевает построить и идёт дальше делать дела

Default avatar.png TTeaLL: и ещё забавный момент, он иногда, отдаёт команду на построение, и при этом строит одно и тоже здание на одном месте, 2 раза, но при этом записывает их как 2 разных здания, с одинаковым номером, и такое происходит раз в 6-7 игр

Default avatar.png TTeaLL: может это как-то связанно быть с анимацией в игре, типо она слишком долгая и пока он проходит, он успевает 2 хода сделать вместо одного

tomatoes: с анимацией вряд ли связано, она уже потом поверх накладывается

Default avatar.png TTeaLL: странно, просто он командует построить, идёт анимация строительства, и типо не проходит, и такое происходит редко но происходит, и это какой-то прекол

Default avatar.png TTeaLL: а с тем, что он забивает в список 2 одинаковых номера вообще какая-то лажа, ну потому что это против логики, то есть он как бы 2 раза успевает построить одно здания и 2 раза это записать, очень странно, хотя конечно я мог накосячить

Uljahn: проверь, нет ли лишних аутпутов

Uljahn: может тупо рассинхронизация

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

Uljahn: и реплей покажи