Chat:Ru/2021-05-19

From CG community
Jump to navigation Jump to search

wlesavo: хех, кто-то мои питоновские эвристики запушил в легу гиперсоника

Default avatar.png VanDarkMole: Серёжа ты мой ♂faking slave ♂

Default avatar.png kris12: ПИДОРАСЫ

Default avatar.png kris12: ПИДОРАСЫ

Default avatar.png VanDarkMole: Эй ты сам такой

Default avatar.png VanDarkMole: Я только за настоящую мужскую качалку

Default avatar.png kris12: fffljvc.

Default avatar.png kris12: kloju.

Default avatar.png kris12: k

wlesavo: tutubalin

BorisZ: позовите Вия

BorisZ: если разрешить рубить только с 13 дня, то чуть лучше играет с топ100, но хуже со второй сотней

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

BorisZ: чуть лучше - это конечно условно сказано - то есть бывают победы в первых 4х боях, до этого не бывало

YurkovAS: у меня лучше с 12 днем

YurkovAS: запилил мктс по пм-у Магуса - еле играет

YurkovAS: и роллаутов вроде достаточно, другой чел из топ20 писал, что у него 1.7к роллаутов, у меня 2.2к.

BorisZ: быстро это ты, вот блин практика решает

YurkovAS: а, ну я его делал еще на выходых - тот очень плохо играл

BorisZ: а ролауты с каким ограничением?

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

BorisZ: 8-9 к получается

YurkovAS: пока доп бонусов не подобавлял - мктс так и не заработал нормально, а у Магуса и другого чела про это не сказано

YurkovAS: http://chat.codingame.com/pastebin/d3426a8e-8ef7-4090-a0ef-1be645dfc612

YurkovAS: If there is no possible COMPLETE and no possible GROW, try a SEED with the same condition as the possible actions computation (not next to one of my tree and only when the seed cost is 0).

BorisZ: но у меня не мктс, просто мк

YurkovAS: прям как у него и написано сделал

YurkovAS: о, хорошо у тебя сейчас заиграл

YurkovAS: получается у тебя только grow, wait и так 13 дней?

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

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

YurkovAS: и в ПМ-ах тоже про это пишут, что очень важная вещь - доигрывание на евристиках. а не ускорение, например.

YurkovAS: а, ну значит с сидом

YurkovAS: а какой, их же много будет, т.е. все добавляешь?

YurkovAS: может я не так делаю: все действия в массив собираю, а потом рандомно выбираю из него

BorisZ: до 4 дня - чтоб тень не пересекалась, до 8 дня чтоб не рядом

YurkovAS: и еще дало буст, если последним положить wait, а при рандоме давать больший приоритет началу списка. типа: FastRand(movesCount + 5) - 5;

BorisZ: но это я от фонаря сначала поставил и не пробовал тюнить даже

YurkovAS: ну а ты так же делаешь? в массив их, а потом рандомно выбираешь?

YurkovAS: или более принудительно где-то есть приоритет у конктретных действий. в рандомном доигрывании

BorisZ: при ролауте да

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

BorisZ: в доигрывании - полностью случайно

YurkovAS: в доигрывании у тебя совсем без seed-а?

BorisZ: да, совсем без

YurkovAS: ясно, спасибо, проверю еще. видел тут в чате это обсуждали и в ПМ-е вроде тоже.

YurkovAS: мой мктс до 170 места дополз: уже лучше. а бимсерч был на 80-м.

Beard: YurkovAS делать массив а потом выбирать случайное действие это очень медленно

YurkovAS: а что быстрее?

Beard: я когда в это уперся - скопировал прям функцию с перебором действий

Beard: и вместо массива на каждое допустимое действие поставил рандом

Beard: типа if(randGen() % 2) { return action; }

Beard: там под x10 к скорости

YurkovAS: с % 2 он у тебя врятли дальше 5-го экшена доходит

YurkovAS: или я не понял, как ты это сделал

Beard: вот пробовал равновероятно, стало хуже чем % 2

Beard: не было времени разбираться почему)

YurkovAS: ну интересно, проверю. спасибо!

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

BorisZ: тогда их и сохранять не надо, и только до N/2 в среднем дойдем

Beard: BorisZ да, только я вот не придумал, как узнать количество, не проверив все действия, а это неотличимо от их генерации

