Chat:Ru/2020-04-25

From CG community
Jump to navigation Jump to search

Asethon: Нормес, теперь надо со столкновениями разбираться.

MadKnight: Asethon как успехи?

Asethon: Есть одна проблемка

Asethon: Не могу никак понять, что не так с кодом. Ошибки не валятся.

Asethon: Видимо, память всю съедаю, либо время.

Asethon: (пишу на плюсах)

MadKnight: покажи код

Asethon: Через пастбин?

MadKnight: прям сюда вставь

MadKnight: тут чат генерит пастбины

Asethon: Сразу предупреждаю - будет больно.

Asethon: http://chat.codingame.com/pastebin/314342f6-069d-47af-a002-144f955641f5

Asethon: Забыл там убрать */ Я ctrl+z'тил

MadKnight: /* if (opponent.size() > 2) {

           opponent.erase(opponent.begin());

MadKnight: lol а в чём смысл делать так?

Asethon: Чтобы не хранить больше, чем надо. Я с плюсами года три не работал, так что не особо помню, как ограничить)

MadKnight: так а нельзя пересоздать массив?

MadKnight: просто занеси переменную в цикл

Asethon: Пересоздать - не то. Мне нужны значения предыдущих двух-трёх шагов.

MadKnight: зачем?

MadKnight: и зачем больше 2 ?

Asethon: Чтобы определить, куда движется вражина(траекторию и т.п.) и избежать столкновения(ну или подрезать самому, в идеале).

Asethon: Но, видимо, игра мне не даст времени на подобные расчёты)

MadKnight: игра даёт тебе целых 75мс

MadKnight: народ успевает ооочень много всяких рассчётов провест и

MadKnight: лучше вычти 3 скорости из противника

MadKnight: всм из чекпоинта

MadKnight: Asethon

MadKnight: сделаешь?

Asethon: "лучше вычти 3 скорости из противника всм из чекпоинта"

Не совсем понял

MadKnight: ну просто вычти

MadKnight: чекпоинт - 3*скорость

Asethon: Ну. Пока не разберусь со столкновениями - это роли не играет.

MadKnight: наоборот

MadKnight: это играет очень большую роль

MadKnight: а вот столкновения до золота не будут играть роли

MadKnight: запили эту формулу Asethon

Asethon: nextCheckpointX - 3 * thrust

Типо этого что-ли?

Asethon: В выводе

MadKnight: thrust - это ускорение

MadKnight: это не то

Asethon: Так. А скорость же, в качестве переменной, не существует. Мне её высчитать надо?

MadKnight: ага

MadKnight: причём вектор скорости

MadKnight: velX velY

Asethon: Ля. Придётся математику вспоминать)

MadKnight: ты забыл как скорость считать?)

MadKnight: расстояние / время же

MadKnight: первый класс

MadKnight: просто расстояние будет тоже вектором

MadKnight: вектор передвижения

Asethon: А время откуда брать?)

MadKnight: а в чём у тебя скорость измеряется?)

MadKnight: что/что?)

Asethon: Скорость неизвестна. Чтобы её определить - нужно знать время. Время тоже неизвестно.

MadKnight: измеряется-то в чём?

MadKnight: единица измерения какая?

Asethon: расстояние/время

MadKnight: да лол

MadKnight: это не единица измерения

MadKnight: м/с - вот единица измерения

MadKnight: так в какой у нас скорость измеряется?

MadKnight: м/с ?

MadKnight: км/ч ?

MadKnight: или км/с ?

MadKnight: или какая?

Asethon: Ну. Тут никаких метров, как таковых, нет.

MadKnight: вот именно

MadKnight: а что есть?

MadKnight: в чём расстояние измеряется?

Asethon: Есть условные расстояния. Поэтому и написал, расстояние/время, а не км/с или что-то в этом роде.

MadKnight: так единица измерения должна быть

MadKnight: есть расстояние => есть единица измерения

MadKnight: хочешь, назовём её Безымянная единица расстояния

MadKnight: БЕР

MadKnight: ну так вот, расстояние у нас в БЕРах

MadKnight: значит скорость - это БЕР на что 7

MadKnight: ?

MadKnight: у нас юнит проходит всю свою скорость за сколько времени?

MadKnight: вот например у юнита скорость 100

MadKnight: значит за сколько времени он на 100 переместится?

Asethon: За ~75мс.

MadKnight: нет, это максимальное время исполнения программы

MadKnight: оно может быть любым - от 1мс до 75мс

MadKnight: от него не зависит

Asethon: Ну. Тогда за 1 единицу времени.

MadKnight: что это за единица времени?

Asethon: Секунда или нет - мне трудно сказать.

MadKnight: сколько единиц времени прошло с того момента как ты начал засекать расстояние?

MadKnight: вот ты прошёл 100 растояния

MadKnight: сколько времени прошло?

MadKnight: с реальным временем это не связано, я же говорю

MadKnight: скорость не зависит от того, сколько времени прошло в реальном мире

MadKnight: в игре своё время

MadKnight: так сколько прошло игрового времени?

Asethon: 1

MadKnight: именно

MadKnight: а чего 1 ?)

MadKnight: ход 1

MadKnight: игра пошаговая

MadKnight: скорость в юнитах/шаг

MadKnight: так что надо на что делить?

MadKnight: надо делить юниты/шаги

MadKnight: а не м/с

MadKnight: а значит время у тебя есть

Asethon: 16000 юнитов/1 шаг = 16000. Скорость я так не измерю уж точно.

MadKnight: откуда ты взял так много юнитов

Asethon: Размер карты взял.

MadKnight: а как связаны размер карты и скорость

Asethon: Ну дык. Я без понятия, какое расстояние проходит под.

MadKnight: - машинка ехала 5 секунд и проехала 100 расстояния. какая скорость? - вот между этими домами 16000 метров, значит скорость машинки 16000!

MadKnight: ты так же на матеше делал?)

Asethon: Я на матеше последний раз был лет семь назад) И вектора(со всем сопутствующим) - не самые мои любимые вещи.

MadKnight: ну это же не значит что надо брать абсолютно случайные значения

MadKnight: так ты не знаешь как получить пройденное расстояние?

Asethon: Его можно получить только со второго шага

MadKnight: ну а на первом шаге ты знаешь свою скорость

MadKnight: 0

Asethon: http://chat.codingame.com/pastebin/a05076e4-d7db-43eb-9774-339a1f9c4026

Asethon: Победил, но ощущение, что я что-то не так написал.

Asethon: Ну и я даже визуализацию не увидел, потому что игра её тупо не сделала.

MadKnight: if (pod.size() > 0) {

           speed = {x, y};
       }

MadKnight: а это что?

Asethon: Кривая проверка на то, что это не первый шаг.

Asethon: http://chat.codingame.com/pastebin/40a6345a-9feb-4f68-9093-0ec6f3aeed61

Asethon: Не работает чёт вообще.

Razzeeyy: О, прикольно пытаешься избегать противника

Razzeeyy: у тебя pod.size() всегда будет больше 0

Razzeeyy: потому-что ты в начале его сразу сетишь в x,y уже

Razzeeyy: т.е. проверка по сути делает двойную работу в никуда

Razzeeyy: ну это при условии что я правильно помню си плюс плюшечку)

Asethon: "у тебя pod.size()"

Я это уже заменил

Razzeeyy: а это какая лига у тебя? деревянная ещё?

Asethon: Бронза

Razzeeyy: кстати использован буст или нет можно не трекать ваще

Razzeeyy: невалидный буст игра сама заменяет на 100 тяги

Asethon: С pod.size, как ни странно, всё работает. А вот с проверкой is_first - нет.

Razzeeyy: мне кажется можно проще высчитывать скорость

Razzeeyy: а ну да

Razzeeyy: ты посмотри где ты вектор скорости определяешь

Razzeeyy: он же внутри цикла и он у тебя живёт каждый раз только один цикл

Razzeeyy: и потом чётенько сдыхает в конце цикла и опять по новой)

Asethon: Вынес за цкил, в итоге уехал на -276898, -999037

Razzeeyy: а там вот уже надо как-то решать проблему с инициализирующими значениями)

Razzeeyy: правда зачем считать скорость я хз, я без неё вывез

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

Razzeeyy: там и без скорости есть пара оптимизаций которые тебя выпихнут в лиги выше

Asethon: Чтобы тормозить заранее, как я понял.

Razzeeyy: я безусловно тормозил :sweat_smile:

Razzeeyy: просто если я до точки ближе чем N юнитов то по тормозам)

Razzeeyy: MadKnight а я уже 750 в голде... И так ещё пока не писал ни капли умного кода О__о

Razzeeyy: блин ппц я раньше думал тут жоще типы в csb играют

Razzeeyy: я думал меня уже с бронзы начнут нагибать шо мама не горюй)

Razzeeyy: такс... теперь мне в эту свою джаваскриптовую прогу на чистых функциях всё-таки надо ввести стейт :sweat_smile:

MadKnight: Asethon пофиксил?

Asethon: Не-а. Забил и вернулся к своему решению.

Razzeeyy: Как приятно когда мэйн такой короткий

Razzeeyy: http://chat.codingame.com/pastebin/61eb146e-1fca-4239-9e19-14f7221cf647

Razzeeyy: и хорошо что в жабаскрипте есть вебпак, даже свою конкатенацию изобретать не пришлось)

MadKnight: Asethon да чё ты забил?

MadKnight: покажи код

MadKnight: пофикшу

Asethon: Поздно уже, я тут с ексепшонами играюсь.

MadKnight: где вылетают?

MadKnight: почему поздно?

MadKnight: тебе просто нужны предыдущие х у

MadKnight: а потом просто вычесть их из текущих

Asethon: Вектора вылетают)

MadKnight: покажи

MadKnight: код

MadKnight: ты чё-то всё переусложнил

MadKnight: очень

MadKnight: я аж офигел как ты всё усложнил

MadKnight: можно же было сделать проще

Asethon: http://chat.codingame.com/pastebin/81b27c95-b285-4f8b-bb53-d1d218885916

Asethon: Люблю писать костыли.

MadKnight: http://img1.joyreactor.cc/pics/post/%D0%B2%D1%81%D1%91-%D0%BF%D0%BB%D0%BE%D1%85%D0%BE-%D1%84%D1%8D%D0%BD%D0%B4%D0%BE%D0%BC%D1%8B-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82-%D0%BA%D0%BE%D0%BC%D0%B8%D0%BA%D1%81-3658533.jpeg

MadKnight: вот это про тебя

MadKnight: pod[pod.end() - 1]

MadKnight: это ещё чё такое

Asethon: Предпоследний элемент, по идее.

MadKnight: end возвращает ссылку

MadKnight: на элемент

Asethon: Если прописать цифрами - код просто не запускается.

MadKnight: ты используешь указатель на память как индекс

Asethon: pod[0][0] не работает. А так, хоть ексепшн есть

Razzeeyy: :joy:

MadKnight: так тебе же не 0 нужен

MadKnight: хотя может и он

Asethon: 0 - это предыдущий же.

Asethon: Как элементов становится три - первый удаляется.

Asethon: Но суть в том, что у меня ни один шаг не отрабатывает.

MadKnight: что значит не отрабатывает

MadKnight: а что отрабатывает?

Asethon: Ничего)

MadKnight: как отрабатывает?

MadKnight: у тебя в speed всегда есть 2 элемента чтобы их на выводе использовать?

Asethon: play my code...

"Timeout: the program did not provide 1 input lines in due time... Asethon will no longer be active in this game."

MadKnight:

       /*int opponentX;
       int opponentY;
       cin >> opponentX >> opponentY; cin.ignore()

MadKnight: так зачем ты удалил чтение противника

MadKnight: противника надо всегда читать

MadKnight:

   vector <int> speed;

MadKnight: cout << nextCheckpointX - 3 * speed[0]

MadKnight: в первый ход у тебя будет что-то в speed ?

Asethon: Сомневаюсь

MadKnight: пофикси

Asethon: Пофиксил

MadKnight: чё теперь?

Asethon: И правило проверки speed на пустоту поменял.

Asethon: Теперь работает.

MadKnight: покажи

MadKnight: реплей

Asethon: https://www.codingame.com/share-replay/454669817

MadKnight: заливай\

Asethon: submit типо?

MadKnight: ага

Asethon: Норм процент побед.

Asethon: О. На первое место поднялся.

MadKnight: go v legend теперь

Asethon: Это шо?

Asethon: Всё. Сильвер через пол часа.

Razzeeyy: легенд это топов ранг типа)

Razzeeyy: Asethon офигеть четенько у тебя бот отрабатывает

Asethon: М?

Razzeeyy: я думаю тебя и в золото поднимет без правок бота вообще)

Asethon: Не. Я хочу дописать так, чтобы в повороты нормальнее вписывался и прочее. Есть пару идей.

735487: заедет в золото :)

Razzeeyy: чёто я уже очкую

Razzeeyy: походу он ща меня перегонит :О

Razzeeyy: а я думал я быстро за 3 дня в золото поднялся О_о

Razzeeyy: зараза, у меня боты друг друга подрезать стали при более умном алгоритме)

Razzeeyy: но можно ли считать его умным если он работает по факту хуже :thinking:

Razzeeyy: так, я понял

Razzeeyy: игра по дебильному предлагает следующий чекпоинт

amurushkin: Razzeeyy в золото быстро подымаются на 1 формуле

Razzeeyy: checkpointPos+velocity*2?

Razzeeyy: amurushkin на такой формуле?)

Razzeeyy: эх опусти ля своего бота баганым расчётом следующего чекпоинта((

Uljahn: почти, только - velocity*3

Asethon: Razzeeyy, возможно, ты был прав. На сильвере уже на первом сижу. Процент побед выше 90.

Razzeeyy: Asethon да, так и есть там в сильвере даж щиты никто не юзает

Razzeeyy: Uljahn а у меня не сработал коэфицент 3, потому-что у меня формулы ускорения торможения другие, поэтому мне надо было мягче компенсировать)

Razzeeyy: у меня ускорение вообще sin(angle)*100

Razzeeyy: точнее там косинус

Razzeeyy: ну да суть таже

Razzeeyy: Так ребята я про CSB не пойму одну дич

Razzeeyy: Там прогресс чекпоинтов индивидуально к кораблю привязан только? Получается если какой-то корабль ведет то он и должен пройти всю трассу?

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

Asethon: Лан. Я на пару часов отлечу, подремать. Потом как раз в золотой лиге буду.

Uljahn: Razzeeyy: да, у каждого пода свой прогресс

Uljahn: но зато таймаут общий на команду

Uljahn: это в голде будет играть роль

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

Razzeeyy: блин ну это тупо что каждый под должен своё ехать

Razzeeyy: я тут уже хочу крутой Swarm AI мутить

Razzeeyy: а они мне палки в колёса)

Razzeeyy: @Uljahn тоесть я могу только сбрасывать таймаут союзному поду? А в прогрессе команды никак не помочь если лучший раннер лажает? хмм

Uljahn: можешь иначе помочь

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

Razzeeyy: и в леге такие же условия получается?

Uljahn: угу

Razzeeyy: теперь понятно почему топовые боты так тупо играют

Razzeeyy: только толкушки

Razzeeyy: эхх

Razzeeyy: ну это блин бред, тактика так ограничена((

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

Uljahn: тут разворот очень дорогой - максимум 18 градусов за ход

Uljahn: попробуй MeanMax или Fantastic Bits, там повеселее

Razzeeyy: та да, чувствую скоро забью и чето по свободнее буду искать

Razzeeyy: а то у меня тут такая хитрая идея стратегии была

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

Razzeeyy: но т.к. тут всрали чекпоинты бл

Razzeeyy: было бы круто если бы чекпоинт трекался чисто на команду

Razzeeyy: а так ваще не интересно, никакие хитры мутки не помутить

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

Razzeeyy: ну у тебя там какой-то хитрый алгоритм?

Razzeeyy: или даже без нейронок?

Uljahn: -3Vel по сути

Razzeeyy: не понял что за -3Vel :)

Uljahn: cp_pos - 3*velocity

Uljahn: единственная добавка - если под докатится до чекпоинта за 5-7 ходов, то начинает разворачиваться к следующей цели, но без ускорения

Razzeeyy: а, та корректировка энерции, понял)

Uljahn: или с усорением, если цель не помешает взять текущий чек

Razzeeyy: у меня тоже такая добавочка была но в серебре

Razzeeyy: про ранний поворот

Razzeeyy: но я её ещё пока не адаптировал под золото

Uljahn: в серебре сложно такую сделать - координат чекпоинтов нет изначально, надо трекать самому

Razzeeyy: представляю как ща Asethon офигеет что ему почти всё переписывать под голду))

Uljahn: угу))

Razzeeyy: Uljahn ну да, на втором круге у меня бот начинал заметно лучше играть)

Uljahn: есть хинт - на первом круге разворачиваться к центру

Uljahn: особенно, если чек от центра далеко

Razzeeyy: хммм

Razzeeyy: пока не понимаю как это помогает)

Razzeeyy: типа получается ты потом заблочишь противников таким образом?

Uljahn: в серебре помогает на первом круге

Razzeeyy: ааа в серебре

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

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

Uljahn: ну и щиты полезно прикрутить

Razzeeyy: а я одним из подов юзаю щит на старте))

Razzeeyy: чисто ради остановочки

Uljahn: ничоси стратегия

Razzeeyy: блин но кстати да

Razzeeyy: норм хинт

Uljahn: так щит на торможение не влияет

Razzeeyy: чёто я понял шо я тупой))

Razzeeyy: щит последующие 3 хода отрубает двигло

Uljahn: а, понел

Razzeeyy: а я как бы и так стою) получается я как минимум 3-4 цикла одним подом буду стоять

Razzeeyy: а то ещё и заблочу какой-то другой под противника

Razzeeyy: но стратегия хреновая, лучше буст, да)

Uljahn: а зачем стоять на старте?

Uljahn: лучше ехать на второй чек

Uljahn: и там мешать сопернику

Razzeeyy: и это тож пробовал

Razzeeyy: чую в идеале надо какой-то алгоритм резолва столкновений с союзником писать

Razzeeyy: чтобы не толкаться тупо

Uljahn: детект коллизий?

Uljahn: это уже уровень легенды

Razzeeyy: ну хотя бы не детект даже

Razzeeyy: а как например ехать рядом с союзником шоб не подрезать его с траектории)

Uljahn: слишком сложно

Uljahn: аналитически не решить, только перебором приблизительно

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

Razzeeyy: а теперь я посмотрел на свою формулу ускорения

Razzeeyy: и мне закратывается подозрение что я творю какую-то дичь

Razzeeyy: const offset = 0.1

   const heading = ((1 - Math.abs(angleToCheckpoint / 180)) + offset) ** 2
   const thrust = clamp(heading * 100, 0, 100)

Razzeeyy: походу там может быть 1-Infinity O_o

Razzeeyy: а не

Razzeeyy: 0/180 это ноль, всё норм

Uljahn: это из сильвера формула?

Razzeeyy: ну типа того

Razzeeyy: мой франкенштейн

Uljahn: а то в голде нет относительных углов, надо самому считать

Razzeeyy: так я сам угол отсчитал

Uljahn: а, понятно

Razzeeyy: const angleToCheckpoint = simplifyAngle(Math.round(targetAngle - pod.angle))


Razzeeyy: так но чёта эта формула ускорения какая-то дичь

Uljahn: targetAngle через atan2?

Razzeeyy: именно)

Razzeeyy: const targetAngle = radiansToDegrees(Math.atan2(targetDirection[1], targetDirection[0]))


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

Razzeeyy: а то синусоида при приближении к 1 замедляется

Razzeeyy: хотя походу не так критично

Uljahn: if abs(angle) < 30: thrust = 100 :)

Razzeeyy: :smile:

Razzeeyy: а до этого?)

Razzeeyy: а меньше 30 градусов у тебя какой-нить хитрый расчёт прогноза траекторий))

Uljahn: ща гляну, как у меня с трастом

Uljahn: if abs(ang) > 90: thrust = 0, в остальных случаях 100

Uljahn: или 200 в леге

Razzeeyy: кароче твой хинт про буст шикарен

Razzeeyy: спс)

Uljahn: :thumbsup:

Razzeeyy: сразу бот в пол раза лучше работать стал))

Razzeeyy: а чё в леге только больше газа добавляют и всё?)

Uljahn: да

Razzeeyy: тююю

Razzeeyy: у тебя конечно расчёт тяги топ))

Razzeeyy: зато быстро, меньше цпу жжёт)

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

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

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

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

735487: Uljahn: я когда то давно пытался такую формулу сделать еще для раика для хоккея. у меня не получилось

735487: нейронок там вообще штук 5 максимум

Uljahn: хм, там не очень сложно, но много операций

Razzeeyy: насколько помню такие формулы это какой-то частный случай задачи projectile intercept

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

Razzeeyy: но это пздц головоломка, особенно когда по параболе))

Razzeeyy: да когда ж он уже отсчитает мой ранг бл

Razzeeyy: последние 10% битв оч долго считает

Uljahn: это наверное игры против реальных ботов, а не сломанных сабмитов из сильвера)

Razzeeyy: ага)

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

Razzeeyy: эх 728 место в голде

Razzeeyy: но есть ещё 3 или 4 места для конкретных улучшений

Razzeeyy: но мне покашо влом уже)

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

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

Razzeeyy: а у меня прям натуральный рандом есть в боте))

Razzeeyy: я решаю надо бустится или не надо

Razzeeyy: при условии что все остальные условия выполнены

Razzeeyy: то финальная проверка random() > 0.5

Razzeeyy: )))

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

Uljahn: главное сид зафиксировать в начале, а то не отдебажишь потом)

Razzeeyy: покачто не приходилось так дебажить)

Razzeeyy: про крестики нолики я так понимаю для 3х3 есть классическая чёткая выйгршная или ничейная стратегия

Razzeeyy: а потом уже когда игры в игре там уже какая-то интересность

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

Razzeeyy: эх, блин походу мне тут проще тупо какой-то паттерн матчинг на двухмерном массиве написать

Razzeeyy: чем с алгеброй какой-то мудохаться чтобы это всё описать))

Razzeeyy: потому-что стратегию выйгрышную для 3х3 я знаю, да наверное большинство знает))

Razzeeyy: а формализовать кроме как чем набором правил паттернов -- хз)))

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

wlesavo: доальше просто хэширую таблицу и в словаре ищу совпадение

Razzeeyy: аха, предрасчитать...

Razzeeyy: я так и подумал что ты генеришь пермутации в кеш)

Razzeeyy: умно да)

Razzeeyy: а я бы вообще на этапе макроса это всё бы нагенерил, так вообще даж время в рантайме тратить не надо)

Razzeeyy: но делать так я конечно же не буду

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

Razzeeyy: думаю откуда мне твой ник знаком, а помоему я недавно видел твоего бота в csb в битве против моего))

Razzeeyy: или не оттуда, хм

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

wlesavo: там поломанный бот, я на формуле до голды дошел и не трогал

Razzeeyy: Uljahn ааа ты типа смапил всё игровое поле в одномерный побитовый массив

Razzeeyy: wlesavo на голду влом переписывать стало?)

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

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

Razzeeyy: Uljahn а противника ты трекаешь отдельным полем чтоль?

Razzeeyy: ты ж в 1 бит не уложишь инфу о свободна ли клетка, занята мной занята противником

wlesavo: Uljahn ну в том то и дело что я мктс не хочу, может это и реально дороже, но пока вроде нормально

Uljahn: у меня массив сейчас на 2^18 элементов, индекс - текущая позиция на поле, в массиве хранится результат оценки на выигрыш, как-то так

YurkovAS: wlesavo у тебя в евристике tron battle есть такое: evaluation heuristic tweaking? https://www.a1k0n.net/2010/03/04/google-ai-postmortem.html

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

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

735487: YurkovAS: я пробовал. у меня не получилось

735487: я вчера просто заменил деление умножением. попробовал разные еще глубины в итоге обратно на 4 вернул и поднялся чуток выше чем был :)

YurkovAS: у меня тоже не работает или не так сделал. А у wlesavo работает. Это важная фича.

YurkovAS: amurushkin сделал миник на глубину 4, стал доходить до 90-120 места. Поэкспериментировал с увеличением глубины до 5-6 в зависимости от тика - дошло до 50 места (или нарандомило, позже еще проверю)

YurkovAS: глубину как у тебя в смитсимаксе считаю: свою + противников = 1 глубине. и т.д

amurushkin: я когда то давно пытался миник сделать. почему то оно у меня не работало

Razzeeyy: а как вы вообще делаете глубину :thinking: это тоесть вы называете глубиной количество шагов симуляции наперёд?

735487: да

Razzeeyy: http://chat.codingame.com/pastebin/dca26244-9efd-4f96-a4d8-717e00d1a7f0

Razzeeyy: блин, свернуло длинное сообщение(

735487: да

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

Uljahn: не обязательно прямо все сочетания перебирать

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

Uljahn: -18, 0, +18 градусов поворот, 0 и 200 ускорение

Uljahn: щит и буст по усмотрению

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

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

Uljahn: нагенерировал 10к последовательностей по 8 ходов, просимулировал их, оценил, где дальше уехало

Uljahn: изи)

wlesavo: решил таки попытаться написать мктс на нумпай

WhiteCrow: Хай гайз

WhiteCrow: Хау из ит гоин,

Uljahn: нот бет

Uljahn: wlesavo: покажешь потом?

wlesavo: Uljahn если выйдет чего то конечно

Uljahn: я вот по этой статье пытаюсь делать https://www.moderndescartes.com/essays/deep_dive_mcts/

Uljahn: но там всё переделывать придётся, похоже

Uljahn: потому что это MCTS для го с нейросеткой для оценки позиции, как я понял

Uljahn: хочется отвязаться от классов, ноды хранить как structured array с кастомным dtype, ну а методы как просто функции реализовать что ли...

☺: Тогда добро пожаловать в Си без плас плас.

wlesavo: мда, под сотню ролаутов на нулевой глубине

wlesavo: таки попробую наверное со словарем завтра

MadKnight: есть кто живой?