Chat:Ru/2020-11-23
MadKnight: да можно и тут на инглише
NightLuna: вот с одной стороны хочется в легенду, с другой стороны зачем... все равно футболки и ачивки никакой не будет
MadKnight: просто улучшай бота
NightLuna: сейчас?
MadKnight: кнш
MadKnight: есть ещё идеи?
NightLuna: все мои идеи делают хуже
MadKnight: так надо более сложные условия ставить
MadKnight: как когда ты давала бонус за рецепт к которому идёт противник - нужно более сложное условие, я же говорил
MadKnight: чтобы эта идея заработала
MadKnight: более "умное" условие, когда бонус давать
NightLuna: да я вроде поставила более умное
MadKnight: какое
NightLuna: ой ну не очень умное)) даю бонус только если стоимость больше 15
MadKnight: это совсем простое
MadKnight: надо делать условие - стоит ли идти за этим рецептом? а что если противник не идёт за ним?
NightLuna: нет, ну если стоимость больше 15 и это самый близкий к врагу рецепт, а к нам он еще ближе, то точно надо брать
NightLuna: блин, я проигрываю боссу все игры... это плохо
MadKnight: так а в чём проблема тогда? почему не сработало?
MadKnight: почему хуже было?
NightLuna: а, ну я потом подтюнила и вроде стало норм
NightLuna: я понятия не имею какое это влияние оказывает на мое место в рейтинге
NightLuna: если бы у меня был норм винрейт против босса и я не проиграла ему 4 игры из 5
MadKnight: а покажи реплей
NightLuna: https://www.codingame.com/share-replay/509629977
MadKnight: ну смотри какое он комбо взял
MadKnight: очень удобное
MadKnight: а ты вместо этого взяла -3 t1 +3 t2
NightLuna: провал
MadKnight: [-3,1,1,0] мне кажется вообще фигня
NightLuna: ну я потом 3 0 0 0 добираю
NightLuna: но все равно фигня
MadKnight: ход 18 - о, он купил спелл, чтобы получить 1 синий камень
NightLuna: ну я теоретически тоже так могла
NightLuna: у меня есть это в переборе..
NightLuna: но вообще ты прав, надо учить спелы как-то разумнее
MadKnight: о, а на 32 он заюзал это комбо которое я показал
MadKnight: в общем он как будто планирует сразу несколько потионов
NightLuna: да он просто взял комбо, а потом его заюзал, потому что это комбо
MadKnight: не, вообще
MadKnight: он всегда будто сразу несколько планирует
MadKnight: NightLuna а у тебя же оценка есть?
NightLuna: есть
NightLuna: а можно было без нее?
MadKnight: а какая у тебя?
NightLuna: ну price * 2 * coef + invScore
NightLuna: coef с каждым ходом угасает
MadKnight: а промежуточные?
NightLuna: я только баллы за заказы даю
MadKnight: это называется без оценки
MadKnight: запили оценку для промежуточных
NightLuna: и прибавляю скор инвентаря чтобы он не оставлася пустым
NightLuna: ну и еще прибавляю скор инвентаря, который в конце остался...
NightLuna: price * 2 * coef + invScore * 0.2
NightLuna: 0.2 забыла
MadKnight: да это понятно
MadKnight: я про промежуточную оценку
MadKnight: её надо
NightLuna: типа каждую вершину оценить и умножать на коэфициент?
MadKnight: хмм не это не имеет смысла
NightLuna: а как?
MadKnight: скорее
MadKnight: смотреть сколько подходящих камней под potion's
NightLuna: ааа, ты про такую
NightLuna: типа количество зелей, которые можно сварить на текущем ходу?
MadKnight: ненене
MadKnight: типа насколько близко ты к зельям
MadKnight: насколько мало недостающих камней
NightLuna: но надо же тогда еще прайс зелья учитывать
MadKnight: ну да
NightLuna: ой сложная формула получится и по любому еще неправильно работать будет
MadKnight: это всё коэффициенты
MadKnight: зато это big step
MadKnight: big improvement
MadKnight: может в легу закинуть
NightLuna: вот вместо того, чтобы 2 раза победить босса, он 2 раза победил меня, и что в итоге, застряли с ним вместе в золоте...
NightLuna: ну раз биг импрувмент, то надо делать
NightLuna: мне бы повысить винрейт против босса, вот это был бы импрувмент
ilgiocatore: NightLuna я бы на твоем месте просто ковырял тихонечко коэффициенты до посинения, ты же уже почти в леге и так
NightLuna: мне кажется, что мне нужен какой-то качественный толчок
NightLuna: я уже 6 часов почти в леге и не сдвигается...
MadKnight: вот это может быть тот самый качественный толчок
MadKnight: запили промежуточную оценку
NightLuna: ilgiocatore давай в топ золота, нужен человек с хорошим винрейтом против босса)))
ilgiocatore: я активно занимаюсь дерганьем коэффициентом)
ilgiocatore: качественные толчки мне категорически лениво делать уже
NightLuna: ахаах)
NightLuna: блин, расстояние считать в терминах моих спелов чет сложно
MadKnight: босс, возможно, сразу к 2 оценивает расстояние
MadKnight: или ещё чёт замудрённое
MadKnight: а так какой у тебя поиск?
NightLuna: вот допустим я оценю каждую вершину каким-то числом, а дальше их складывать с коэффициентом чтоли?
NightLuna: бфс
MadKnight: не понял
MadKnight: с каким коэффициентом?
NightLuna: у каждой вершины есть какой-то вес, который зависит от расстояния до зелий.
NightLuna: как считать стоимость всей цепочки?
MadKnight: хммм зачем тебе их складывать
MadKnight: это вообще отдельное значение
MadKnight: это типа - потенциал ноды
NightLuna: и что с ним делать?
MadKnight: проходить сначала по нодам с потенциалом
MadKnight: типа nextNodeToExplore = max(nodes)
MadKnight: и ещё делить этот score на глубину ноды
MadKnight: или типа того
MadKnight: или можешь вообще сделать Beam Search - брать только топ 10 нод со всей текущей глубины
NightLuna: расстояние от меня до босса 0.16
NightLuna: 0.18*
MadKnight: собираешься пройти в легу, имея 1/10 побед против босса?)
MadKnight: Beam Search попробуй
MadKnight: просто брать топ N нод вместо всех
NightLuna: у меня одна из пяти
NightLuna: и это у этой версии, у других лучше было
NightLuna: да я поняла, что ты имеешь ввиду, что это как бы оценка для поиска, которая поможет классно отсекать вершины
NightLuna: чет фигово на боссе натренировались, проигрывают все
MadKnight: так ты запили этот поиск
NightLuna: просто что-то я не уверена, что смогу сейчас по быстрому на бимсеч перейти
MadKnight: посмотрим чё будет
MadKnight: почему нет?
MadKnight: там же просто заменить массив всех нод на массивN
NightLuna: разница 0.04
tomatoes: гц
NightLuna: ну я на дне легенды XD
ilgiocatore: ее
tutubalin: NightLuna у меня тоже бфс, но я где-то в середине серебра
tutubalin: в чём секрет?
NightLuna: у меня отсечение есть
NightLuna: и боле мене оптимально все
NightLuna: и еще сделана концовка
tutubalin: а ты когда поиск останавливаешь?
NightLuna: когда время заканчивается
tutubalin: в смысле, что именно ищешь?
NightLuna: ну я каждую цепочку, которая получилась как бы оцениваю и выбираю с максимальной оценкой
NightLuna: ну в смысле каждый лист...
tutubalin: цепочка делает только одно снадобье или все?
tutubalin: я ищу пути до первого снадобья только. в итоге состояний так мало, что отсекать вообще нечего
NightLuna: ну там все возможные
NightLuna: в некоторых несколько зелей делается
NightLuna: до первого и правда мало
NightLuna: аж до 45 каким то чудом дошел
dbf: значит надо немного улучшить до футболки
NightLuna: хахахах)))
NightLuna: уже 59
NightLuna: все таки на дне буду
tutubalin: под конец запилил таки MCTS, то он всего 2к сим успевает сделать
tutubalin: в результате играет сильно хуже чем бфс
BorisZ: может оценка нужна другая или константы подергать
BorisZ: редко же бывает чтоб с первого раза взлетело
Zhmyh: Блин, нейросеть с рандомных весов научилась выигрывать сильных челов, но винрейт все еще очень низкий :tired_face:
tutubalin: блин, запилил такой классный класс для инвентаря, позволяющий проверять, можно ли использовать заклинание, всего за одно сложение и один побитовый AND а толку-то, если всё остальное не работает как надо :(
BorisZ: проектирование снизу вверх )
BorisZ: хотя если сверху вниз а внизу как попало то то оптимизаций руки не доходят обычно (
BorisZ: везде засада
tutubalin: ну я сперва прототип сделал. нашёл слабые места и их поправил
BorisZ: как то питоны прошли в легу, значит наверное не только в производительности дело (
wlesavo: NightLuna грац
YurkovAS: поздравляю
BorisZ: она всю ночь билась насмерь с боссом, теперь наверное спит счастливая )
Uljahn: небось в телеге флудит
mihei: сабмиты действительно сильно тупили или это только мне так показалось?
tomatoes: утром нормально было. под конец и вчера вечером тупило сильно
Egrace: а что, больше нельзя в fall challange играть?
Egrace: в spring можно, а в fall нельзя? О_о
tomatoes: временно нельзя
tomatoes: попозже добавят отдельно
Egrace: а, ок)
Egrace: а то у меня не было достаточно времени в ходе контеста
Egrace: хотел побаловаться еще
C2H5OH: побаловаться можно будет потом, но без футболок, просто на рейтинг.
C2H5OH: а решения победителей публикуют или хотя бы заставляют их описать своё решение?
tomatoes: https://www.codingame.com/forum/t/fall-challenge-2020-feedbacks-strategies/187846
Egrace: а футболка и не нужна
wlesavo: не заставляют, но они сами описывают
tutubalin: C2H5OH на форуме желающие пишут пост-мортемы. разумеется, без кода, только описание идеи, возникшие проблемы и т.д.
C2H5OH: для меня идея "beam search" это не тот уровень, который хотелось бы увидеть. Я попробовал погуглить, я не могу понять что к чему, потому что я этим никогда не занимался раньше.
Uljahn: так займись, вон в 2048 правила простые, и бимсёрч заходит хорошо
Uljahn: даже я осилил его случайно
tutubalin: C2H5OH бимсёрч только звучит как какая-то мегатехнологическая неведомая штуковина. но на самом деле это просто слегка модифицированный BFS или Дейкстра
tutubalin: идея простая: в бфс и дейктстре используется очередь (простая или приоритетная). в некоторых задачах размер очереди начинает расти слишком сильно, порой экспоненциально. а это приводит не только требует много памяти, но и сильно влияет на быстродействие - ведь каждое состояние в очереди нужно обработать, и чем длиннее очередь, тем больше времени нужно
maddenvvs: Всем удачи! Спасибо чату, вы очень вдохновляющие!
tutubalin: так вот, идея бимсёрча: если размер очереди превышает некий предел, просто выбрасываем из неё те состояния, которые кажутся неперспективными. перспективность определяется какой-то эврестической функцией
BorisZ: tutubalin очень хорошо объясняешь, даже я все понимаю )
C2H5OH: Вы рассказываете со средины. Откуда взялась очередь, откуда взялся граф? Я так понимаю, что все, кто попал в голду и в легу, идут по этому пути. А я вообще не понимаю что вы делаете. Поэтому и спрашиваю есть ли где-то описание решений.
tomatoes: :grinning:
BorisZ: давайте я попробую объяснить, все равно работа в голову не идет
C2H5OH: попробуй)
BorisZ: есть состояние игрового мира - в нем все что имеет игрок на данный момент - инвентарь, рецепты бутылок, спеллы изученные и доступные для изучения
BorisZ: количество денег
C2H5OH: есть
BorisZ: у этого класса (состояние) должно быть 2 ключевых метода
C2H5OH: 4
BorisZ: 1) генерит все возможные ходы из этого состояния - сварить бутылку, выучить спел, отдохнуть
C2H5OH: сварить бутылку, выучить спелл, сварить спелл, отдохнуть
BorisZ: 2) из текущего состояния и валидного хода производит новое состояние - потомка
BorisZ: из начального состояния можно сгенерить допустим 10 потомков - это первое поколение
C2H5OH: пока понятно
BorisZ: дальше для каждого потомка повторяем процесс - генерим валидные ходы, рожаем новое поколение
BorisZ: количество ходом может быть разным, но упрости что их тоже всегда 10
BorisZ: тогда на 4 итерации будет уже 10**4 == 10к потомков
BorisZ: это всего навсего глубина 4
BorisZ: это полный перебор или бфс
BorisZ: он быстро упрется в лимит
C2H5OH: да, понятно
BorisZ: вот теперь идея бимсерча простая - давайте каждого потомка как-то оценивать, и оставлять в каждом поколении только допустим по 300 лучших, остальные похерить
BorisZ: тогда 300 это будет ширина луча
BorisZ: то есть генерим из тих 300 в нашем случае 3000 потомков, их всех оцениваем и оставляем опять 300 лучших
C2H5OH: не из каждых 10 оставлять 3, а всего общую ширину 300?
BorisZ: так мы продвинемся намного глубже
BorisZ: нет, именно оставлять 300 лучших из всех 3000 каждый раз
C2H5OH: пока что ты описывал метод ветвей и границ. с этим всё понятно. но если ты нагенерировал 295 потомкув, то как ты выбираешь какие 5 лишние, при генерации следующей пачки?
BorisZ: если 295 то никаких лишних нет, все хорошо, это меньше чем ширина луча
BorisZ: всех оставляем
C2H5OH: у тебя уже 295, а ты хочешь добавить пачку 10
BorisZ: допустим мы имеем 295 состояний на одной глубине
BorisZ: из каждого генерим по 10 потомков - их мы сохраняем в отдельном массиве - будет 2950 состояний
BorisZ: потом из 2950 выкинем все кроме 300 лучших
BorisZ: и переходим к следующему поколению
BorisZ: добавляем не туда же , для каждого поколения отдельное хранилище грубо говоря, не смешиваем конечно их
C2H5OH: а оценка потомка эмпирическая?
BorisZ: да, надо подбирать, это может быть сложно
wlesavo: да, некоторая разумная функция, с расчетом на то что она не должна застревать в локальных максимумах и давать в целом хороший результат
BorisZ: с ведьмами примерно понятно что там должно быть - как минимум количество денег текущее + камни в инвентаре
wlesavo: ну и дубликаты очень важно учитывать
C2H5OH: ну, откроют ведьм на постоянно, надо будет попробовать.
wlesavo: я награждал еще за изучение спела немного, чтобы в пуле оставались состояния с изучением тоже
C2H5OH: так главный вопрос: вы оценивали общее состояние или выбирали какую-то одну из бутылочек и старались её сварить?
wlesavo: общее состояние конечно
BorisZ: если выбираь одну бутылку то после сдачи остаешься с пустым инвентарем - хреново
C2H5OH: у меня были версии с общим сотоянием, надо было в эту сторону копать...
mihei: а что плохого в пустом инвентаре? зато сварится раньше
wlesavo: mihei \долго разгоняться заново
C2H5OH: общее состояние достигается за меньшее число ходов
wlesavo: так можно за 5-6 ходов 3 зелья сдать
mihei: не все ли равно долго разгоняться после варки, или долго собирать ингредиенты перед ней
mihei: в среднем будет одно и то же
wlesavo: в том то и дело что с ингридиентами ты можешь эффективно юзать заклинания
mihei: а вот это кстати да
wlesavo: за одно заклинание сожно взять ингридиентов на два зелья если есть правильный набор
BorisZ: если стартуешь с пустым инвентарем, то можно катануть только 2-3 спелла, которые на входе ничего не требуют
BorisZ: если с частично наполненым то намного больше вариантов - быстрее следующую собрать
mihei: и в результате бимсерча что получится? берем текущее наилучшее состояние и выполняем самое первое действие из его цепочки?
C2H5OH: а как вы тогда учитывали ходы противника? если ты понимаешь что вот эту бутылочку он сварит быстрее тебя?
mihei: ну видимо, если не целиться в бутылки а обсчитывать общее состояние, то пропажа заказа становится не такой большой проблемой
BorisZ: mihei да, из последнего поколение берем лучшего, и кастуем спел его самого первого родителя
BorisZ: C2H5OH тут большинство не сильно учитывало - некоторые на 1 ход только
mihei: и какая глубина поиска у вас получалась?
tutubalin: я всю цепочку не храню - только первый шаг
tutubalin: потом от родителя потомку передаётся как семейная реликвия
wlesavo: эээх юркова вытеснили из футболок вместе с эйлером
mihei: короче, в какой контест не плюнь, все делают поиск/перебор/га/сим *ворчит по эвристически*
BorisZ: не - последние несколько были вполне себе эвристические
BorisZ: легко определить по количеству питонов в леге)
AVFr: по моему pb поддается :grinning:
BorisZ: там плотность у них около 20 места - не понятно еще кто кого
C2H5OH: да, до какой глубины у вас поиск получался? до какого уровня потомков?
wlesavo: в районе 15 вначале, дальше чуть больше ширина чуть меньше глубина
C2H5OH: а после первой бутылочки вы всё равно пытались все 6 сварить? или как-то отсекали часть бутылок?
BorisZ: это должно учитываться - стейт после варки уже не содержит этот brew
BorisZ: то есть симуляция хода должна быть корректной - как в рефери, только мы следующий рецепт не заем
C2H5OH: я так понимаю, что каждый ход всё рассчитывается занов.
C2H5OH: если у тебя сварено 3 бутылочки, то тебе ж нет смысла варить ещё 5
BorisZ: в случае бимсерча точно надо каждый ход заново, ы же не храним промежуточные поколения
BorisZ: если было бы дерево то можно переиспользовать иногда
NightLuna: а где обычно лежат пастмортемы ко всем контестам? я что-то найти не могу...
tomatoes: тема на форуме
Uljahn: https://www.codingame.com/forum/t/fall-challenge-2020-feedbacks-strategies/187846
Zero0: не можете напомнить, давали ссылку на лог архива чата, хочу почитать, я то ли забыл добавит в закладки, то ли удалил, не найду и гуглом, что-то сразу не гуглится?
Uljahn: https://cg.spdns.eu/wiki/Special:PrefixIndex?prefix=Ru%2F&namespace=3000
NightLuna: а если за прошлые хочешь?
NightLuna: блин, уменя все время одна фигня с чатом кг, спрошу что-то, уйду и забуду вообще ответ посмотреть =(
Uljahn: за прошлые в прошлых темах, по форуму поиск хорошо работает
Uljahn: фильтруешь по Feedback&Strategies
NightLuna: спасибо!
735487: на прошлые зачастую прямо в мульти ссылка есть
wlesavo: оооо бластер со смитсимаксом, по методичке меда видать делал :smiley:
Hamibar: Получается чатик по итогу остался без футболки(
Uljahn: aropan же получил
Uljahn: поздравляем
Hamibar: ага. Точно. Я уж хотел сделать вывод, что нужно кодить а не в чатике сидеть :grinning:
Uljahn: ну, он не особо прям сидел, но иногда заглядывал
wlesavo: да ладно, я не очень даже на легенду надеялся
Uljahn: да ты монстр, как мед в молодости)
wlesavo: ух ща мож даже на этом въеду в топ100
wlesavo: прикольно что у меня ниже 39% винрейта против всех кто выше оказался нет http://cgstats.magusgeek.com/app/fall-challenge-2020/wlesavo
Zhmyh: А следующий контест только в мае? :open_mouth:
Uljahn: возможно будет неофициальный в промежутке
Uljahn: эйлер подал уже заявку
NightLuna: оо
NightLuna: круто
NightLuna: а вы в этом чатике прям на сайте сидите?
Zhmyh: я да
Uljahn: с внешнего клиента пробовал - не очень понравилось
Uljahn: в браузере и дискорд, и чатик, и форум сразу
Uljahn: на форуме прикольные постмортемы, в дискорде рекурс про перформанс вещает, теперь чатик ожил, в телеге нафлудили опять... Automaton2000, доколе?
Automaton2000: потому что у меня есть
NightLuna: как много всего
Uljahn: кстати, в общаке народ интересуется, какие спеки в РАИКе, какие процы, есть ли мультитрединг
NightLuna: это лучше в чатике раика спрашивать или мб у них на сайте есть
Uljahn: Nerchio уже заинтересовался :smiley:
NightLuna: эйлер в дискорде писал про раик
NightLuna: интересно сколько иностранцев участвуют
Uljahn: прикольно, как у нас в телеге говорят, что CG слишком просто (терисы с перебором), вот РАИК - другое дело, а в общаке тут рекурс пишет про РАИК - переусложнение дизайна и каша из правил ))
Uljahn: *тетрисы
735487: по моему опыту в раике нужны немного другие виды поиска. например в футболе у меня была глубина что то типа не больше 16 тиков. а там надо было на 100+ вперед заглядывать
735487: правила да большие. много текста. но на самом деле не намного больше чем на CG
NightLuna: Unjahn да)))) тоже об этом подумала
NightLuna: но в телеге еще, насколько я поняла, чат образовался как раз из чата раика, там просто такое мнение популярно
Uljahn: я так и понял
tomatoes: и те, и другие в принципе правы :thinking:
NightLuna: дело вкуса
NightLuna: я не пробовала раик, посмотрим
Uljahn: завтра анонс на хабре должен выйти, вроде
NightLuna: вроде да
C2H5OH: так fall-challenge-2020 уже запустили на постоянно?
YurkovAS: да
BorisZ: я согласен с рекурсом что тут лаконичнее и продуманнее правила, дизайн приятнее для случайно зашедшего, ниже порог входа крорче
BorisZ: вот нет статистики по количеству участников райка - уменьшается там оно или увеличивается?
BorisZ: но конечно каждый кулик свое болото хвалит
NightLuna: про болото верно подмечено, конечно XD
NightLuna: порог входа это да, в раике постоянно надо что-то делать, чтобы что-то заработало, какие-то трудности... а тут зашел, вот тебе правила, вот визуализация, справа код
NightLuna: идеально
BorisZ: а еще там сабмит сутки идет пока скор устаканится
NightLuna: уууу
NightLuna: мне сегодня утром сабмиты понравились, 15 минут
NightLuna: ляпота
BorisZ: ага, никаких тулзов не надо - сабмитнуть быстрее чем гонять бенчмарки всякие
NightLuna: вот за это я люблю кг
BorisZ: надо пройти в легу как-то, закрыть гешальт, и желательно без переписывания с нуля
NightLuna: посмотрим, что там такого раик предлагает, что я от кг отрекусь)))
BorisZ: я придумал что у меня рест + каст это одно действие, теперь ношусь с этим как с писаной торбой (
NightLuna: куда же советов везде есть, изи перейти
NightLuna: а переделать?
BorisZ: много переписывать и плюс жалку убивать детей своего разума
BorisZ: *жалко
BorisZ: свои велосипеды всегда самые красивые
NightLuna: ахахах) ну лучше уж расстаться, чем страдать
BorisZ: я понимаю что бимсерч + разумный скор + какой-то прунинг это надежный путь
NightLuna: ну бфс тоже хватит
NightLuna: если просто пройти и сидеть на послденем месте, то бфс + изучение пары спелов в середине боя + концовка
NightLuna: ну и может какая фича из советов
BorisZ: ну впечатление такое что у большинства все же бимсерч в леге
NightLuna: скорее всего да
NightLuna: я хочу его попробовать в 2048
BorisZ: у меня пока идея такая - типа мктс, поздно придумал уже
Xanrum: написал в гугл бимсерч и не нашел ничего, в гугле всего 5 резульатов, наверное особая, программисткая магия
BorisZ: раскрывать ноду, гонять ролауты из каждого потомка, потом лучшие оставлять в пуле, раскрывать их и так далее
NightLuna: beam search
Uljahn: https://en.wikipedia.org/wiki/Beam_search
Xanrum: спасибо
NightLuna: норм, дерзай, потом расскажешь
Xanrum: до полседнего тюнил перебор, и никакой леги : (
BorisZ: смесь бимсерча и мктс - оставлять потомка не по текущей оценке а по результату лучшего ролаута из него
Uljahn: лучшего?
BorisZ: конечно лучшего - тот то это в самый раз
Uljahn: не слишком оптимистично?
Uljahn: это типа смитси получится, не?
BorisZ: это выглядит привлекательнее чем какая-то оценка с потолка как в бимсерче
Uljahn: с противником рандомные роллауты гонять или для себя только?
BorisZ: результат ролаута - это заглядываем в реальное будущее, а оценка - это просто приближение, наши фантазии
BorisZ: для себя только
BorisZ: как я понял из постмортемов - народ на 1-2 хода смотрит на противника максимум
Uljahn: т.е. роллаут на 1-2 хода?
BorisZ: для то противника отдельно что-то закостылить, а ролауты нормальные - ходов на 10-12 думал
Uljahn: интуитивно понятно, что противник может спутать карты, сварить раньше, может поушен прийти, который игру перевернёт (рекурс на это жаловался в дискорде), предлагали даже подмешивать рандомный поушен из оставшихся, когда варка происходит
BorisZ: да, может испортить, но это справедливо одинаково для любого способа
BorisZ: поиска
BorisZ: я пробовал учитывать - ничего не получилось, другие так же говорили что не получилось
BorisZ: брать лучшую его цепочку и рецепты которые он должен сварить соответственно повышать или понижать в оценке
BorisZ: если раньше него сдаешь то бонус, если позже то штраф
BorisZ: вобще враг что-то другое варит, он то себя дальше просчитывает
BorisZ: у него другой план )
BorisZ: остановился на том что если у него уже на руках рецепт есть, то сильно штрафовать его если не варю прям сейчас - это тоже не помогло но хоть не помешало )
Uljahn: вообще, пм-ы многое упорядочили в голове, хорошие идеи про важность остатка после варки для разгона до следующего зелья, синергии спеллов, максимальный мультикаст со скидыванием ингредиентов в зелья и т.д.
BorisZ: ну про разгон и про мультикаст и в чате писали много раз
BorisZ: причем не как у меня - воздушные замки а конкретно, что сделал и сразу буст
aropan: > поздравляем Спасибо.
BorisZ: aropan вобще отлично выступил, поздравляю)
aropan: Спасибо, но я без комьюнити не смог бы.
aropan: Две вещи, которые мне оч помогли, которые я узнал и чата в тг, это фиксированная стоимость ингредиентов и как надо правильно писать приоритетную очередь для глубины.
aropan: https://twitter.com/chokudai/status/713979313377255425 там немножко с багами, но суть понять можно.
BorisZ: фиксированная стоимость рецептов или спеллов?
aropan: Фиксированная стоимость ингредиентов, из которых можно по составу заказа понять его стоимость.
aropan: То есть, что они стоят 1, 2, 3, 4 соответственно, а все заказы это сумму входящих в него ингредиентов + небольшой бонус за количество различных ингредиентов.
BorisZ: а понял сумма стоимостей камней _ бонус 1 или 2 да 4-5 разных
BorisZ: а как это знание помогло - непонятно )
BorisZ: стоимость рецепта и так дана, какая разница из чего она складывается
BorisZ: копить дорогих камней больше на дорогие рецепты?
aropan: Если отбросить бонусы (они не оч большие по сути, но конечно их учитывать надо), то получается, что тебе надо максимизировать производство камней.
aropan: Не надо дорогие.
aropan: То есть четыре по 1 такие же как один за 4 по сути.
aropan: То есть не важно как ты будешь комбинировать камни ты продаешь их за их стоимость.
aropan: Вообще можно про заказы забыть по сути - заказы только нужны, чтобы очистить рюкзак.
aropan: И набивать камнями дальше.
aropan: То есть смотри - когда ты продаешь камне и получаешь VP, то у тебя общая ценность состояния не изменится (если считать ее как стоимость камней в инвентаря + VP).
BorisZ: то есть в своей оценке ноды ты учитываешь дорогие камни пропорционально выше чем дешевые
aropan: Нет-нет.
aropan: Приготовить за один ход 10 дешевых камне лучше, чем два дорогих.
aropan: Все четко выражается в одно число.
735487: aropan: а какие там баги у чокудая?
aropan: Если бы это было не так (сумма заказа не соответствовала ценности камней), то надо было бы как-то хитро комбинировать камни и смотреть как их между заказами распределить.
aropan: А так смотреть не надо - каждый камень когда будет продан в заказ будет продан по фиксированной цене.
aropan: Но к концу игры конечно нужно понимать, что стоимость камней меняется и становится 0, 1, 1, 1.
BorisZ: ну я про это и говорю что ты оцениваешь состояние по сумме камней с весами 1 2 3 4
aropan: Да. И так можно делать только потому, что заказы равен сумме камней в нем +-.
aropan: > aropan: а какие там баги у чокудая? @735487 BestState надо из последнего состояния брать. И конечно можно играться с ChokudaiWidth и MaxTurn.
BorisZ: да, звучит логично все, у меня всегда лишние камни оцениваются как 0.5 1 1 1
BorisZ: надо попробовать поменять просто
BorisZ: для терминальных нод свою оценку, для обычных пропорциональную
aropan: > да, звучит логично все, у меня всегда лишние камни оцениваются как 0.5 1 1 1 Всегда? Так должно быть только в конце. Вначале камне стоят 1 2 3 4
aropan: В конце игры. Иначе ты будешь стремится делать заказы как можно быстрее, но это не лучший вариант.
aropan: Лучший сделать камней с запасом, чтобы после покупки заказа ты мог быстрее перейти к следующему заказу.
BorisZ: да, я понял всю логику
BorisZ: почему это не в мою голову приходит - так все просто )
735487: aropan: а как тогда определять когда заказ пора делать?
735487: я у себя в оценке за заказ награждал. походу надо наоборот было штрафовать )
aropan: Нужно делать длинные цепочки. В длинных цепочках ты не сможешь увеличить (стоимость камней + VP) без того, чтобы делать заказ.
aropan: То есть алгоритм сам поймет, что здесь нужно потратить ход, чтобы выполнить заказ (стоимость камней + VP увеличиться совсем чуть-чуть), чтобы потом быстро заполнять оставшиеся место хорошими камнями.
735487: надо будет попробовать. я за весь контест поленился и симу полную сделать и на бимсерч забил
aropan: Без симы мне кажется совсем никак.
BorisZ: переделал оценку, против босса стал значительно лучше выступать, но появился тупняк во многих играх, надо разбираться
BorisZ: не взлетело сразу
YurkovAS: вот что значит разобрался в игре симуляция с перебором - это только пол дела
YurkovAS: как говорит на друг: ГА меньше думать заставляет
BorisZ: не поспоришь)
BorisZ: отлаживать трудно такие игры - ниче не понятно что он там решил варить и почему
Hoggins: Ух, самое время пойти и применить полученные навыки в каком то еще мультике, или выспаться...
MadKnight: Hoggins так что, какой мультик выбрал?)