Chat:Ru/2021-05-13

From CG community
Revision as of 11:39, 15 June 2021 by Chat Log (talk | contribs) (Created page with "<img src=/a/63761944879922> Sbergeif: поделитесь, пожалуйста, еще раз C/C++ прагмами, потерял куда сохранил <img src=/a/8...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Sbergeif: поделитесь, пожалуйста, еще раз C/C++ прагмами, потерял куда сохранил

miklla: #pragma GCC optimize("-O3,inline,omit-frame-pointer,unroll-loops")

Sbergeif: спасибо!

mykeich: Правила с серебра не меняются?

Hoggins: не меняются

TheHexter: Удивительное дело. Ворвался в серебро на 1700/2000 место имея просто посадку/рост/сбор в более богатых клетках в порядке, в котором выдаёт input в possibleActions.

TheHexter: Добавил условие: не сажать у соседних с моими деревьями. Получил 170 место в серебре

TheHexter: Добавил условие: не растить мои деревья, если на следующий ход они будут затенены

TheHexter: Упал на 500

TheHexter: Упал на 500 место

Uljahn: почему не растить-то?

TheHexter: Ну, типа, зачем тратить санпойнты на завтра-затенённые деревья, если можно вырастить те, что не будут затенены.

Uljahn: более высокие деревья дают более сильную тень и могут мешать расти сопернику

TheHexter: Всё верно, если завтра дерево будет выше дерева, создающего тень, то его растим.

Uljahn: ход конём захардкодил уже?

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

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

TheHexter: О блин, то есть можно сажать не по прямой?) Я как-то это упустил из виду

Uljahn: по прямой - это как раз не очень оптимально

Uljahn: изи голд

TheHexter: У меня только в исключительных ситуациях сажает не по прямой. Посмотрим.

Vitaliy_Kamalin: Ммм, ранк 1 и не перекидывает в следующую лигу, не такое утро я себе представлял

Uljahn: выше боссса? игры все сыгрались из сабмита?

Uljahn: может, на CG сломалось что-то, во франции сегодня праздник, разрабы могли забить

CyberEcho: У меня вот почему-то рейтинг застрял на 10 уровне и XP больше не изменяется :thinking: Похоже багов в платформе много.

Uljahn: в дискорде есть канал для баг-репортов, или на форуме можно подходящую тему поискать

Uljahn: русский чат разрабы почти не читают

wlesavo: а у меня бимсерч так и не запустился вчера, все какие-то баги вылезают

miklla: я всё пытаюсь глубину 2 запустить, вроде накодил, но пока тоже баги :)

CyberEcho: А мне удалось реализовать beam search. Но он хорошо играет только первые 8 дней, а далее идет в разнос :slight_smile:

Hoggins: мой бимсерч добрался до топ 300. Хз что с ним теперь делать дальше...

miklla: блин, на КГ моя прога выдаёт неправильный ответ, а локально при тех же входных данных та же прога - правильный - приехали

Hoggins: wlesavo внезапно дубликатов всего ~3% если хэш брать только от доски. Не нашел каких то статей по поводу прям серьезной войны с ними

Hoggins: Игра, конечно, очень не симметричная. Два идентичных бота без рандома на сидах от 1 до 100 играют: 55 побед у красного 45 у синего. На арене сиды совершенно случайные, или что то исключено?

wlesavo: Hoggins хм, интересно и правда, надеюсь сегодня как-то хотябы заиграет и посмотрю че у меня

Hamibar: Hoggins я бы попробовал оценку улучшить.

Hoggins: Тычу и чем больше тычу, тем яснее в памяти звучит чья та фраза, что крутить цифры гиблое дело :) Да, думаю над потенциальными фичами для оценки, спасибо

wlesavo: так ты не цифры крути а новые параметры в оценку добавляй

Hamibar: Обычно первая цифры - самые правильные)

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

miklla: да, тоже об этом подумал

wlesavo: чето ничего не пойму, у нас дается 100мс в сумме на день и можно их тратить как хочешь или екак?

miklla: не, на каждый ход по 100мс

YurkovAS: в бим серче можно оценивать не только сами состояния, но и действия. типа: complete=50, grow=40, seed=30, wait=20 + добавить доп. параметров и заиграет нормально