YurkovAS: если память под массив уже выделена, то не должен он сильно тормозить.

YurkovAS: 140 место с мктс, класс!

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

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

BorisZ: количество действий будет = количеству не спящих деревьев + все места посадки + 1 вейт

BorisZ: на маску деревьев наложим последовательно маски посадки для каждого дерева

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

BorisZ: тогда можно кстати вобще другие действия не генерить, мы имеем биты взведенные в местах возможных действий, то есть это индексы ячеек, где ячейка == экшн

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

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

BorisZ: у меня пока 2 улучшения сработали: не рубить до 13 дня, и в ролаутах я тоже не рублю до того же дня

BorisZ: а то не логично было - в игре я не рублю а в ролауте рублю, неконсистентно)

BorisZ: в один и тот же день, в 10 например

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

YurkovAS: поднял тайминги и мктс дошел до 80-м места: стало больше роллаутов и на первом ходу дерево дальше просчиталось и дольше переиспользуется.

Chibikko: Сколько роллаутов уже успевает за 100 ms посчитаться? Дерево переиспользуешь с прошлого хода?

Chibikko: мне пришлось до 78 ms ограничить расчёт. Сборщик мусора в шарпе такое зло.

Uljahn: а ты не переиспользуешь однократно созданные ноды? каждый ход новые создаёшь? или откуда мусор тогда

Chibikko: пока не использую. Надо переписывать всё, чтобы фиксированный размер стейта был.

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

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

YurkovAS: вывел у себя статистику, можешь посравнивать: http://chat.codingame.com/pastebin/c111d022-2b26-4474-ab94-0e1eb22afa23

Chibikko: спасибо, посмотрю.

MelnikovIgor: @chibiko, а ты не заставляй волноваться сборщик, выделяй память на 1ом ходу, используй структуры, как выше писали

MelnikovIgor: Можно в C# выделить массив без трекинга GC

MelnikovIgor: Marshal.AllocHGlobal

Beard: YurkovAS а как искать, если отдал команду WAIT а соперник ещё садовничает вовсю?

Beard: Это стало единственной причиной почему отказался от мемоизации и строил дерево каждый раз заново

Beard: вот она где была, эта легенда)

MelnikovIgor: Перебирать варианты, пока не придешь к стейту из инпута?

MelnikovIgor: Ну максимум глубина будет 10, чаще меньше5

Beard: у меня типо DUCT так что если соперник сделал много действий то нужно состояние на большой глубине

MelnikovIgor: А, DUCT, я хз как тм

Beard: пфф ну да, подумал "да ну, искать ещё, будет слишком долго" и не проверил

Beard: ужас)

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

Beard: ну понятно, т.е. затраты на поиск себя окупят

MelnikovIgor: На глубину 2 какие затраты то?)

YurkovAS: да какие там затраты - быстро отработает. ты же ищешь, пока ход противника.

Beard: MelnikovIgor говорю ж, меня смутил один частный случай(

YurkovAS: но дерево скорее всего будет пустое, я долго пытался это улучшить в первой реализации. а потом прочитал пм Магуса и успокоился.

YurkovAS: правда странно, что реализация как у него вообще не играет

YurkovAS: может роллаутов мало...

Beard: YurkovAS не понял про "пока ход противника". мы же забираем инпут, по нему определяем состояние, и уже это состояние ищем в дереве, правильно? Но пока это всё происходит, идет наше время

YurkovAS: да, так и делаю

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

YurkovAS: там же рекурсивно

Beard: аа, это последовательный вариант

YurkovAS: последовательный мктс

YurkovAS: а у тебя же в duct тоже будет последовательный

YurkovAS: или нет?

Beard: нее, у меня пара действий

Beard: в первый раз мктс делал, опыта нет)

YurkovAS: я дукт в саомо конце поизучаю, т.к. не понял из документаций детали. а с мктс-ом уже есть опыт

mraymun: шо за Error loading certifications

gybson_samara: for j in range(1000000): http://chat.codingame.com/pastebin/7bf48378-d4e9-47a7-b450-1b3e213c0ccc

gybson_samara: независимо от количества нулей

gybson_samara: дошло =)

gybson_samara: но как исправить пака не ддошло

Uljahn: а чего хочешь-то? по коду не очень понятно

aropan: Видимо уже ничего не хочет.