Chat:Ru/2021-05-18
CaptainGreen: Тут кто-нибудь cg-brutaltester запускал под виндой?
ilt: я запускал
CaptainGreen: работало?
ilt: да
CaptainGreen: там можно таймауты отключить?
ilt: настройками нет
ilt: если в код полезешь можно
CaptainGreen: да там тоже затейливо
ilt: программирование вообще затейливая штука
CaptainGreen: хе-хе
CaptainGreen: там излишне затейливо...
Uljahn: таймауты? это таймлимиты что ли?
CaptainGreen: угу
CaptainGreen: но дело видимо не в них
Uljahn: контест открыли в мульти
BorisZ: вот я тот подумал, если отбросить всю шелуху, то нам в этой игре надо как можно быстрее вырастить и срубить 10 трешек
miklla: моя динамика мне постоянно показывала, что надо развиваться, изредка вырубаю около середины игры деревья, а примерно на 16-17ом ходу срубить все или все, кроме одного, а дальше вырабатывать энергию
miklla: что это следствие механики нутриентов
BorisZ: да, я неправильно шелуху отбросил ) - если мы максимально быстро закончим вырубку 10й трешки - это не означает что получим максимум очков
BorisZ: так было бы оптимально ничего не рубить пока не наберем 10 штук а потом вырубать сразу все - по очкам это будет плохо
miklla: ой, не 16-17, а 19-20
BorisZ: это я начал думать мысль что тут 2 параллельные цели, одна на максимизацию солнца, другая на максимизацию скора вырубки
miklla: если кому интересно, то вот что предлагает делать моя динамика до старта игры
miklla: http://chat.codingame.com/pastebin/bc367965-aa64-49db-9c92-19c391fdc476
miklla: первые 4 числа - t[0] - .. - t[3]
miklla: e - энергия
miklla: n - нутриенты
miklla: это с третьего дня вроде
BorisZ: почему нутриенты убывают быстрее чем деревья рубятся?
miklla: * - сруб
miklla: потому что это против срубов противника
BorisZ: а откуда они берутся?
miklla: я до этого запускаю противника против себя-куклы
miklla: получается BorisZ не читал мою ПМ :)
miklla: https://www.codingame.com/forum/t/spring-challenge-2021-feedbacks-strategies/190849/14
BorisZ: я пока вобще не читал пмы - подумать хочется еще
miklla: ну, больше ни у кого нет такого алгоритма, как у меня, так что она не подскажет с остальными
miklla: эвристики в ней не расписаны если что
BorisZ: да я подозреваю по твоим репликам по ходу контеста что у тебя свой уникальный подход )
miklla: я правда вспомнил, что скинутая мной табличка является текущей, но ограниченной, идеальная набирает на 2 очка больше за игру, в ней t[1] достигает 4, а t[2] достигает 5, t[3] достигает 3
miklla: довольно удивительно максимальное число 3-деревьев с этой точки зрения
miklla: но это непрактично
miklla: такое малое число 3-деревьев плохо для реальной игры с настоящими тенями
YurkovAS: может еще и от карты зависит? это для пустой (без камней) статистика?
miklla: моя динамика не учитывает карту
BorisZ: это видимо без теней
YurkovAS: последний сруб на 13-м дне
BorisZ: сферические деревья в ваккууме )
miklla: если что, таблица снизу вверх
miklla: верхняя строка - 23ий день
miklla: shadows mechanic simplified to energy gain = e - e / C, where e = t[1] + 2 * t[2] + 3 * t[3] - maximal energy gain, t[] - numbers of trees of given size, C - const
BorisZ: ну а что делать если ты отстаешь от графика?
miklla: на каждом ходу я полностью решаю актуальную динамику, данные предудщих ходов не используются
miklla: но в целом да, сферические ваккумные деревья
BorisZ: а про минимакс для вырубки не думал?
miklla: некоторые его использовали, но я-то знаю, что в играх с одновременными ходами это плохая идея
BorisZ: вроде логично было бы, если известно заранее когда деревья будут подрастать к трешкам
YurkovAS: причем у многих же мктс хорошо работал - т.е. ходы будут как в минике, последовательные
BorisZ: я просто думал что тут два разных алгоритма должны быть
BorisZ: один хочет больше солнца и трешек, другой последовательность вырубки ищет
YurkovAS: да какие минимаксы, надо же нейронку пилить :)
miklla: у меня вначале была надежда, что я буду динамикой вычислять матожидание на глубине, а на глубине 1 научно считать вероятности нормальных игр, но динамика оказалась слишком трудоёмкой, долго работает
miklla: с точки зрения науки, сделать ход - решить нормальную игру в матрицей матожиданий последующей идеальной игры
miklla: которую как раз обычно примерно вычисляют
miklla: но это игра сложнова-та для применения вероятностных стратегий
YurkovAS: а твой алгоритм стремился к состоянию, которое ты до этого скидывал?
YurkovAS: а с противником что делал? просто минимакс опять какой-то вырисовывается, как по мне...
YurkovAS: только оценочная = отставание от того идеального состояния
miklla: скорее всего это было ошибкой, но от противника я только использовал его тайминги срубов
miklla: а возможные ходы закрывал эвристиками
YurkovAS: я до сих пор не знаю что такое динамическое программирование. видимо используешь много new :)
miklla: :)
miklla: обычно его используют для решения ограниченных задач, редко в ботах
miklla: например вот её типичное применение https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A4%D0%BB%D0%BE%D0%B9%D0%B4%D0%B0_%E2%80%94_%D0%A3%D0%BE%D1%80%D1%88%D0%B5%D0%BB%D0%BB%D0%B0
YurkovAS: о, это про числа Фибоначчи, это понимаю. а вот как ты для бота такое использовал - не понятно.
miklla: (поиск кратчайших путей в графе между всеми парами вершин сразу)
miklla: обычно получается многомерный массив, которых последовательно заполняется по неким рекурсивным формулам
miklla: точнее рекуррентым
YurkovAS: эх, не понятно. ну может быть когда-нибудь разберусь. пока для себя выбрал по ПМ-ам сделать: мктс, бимсерч и duct. пытался в последние дни улучшить минимакс и мктс: оба слабые, 90% сливают бимсерчу и золотому боссу.
miklla: там у алгоритма на поиски кратчайших расстояний простая идея
miklla: составляется таблица "кратчайший путь из i в j по вершинам, индексы которых не выше k"
miklla: и она заполняется сначала для k = 1, затем для k = 2 и т.д.
miklla: рекуррентным образом
miklla: в итоге k будет равно V, поэтому будут истинные расстояния между вершинами
YurkovAS: спс
Uljahn: думаю, главное в контесте было правильно найти место под посадку, чтобы максимально усложнить жизнь сопернику, а поскольку посадку все обрезали, то и нейронка у рекурса так вырвалась вперёд (у него жёсткой обрезки не было)
Uljahn: "As a result of minimal pruning, I have no idea if my bot violates common knowledge like “do not seed next to your tree” on purpose or by mistake."
Uljahn: нейронка у него иногда проигрывает, когда рано сворачивает игру в погоне за нутриентами, оставляет противнику возможность фармить солнышки
CaptainGreen: может кто подскажет, как побороть cg-brutaltester под виндой? Он работает нормально с агентом на питоне, а если скормить ему агента на c++, то ломается ходов через 5-6. Process explorer покзывает что запускается три бота и один из них падает.
Chibikko: может сам бот падает?
CaptainGreen: нет
Chibikko: в консоли бруталтестера что-то пишется? Например что score=-1
CaptainGreen: угу
CaptainGreen: на 5-й день
CaptainGreen: цикл бота отрабатывает за 10мс в среднем
Chibikko: там как-то реплей можно посмотреть через браузер. В нём видно причину падения. Или в логах в json формате можно найти ошибку которую рефери возвращает.
CaptainGreen: на сервере CG бот работает нормально
Chibikko: сколько потоков запускаешь?
CaptainGreen: у себя я собирал gcc и cl - результат одинаковый
CaptainGreen: 1
CaptainGreen: 1 поток
CaptainGreen: в логе ошибка - таймаут
CaptainGreen: я поставил таймаут 20 сек в тестере - просто стало дольше висеть
CaptainGreen: с двумя потоками пробовал - происходит то же самое
Chibikko: значит бот долго думает или не понимает что от него ответ ждут. У меня win10, всё работает отлично. Скачай последнюю версию рефери, там увеличили таймауты.
CaptainGreen: я уже все скачал и собрал у себя
CaptainGreen: может что-то в защите винды стоит отключить?
Chibikko: и ещё есть таймаут на ход и таймаут на всю игру. Они в разных файлах в исходниках рефери.
Chibikko: да нет вроде, не надо ничего отключать.
CaptainGreen: при этом всем, в легу этот бот как-то просочился. Видимо, проблема в локальных запусках.
Chibikko: этот параметр указал? -Dleague.level=3
CaptainGreen: нет, но агенту на питоне это не повредило
CaptainGreen: там вроде и так 3 - дефолт
Chibikko: у меня без этого не работало
Chibikko: в первом раунде как-раз 6 дней, вот может и падает на 5-ом
Chibikko: *в деревянной лиге
Chibikko: java -jar cg-brutaltester.jar -r "java -jar -Dleague.level=3 referee.jar" -p1 ".\Agents\last\OneFile.exe" -p2 ".\Agents\try9\OneFile.exe" -t 4 -n 50 -l "./logs_brutaltester/"
CaptainGreen: нет - не помогло :-(
CaptainGreen: в общем там AV происходит, на на сервере нет.. не понятна-а-а...
CaptainGreen: +32 места
Uljahn: у меня +200 в середине голды, добавил условие не рубить раньше 12-го дня
TTeaLL: подскажите, бинарный поиск в матрице хоть чем то отличается от поиска в обычном списке?
TheCrucial: ну тем что у тебя не 2 границы а 4 разве что
TTeaLL: так, вот и теперь что с этим делать, или это просто частный случай
TheCrucial: бетмена решаешь?
Beard: :D
Beard: тот же вопрос писал)
TTeaLL: выучил бинарный поиск и пытаюсь его прикрутить
Beard: ну, в итоге получится, прикручивайте)
TheCrucial: простой бинарный поиск хоть раз писал?
aropan: TTeaLL: а напомни что там за условие?
TTeaLL: есть бетмен, который ползает по зданию, надо найти бомбу, на входе дают где находится бетмен, сколько есть прыжков для перемещения и размер здания(матрицы) из постоянных входных данных, направление где находится бомба
aropan: А направление по двум координатам?
TTeaLL: да, в начале дают х начальный и у начальный