wlesavo: блин, значит у меня крашится чето

wlesavo: плюсы в иде отлаживать конечно такое себе удовольствие

mabu: А в чём надо отлаживать?

wlesavo: ну я имею ввиду сайтовую иде

mabu: Я отлаживаю в gdb.

YurkovAS: wlesavo выведи в cerr входные данные, подсунь их в cin и запусти локально

miklla: я сериализирую и отлаживаю локально

wlesavo: да я на работе просто)

wlesavo: так урывками чето дотягиваюсь поделать

YurkovAS: http://chat.codingame.com/pastebin/c60cbe6b-f30b-4f8c-b7ee-b1a052aa2487

YurkovAS: эх

wlesavo: прикольно

wlesavo: я обычно просто первый инпут копирую из дебага и все

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

BorisZ: забавно что все дебажат бимсерч, может все его из одного и того же места брали? )

BorisZ: я взял псевдокод из посмортема агада

BorisZ: одну ошибку я там уже нашел, но видимо есть еще - не работает

mykeich: скинь ссылку пожалуйста:)

BorisZ: https://github.com/Agade09/Agade-Fall2020-Challenge-Postmortem

YurkovAS: похоже он не чистит массив в который новые стейты потом добавляет

BorisZ: хм

BorisZ: да, после свапа надо обнулять текущий вектор то

BorisZ: YurkovAS глаз-алмаз :sunglasses:

BorisZ: теперь крашится совсем в другом месте, дважемся вперед )

BorisZ: *движемся

YurkovAS: может у тебя таймится?

BorisZ: сейчас виснет где-то, уходит в бесконечный цикл скорее всего, сейчас буду искать

mabu: десу

Uljahn: Automaton2000: ок бумер

Automaton2000: я бы так не сказал

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

Hamibar: В beam search у нас ширина луча неизменна? То есть на каждой глубине отбираем строго интересующее нас количество узлов? или с ростом глубины растет число хороших ходов?

Uljahn: ага, с переменной шириной луча - это чокудай вроде

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

Hamibar: Ага, понял. Спасибо

wlesavo: ниче не пойму, бот постоянно хочет ждать, уже спустился до MC и все равно

735487: не используй эту команду

735487: или штрафуй

BorisZ: wlesavo у меня была ошибка при конце игры - он не останавливался

BorisZ: надо было выходить если потомков нет, а он дальше фигачил )

wlesavo: блин, только написал и нашел ошибку кажется, в MC по крайней мере, не там счетчик дня увеличивал

CyberEcho: Кто как сравнивает позиции с разным числом деревьев? Например, из одной позиции в первом случае сделали 3 действия SEED, а во втором 2 GROW. Как сравнить эти позиции, какая лучше?

BorisZ: какой-то вес должен быть у деревьев

BorisZ: у высоких поболье, у низких поменьше, сам пока думаю над оценкой только

BookSaver: Не делайте 3 seed, смысла нет.

BookSaver: Чтобы дерево вырастить, надо 1 SEED и 3 GROW. На 2 Seed надо 6 grow, и у Вас не будет столько солнышек, чтобы все это подрастить за один ход.

ilgiocatore: да, топы сажают всегда только бесплатно

CyberEcho: Ну пусть это будет последовательность SEED GROW SEED GROW SEED в течении 3-х дней. Конкретная последовательность действий не имеет значения. Важно что при переборе образуются позиции с разным числом деревьев. И непонятно как их напрямую сравнивать, а для beam-search это важно.

BorisZ: чем проще оценка - тем шире должен быть луч, и наоборот

BorisZ: это я не в ответ - так, пришла в голову мысль, которая показалась умной )

Uljahn: сравнивать по количеству полученных солнышек можно

Uljahn: с учётом своих теней и теней противника при условии, что он делает wait всегда

BookSaver: "Какая от коровы польза? Корова молоко дает, или там телят, а от дерева какая польза? Оно солнышки дает, или там очки, если его срубить.

Uljahn: при рубке надо ещё нутриенты учитывать и плодородность, сложна

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

wlesavo: как марчете писал в общаке, надо "просто" хорошую оценочную

aangairbender: оказывается все здесь общаются, а не в телеге

aangairbender: мне кстати очень не нравится мой beam search, но кроме него хз что писать

aangairbender: смотрел игры топ1 dbdr, не заметил ничего особенного от него. Почему он так сильно от остальных тогда отстает? У кого-то есть наблюдения/соображения?

YurkovAS: aangairbender chokudai - в телеграмме есть 2 ссылки с примерами

aangairbender: так разве chokudai это не тот же бимсёрч?

BorisZ: aangairbender в расте есть nth_element или ты просто сортируешь?

aangairbender: я делаю sort + truncate

YurkovAS: есть еще beam stack search ссылок у меня нет, его рекурс в прошлом контесте успешно использовал (в ПМ-ах читал) и еще один чел. на яве

BorisZ: я пока тоже, самописный чет не заработал

BorisZ: ну не самописный - скопировал из исходников крейта

aangairbender: меня смущает то, что бимсёрч очень похож на жадный алгоритм и получается что очень важно написать хорошую оценочную. Прям слишком важно. Эйлер вообще на 4-5 дней вперед только смотрит и останавливает поиск если посетил 10к состояний. Толщина луча у него 40

BorisZ: внутренний перфекционист негодует (

YurkovAS: BorisZ beam search не заработал? это же бфс, только оставляем топН лучших. скорее всего из-за оценочной

BorisZ: заработал, просто оценочной пока нет, думаю

YurkovAS: попробуй оценивать не состояния и только действия (у меня так) и в других мульти тоже работает

BorisZ: defaultAI обыгрывает )

wlesavo: у меня МК такой кривой что проигрывает моему питоновскому трехстрочнику

Xyze: у меня также было

Xyze: но я какой-то странной оценкой его подлечил

BorisZ: надо подумать, непонятно как к этому подступиться - действия оценивать,

YurkovAS: BorisZ не состояния *А только действия

aangairbender: YurkovAS оценивать не состояния, а действия?

Xyze: теперь пишу брутфорс чтобы отладить оценку локальнео

wlesavo: уже с десЯток параметров в оценке

vrabosh: много людей в золото попало

aangairbender: то есть оценивать действия исходя из текущего состояния?

aangairbender: пока не представляю как это

YurkovAS: ну например: http://chat.codingame.com/pastebin/8a4a091f-bcc4-47f8-8a75-f6b02e6ad8fc

BorisZ: YurkovAS то есть сид а б и сид ц д - одинаково оценивать?

aangairbender: и хранить в нодах сумму действий по пути?

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

aangairbender: BorisZ всегда можно еще условий написать чтоб такие действия по разному оценивались

YurkovAS: в ноде хранишь общий накопительный скор

aangairbender: ну звучит интересно, можно попробовать

YurkovAS: и чем глубже забираешься, тем меньше этот скор будет влиять, т.е. умножаем на коэфф

YurkovAS: state.score += score * 0.9^depth

BorisZ: у меня пока разрыв шаблона, я только про состояние думал

wlesavo: у меня тоже с действиями, но чето как-то все-равно грустно

YurkovAS: я часто так делал и работало, но не топ1 конечно. в бим-серче

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

YurkovAS: самое главное это: state.score += score * 0.9^DAY

YurkovAS: не depth, в day точнее со сменой дня уменьшаем коэфф

aangairbender: мда, я раньше и не думал о таком

aangairbender: хотя все же на этом контесте первый раз beam search пишу...

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

BorisZ: у каждой ноды будет тот же коофициент

aangairbender: логично

YurkovAS: умею писать бим серч, но это не самое главное темболее скоро все будут уметь...

wlesavo: BorisZ смысл в том что если ты сделал полезное действие раньше, то оно принесет больше очков

wlesavo: поколение то одно, но предыстория разная

kda: aangairbender Дак у тебя же вроде MCST, а не Beam ?

BorisZ: да, наверное, гуд потом бед лучше чем бед потом гуд

aangairbender: тоже логично

aangairbender: kda не, у меня beam search с width 30

kda: *MCTS

aangairbender: и оценочной в points + score/3 + еще пара переменных

aangairbender: все вроде просто, но уже 2 дня не могу обыграть ничем

aangairbender: * там sun/3

kda: В общем чате просто увидел - day before this contest started, I writed MCTS for uttt and it went straight to the legend from bronze. No extra tuning/heuristics/teccles

aangairbender: да, то для крестиков ноликов написал (для другой игры)

aangairbender: тут, как я понял, мкст не особо подходит

kda: ааа) не удидел видимо)

kda: вроде же как раз чтобы функцию сильно не придумывать ?

aangairbender: uttt - Ultimate Tic-Tac-Toe, название игры

aangairbender: мктс в базовом виде не подходит для одновременных ходов

kurnevsky: Почему? И что тогда подходит? :)

aangairbender: ну вот я пока знаю только beam search

aangairbender: есть еще smitsimax, но там есть ограничение, чтоб игроки друг другу ходы не могли заблокировать

YurkovAS: в xmas-rush топы успешно юзали smitsimax, там тоже ходы мешали

YurkovAS: можно ПМ-ы к нему почитать, там есть детали

aropan: Думаю здесь может сработать smitsimax. Здесь одно действие только блокирующее, но его можно игнорировать мне кажется - не так часто сажается в одну клетку.

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

aangairbender: имхо вся суть в том, чтоб с соперником почти не конфликта, поэтому хз много ли даст smistimax

aangairbender: важно себя максимально оптимизировать, тогда соперник просто не догонит

YurkovAS: ну либо минимакс попробывать, с противником

YurkovAS: темболее, если есть оценочная на состояниях

aangairbender: имхо minimax-ы и smitsimax-ы плохи тем, что 90% случаев и ты, и соперник будете делать наиболее оптимальный ход даже не учитывая ход оппонента

YurkovAS: в минимаксе же учитывая, как раз

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

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

YurkovAS: а в смитсимаксе можно провника учитывать или забить

aropan: smitsimax же учитывает. Точнее не знаю как там написать, но почему бы не учитывать.

YurkovAS: если писал мктс, то будет не сложно

aropan: То есть когда спускаешь в обоих деревьях как в mcts то считаешь игру как бы для обоих соперников и правильно подсчитываешь солнышки.

aropan: На пересечение по желудям, например, забить. )

aangairbender: наверное я неправильно выразился

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

YurkovAS: в смитсимаксе и в минимаксе 1 ход будет равен одному дню

aangairbender: вот мысль как должна была быть

aangairbender: ну это мне так кажется, а как оно на самом деле я хз

YurkovAS: ну а окажется, что все учитывали ход опонента

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

YurkovAS: вот что тоже надо проверить

kurnevsky: Как-то по описанию smitsimax больше на mcts похож, чем на минимакс.

YurkovAS: да это мктс, у каждого свое дерево

aangairbender: хотя смиткисмак может быть хорош для контроля карты, затенении соперника, а это вполне возможно 80% победы

YurkovAS: и ход скорее всего должен быть равен одному дню: т.е. мульти экшен может быть, а может быть и только wait

aangairbender: мне нравится как играет ashelkov, садит оптимально некоторое количество деревьев и начинает каждый ход срезать дерево size=3 и выращивать новое size=2 -> size=3

YurkovAS: он и в пакманах тоже в топе был на js-е

aangairbender: у него моменты среза имеют четкий период на таймлайне

aropan: Да, я тоже в прошлом году учитывал ход оппонента в чокудай. Ифал всякие штуки на то, может ли противник заблокировать комбинацию, которую я планирую собирать.

aangairbender: он признался в чате, что без поиска, на эвристиках сделал

aropan: Вроде даже как было то, что я запускал меньший чокудай для соперника, чтобы понять, какой у него план.

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

aangairbender: я думал в бисерче каждый день запускать для сопреника поиск с глубиной 1 чтоб узнать его действия на этот день

aangairbender: это должно быть лучше чем просто wait

aangairbender: но тогда смысл в бимсерче отпадает и уже лучше смитсимакс сделать:sweat_smile:

aangairbender: ладно, пошел я спать, 4 ночи уже, а в 10 работа

Hamibar: YurkovAS интересная идея с оценкой ходов, а не состояния. Как раз сейчас бот так работает, но без какого-либо поиска.

Hamibar: Становится гораздо проще оценку подобрать как мне кажется

YurkovAS: мне тоже так проще