Chat:Ru/2020-05-16
gybson_samara: я тут с 7 просчитанных ходов до 5 упал, а у людей есть время противника трекать =(
zuko3d: а ты для всех сразу перечисляешь ходы? или по отдельности?
zuko3d: когда я считаю для одного - успеваю на 30 ходов вглубь взять все пути без двойных петель.
gybson_samara: для всех
gybson_samara: что-то пока совсем непонятно в чем фишка серебра
vrabosh: чтоб больше иногда просчитываь ходов.. можно считать только нечетные х и y
vrabosh: а также смотреть сколько времени после каждого юнита остается до тоймаута.. и последнему можно дать больше просчета если время норм остается
gybson_samara: я для начала все на numpe перепишу, а не только самое самое
vrabosh: что тут переписывать.. тут одна таблица h на w
vrabosh: и по ней бегай.
vrabosh: в предыдущих играх я проверки делал вообще тупо если на х-1,y+1 есть чтото то туда можно идти.
vrabosh: а сейчас все связи в граф занес
vrabosh: Akarachudra, расскажи про свой алгоритм плз
gybson_samara: если он спршивал про бота, наверное он просто гоняет у себя бои подбирая параметры и ищет оптимальные
Akarachudra: vrabosh bfs+извращенный A*-подобный дейкстра. Это для поиска. Ну и всякие попытки предсказать позиции соперников.
Akarachudra: У поиска есть явные проблемы, но не уверен, что есть время и силы что-то править.
Akarachudra: Я в чате видел некоторые твои идеи. Они у тебя хорошие, думаю в твоём случае проблема не в идеях, а в том, чтобы их корректно закодить.
Akarachudra: Тут только пробовать и ошибаться.
vrabosh: ты каждый ход пересчитывашь карту куда ходить? или 1 раз посчитал и ходишь по проложенному пути?
vrabosh: я кстаи через bfs хорошо нахожу на какой поинт 10 идти. Тут как раз учитывает в начале где противник стоит, и я.. и всех границы просчитывает и в итоге на что меньше влияния от дургих, туда и идти..
Akarachudra: каждый ход, по несколько раз, с сохранением всей истории предыдущих ходов. памяти немеренно дают - можно всё хранить. но работает криво, знаю где проблема, но чтобы поправить нужно подойти к снаряду конкретно.
vrabosh: я вот как делал, пускал волну от себя, потом от максимальной точки обратно.. и тогда вокруг меня вроде как хорошие коэф были..
vrabosh: но сталкивался с проблемой что то туда то сюда хочет ходить..
Akarachudra: ну я хз как такое отлаживать, если не написан свой дебаггер или тесты.
vrabosh: это мне не понятно.. просто некогда не писал тесты..
vrabosh: как тут можно тесты написать?
Akarachudra: ну функциональные, берешь историю игры, смотришь, пишешь что поведение ожидаемое. тестируешь оторванный поиск пути. да много чего можно. но с тестами сложнее в таких коротких контестах. лучше дебаггер написать.
Akarachudra: но сейчас скорее полезно сконцетрироваться на поиске путей. времени мало.
Akarachudra: реализуй какой-нибудь жадный алгоритм, с глубиной 30-40. не забудь пометить пройденные пути.
vrabosh: а так идея ввести логи.. на будущее буду использовать.. возможно даже вести лог предсказания след ходов.
Akarachudra: ну логи обязательно. только их парсить нужно - не глазами смотреть.
vrabosh: потом проще у себя на компе ситуацию проигрывать.. да и еще некторые вещи в будущем писать
vrabosh: вот еслиб сразу делал логи, то сталкновение лбами из за угла легко вычислить в 1 строчку..
vrabosh: у меня идея пришла для тех кто перебором играет
vrabosh: карты же семетрчные..
vrabosh: также в начале дается много времени..
vrabosh: берете одну половину.. где нить точку, тут надо еще придумать лучшую.
vrabosh: и просчитываете все ходы самые лучшие.. запоминаете это
zuko3d: а как это с симметричностью связано?
vrabosh: потом кидаете на этот путь 2 юнитов, один ходит с 1 по конец, другой с конца по начало..
vrabosh: дву других юнитов на другую половину
vrabosh: и можно не учитывать где, кто что скушал. возможно такое зайет
vrabosh: либо если 2 юнита играет.. одного на одну половину кидаешь, другого на другую..
zuko3d: осталось с оппонентом договориться, чтобы он не мешал =)
vrabosh: ну и тут уже играешься как ходить.. либо с первого по последнее число, либо в обратную сторону..
vrabosh: это чисто путь. он как ореентир куда идти
vrabosh: ты опнимаешь, если там скушано.. то идешь где не скушано и продолжаешь путь. можешь посмотреть просто где больше будет назад идти или вперед.
vrabosh: но это теория)
vrabosh: покрайней мере вначале мне кажется можно хорошо пропарсить.
wlesavo: лол проспал повышение
tiraptor: Я тоже) Проснулся и приятный сюрприз
vrabosh: можно как нить делать, чтоб он считал пока ждет ответ от инпут?
vrabosh: т.е. всегда считал)
vrabosh: я код выполняю как обычно.. а гдето параллельно работает функция независима на мою последовательность кода.
vrabosh: надо щаз куча всего напробовать.. чтоб в будущм контесте был опыт)
vrabosh: инпут иногда до 100мс ждешь
wlesavo: tiraptor интересно кому спасибо сказать, я уходил на седьмом месте с разницей до босса очка в 2.5
OkThought: у меня внезапно в серебряной лиге баг в чтении пеллетов: он читает на одну меньше, и таймаутится, я вахуе
wlesavo: vrabosh нет, нельзя, там есть хитрости вроде чтобы наиграть пол мс на этом но не все 50
wlesavo: OkThought дай угадаю
wlesavo: питон
wlesavo: принтишь без flush = True
OkThought: 🤔 щас чекну
wlesavo: таймаут в коде, последний пеллет в инпуте
wlesavo: известная проблема, все там были
OkThought: спасибо
OkThought: странно что я сюда попал на серебре
wlesavo: http://chat.codingame.com/pastebin/8f8f6780-7606-4e9d-8772-cfb8df3c8c2a
OkThought: о, это ваще ништяк, спасибо
wlesavo: ну там game.turn_start надо либо выкинуть либо у себя добавить если есть класс
OkThought: разобрался :)
OkThought: функция конечно корявая, почти полностью её переписал
wlesavo: помню тоже пару часов искал косяк, начал уже все подряд принтить, и обнаружил что инпуты не приходят, но пришел ульян и спас меня)
OkThought: всех когда-то спасает свой Ульян
wlesavo: блин, хотел чето поделать, а во сне запромоутило в легенду и чето как мотивация потухла
wlesavo: ну ладно, сник фраги сделаю и пожалуй хватит
ashelkov: я вот чтото поправил и с 15 места на 45 ((
ashelkov: и вроде ничего плохого не сделал)
735487: может просто с сабмитом не повезло
wlesavo: да скорее всего, но прям очень рандомная игра таки
ashelkov: ну я конечно еще попробую
wlesavo: с другой стороны реально улучшения похоже которые вчера насоветовали помогли
ashelkov: но как то странно если так уж разбрасывает
gybson_samara: OkThought ты может их как-то обрабатываешь при чтении?
wlesavo: да там уже разобрались gybson_samara
wlesavo: пришел чувак и за день накидал бота который уже в топ 20 легенды, нормально так
zuko3d: это ты о ком?
wlesavo: чокудай
wlesavo: недавно в ворлде обуждали только
wlesavo: типа у японцев есть даже свои алгоритмы о которых мы вообще не слышим толком даже, например чокудай серч
zuko3d: :D
wlesavo: ща он пришел, говорит вчера в твиттере увидел, решил поучавствовать
ashelkov: все таки не сабмит был плохой
ashelkov: улучшение было плохое
ashelkov: вернулся в топ 15
ashelkov: идея игнорить "чужие" супер пеллеты (те где враг ближе) не работает
ashelkov: я типа оттестил на 1 примере игры де это работало и запилил
ashelkov: а по факту хрень
dbf: инетресно, а почему не работает? враг лажает и можно их отобратьт что ли?
dbf: я просто тоже такое впилил и только 1 раз была проблема
metahom: так и называется? Чо-Куда поиск?))
ashelkov: мне кажется что не работает потому что паки не навязыват борьбу на територии противника и уходят кудато
ashelkov: а може я чтото хреново запилил))
wlesavo: metahom :grinning:
wlesavo: ashelkov много случаев когда тяжело определить какая большая еда твоя, когда один и тот же твой пак оказывается ближним к двум пелеткам, но не может одновременно успеть взять две. я думаю проблема в этих едж кейсах
ashelkov: ну не настолько чтоб вниз сабмититься/ таких кейсов не так много
wlesavo: все таки может хватить, если из-за этого у тебя будут рандомные проигрыши на 40-50 рангах то просто будет тяжело подниматься
ashelkov: ну может быть/ согласен
vrabosh: жесть, с этими тонкостями питона..
vrabosh: у меня массив в котором список.. копирую этот массив, а внутри список ссылается на старые данные
zuko3d: ага, есть такое. используй deepcopy
zuko3d: а ещё лучше не исопльзуй списки если тебе нужна производительность - используй только массивы numpy
gybson_samara: если маленькие, то можно и списки
zuko3d: даже маленькие. Список - это массив из указателей. Каждый доступ к элементу - это несколько прыжков по памяти
vrabosh: а у нампи дипкопи как звучит?
zuko3d: newArr = arr.copy()
vrabosh: у меня в нампи списки
vrabosh: и они при копи обычном ссылкаются на старый указатель
zuko3d: брр... у нампи обычно ndarray
zuko3d: а зачем тебе в нампи списки?
vrabosh: да я нампи как обычный масив использую по привычки
vrabosh: удобней [x,y] писать чем [][]
zuko3d: тогда это уже не список
wlesavo: from copy import deepcopy a = deepcopy(arr)
vrabosh: вот и засунул туда списки.. а на каждый xy у меня хранятся связи с соседями клетками
wlesavo: но с нумпайными можно просто arr.copy()
wlesavo: и это быстро достаточно работает
zuko3d: не, там судя по всему в ячейках лежат list
wlesavo: а дипкопи это смертить
vrabosh: спаибки с дипкопи заработало..
vrabosh: да, я в ячейки list запихнул
vrabosh: удобно.. я таким способом легко узнаю где сколько переходов через len(g[x,y])
gybson_samara: я это в отдельный массив занес
vrabosh: и цикл легко кидать for nx,ny in g[x,y]
wlesavo: в смысле координаты там?
wlesavo: тогда сделай ккоордиаты ну туплах, (x, y), они иммутаблы и не требуют дипкопи
vrabosh: я туда еще засовываю всякие переные с которыми работать могу
vrabosh: типа веса итд.. вот щаз решил их потрогать.. стратегию поменять.. и столвнулся, что везде меняет
vrabosh: ищу способ как быстро перебирать.. под рекурсией каждый раз копи делать. то получается долго думает
vrabosh: я вот думаю как без копи это сделать, чтоб он по томуже масиву через рекурсию проходил..
vrabosh: можно впринципе попробовать копию делать на развилках.. тогда нагрузка сократиться.
vrabosh: и не надо будет чтото выдумывать
vrabosh: вообще тут ктото перебором пользуетс, кто в золоте или легенде?
zuko3d: я перебором делаю
zuko3d: пока есть надежда пройти в легу, но надежда тает =)
vrabosh: насколько клеток получается просчитывать?
ashelkov: глубина 15 с запретом возврата через шею
ashelkov: шея = предыдущая клетка
ashelkov: разрешать разврорт если шея единственный вариант
ashelkov: но надо не учитывать клетки ктотрые сам прошел в скоринге
ashelkov: и будет вам лега)
BorisZ: я вот тут подумал что может ситуаций когда выгодно свитчится вообще практически не бывает если враги разумные
ashelkov: я и не свитчусь)
BorisZ: а враги там в легенде свитчатся?
BorisZ: на глазок - как?
ashelkov: да некоторые ловят
ashelkov: изза угла ктото просчет написал
ashelkov: если враги разумные - там как раз все разумные))
BorisZ: ловить одна ситуация в тупике, другая в тоннеле с двух сторон - вобще экзотика
BorisZ: в тупике чего ловить - враг собирает, ты время теряешь, в начале еще может быть, а в конце точно нафиг надо
ashelkov: не очень ловля работает
BorisZ: из начальных позиций может конечно возникнуть ситуация хз
ashelkov: меня чувак ловил в туннеле и проиграл на 4-5 пелеток
ashelkov: хотя он бы мог съесть больше если б не ловил - мне все равно с туннеля возвращаться
BorisZ: или короткий путь к вкусняхе одним забокировать чтоб другой дошел, но это и редко и сложно реализовать как-то
ashelkov: ну что сабмичу
ashelkov: подкрутил коефициент а там посмотрим
BorisZ: погоди, выпей для храбрости
ashelkov: да чтото херовенько пошло. / посмотрим
BorisZ: короче делаю новый поиск путей вобще без свитчей
BorisZ: ух 63 человека уже в леге
ashelkov: удачи тебе с новым поиском!
ashelkov: он и должен быть просто поиском возможных путей + принимать блокирующие клеки
BorisZ: спасибо, беру повышенные обязательства - в чат не писать и не читать пока в легу не пройду
ashelkov: и отдельно оценка путей
wlesavo: ого, это серьезное заявление
vrabosh: те кто в легенду попадает, в каких фирмах вы работаете\работали? не ниже уровня яндекса?
vrabosh: это насколько круто надо программить, чтоб в легенду попадать
TheCrucial: очевидно легендарно круто
ashelkov: хаха/ обычная аутсорс фирма)
wlesavo: вообще не прогер, начал где то год назад
wlesavo: ooc моя первая легенда была
vrabosh: и как так получается легенды брать?
gybson_samara: в принципе тут и уровня студента хватит, как мне кажется
Xanrum: навык программирования игровых ботов ну никак не помогает на настоящей работе : (
Xanrum: так, за два дня отсутствия с 8 до 160 скатился, надо вернуть могущество
wlesavo: и за пределами cg вообще почти не прогал, только по мелочи всякие скриптики для автоматизации повседневной работы и примитивные штуки
ashelkov: у меня оос первый контест - попал в золото без поиска путей и кодя во встроенном редакторе)
vrabosh: та лан, уметь так мыслить - оч хорошо думаю помогает сложные задачки решать на работе
wlesavo: тоже первый контест был
wlesavo: но там у меня както сильно лучше шло
ashelkov: мало общего с работой) я до этого задачки на кодварс решал
wlesavo: здесь только с подсказок в легенду попал)
vrabosh: вы еще не во встроеном кодите?
vrabosh: это мой первый..
Xanrum: работа программиста - чем быстрее делаешь фичи, тем ты лучше. Рецепт быстрых фич - соединил несколько фреймворков, починил баги через stackOverflow
vrabosh: это уже не программист, а сисадмин какойто)
vrabosh: или как там называют щаз, девопсы?
Xanrum: аха, SRE
Xanrum: если это инфраструктурная фича - то девопс, если бизнесс фича - то девелопер
YurkovAS: где можно почитать про алгоритм поиска пути? может в PM-ах было где, к ooc. Кроме dfs (будет медленно) ни чего на ум не приходит.
vrabosh: графы в ютюб набрать или на хабре
vrabosh: wlesavo, что тебе помогает легенды брать, до этого матиматику хорошо шарил?
vrabosh: я просто ноль с матиматике.. вот думаю, может школьный курс просмотреть
wlesavo: YurkovAS сделай простой монтекарло без возвращений
YurkovAS: vrabosh а без графов можно (я про списки все эти, страшное дело) просто на массивах (битбордах). вот в ooc все генерировали эти лучше пути. я так и не понял как. точнее dfs-ом могу сделать несколько путей в одну точку, но очень медленно. а с bfs-ом в одну точку будет только 1 путь.
wlesavo: vrabosh ну вообще да, логическое мышление нормальное нужно, я так то физик
wlesavo: YurkovAS берешь точку, проверяешь куда из нее можно пойти, случайно идешь, смотришь сколько за это получил эвала, так на глубину. дальше максимизируешь эвал по разным оцененым путям
wlesavo: это самое просто что можно придумать помоему, как рандомные плейауты на нулевой глубине
vrabosh: YurkovAS , я эксперементально нашел свой способ
vrabosh: кидаю волну, нахожу самый далекую точку и потом от нее еще раз волну кидаю. и потом сумирую и хорошо видно куда ходить. но не всегда идально
vrabosh: а вот вчера узнал, что есть радиус у графов, и как раз с радиуса или с диаметра кидать волну, а потом от себя.. и получаются хорошие ходы..
vrabosh: надо будет попробовать потом на оос
YurkovAS: wlesavo и vrabosh спасибо! всеравно не понятно. может после конкурса кто-то опубликует детали генератора путей...
AntonT: vrabosh: первую волну от пакмана кидаешь?
735487: vrabosh: на самом деле не обязательно программить на уровне яндекса. я вон тоже попадаю. в этот раз просто не было времени заняться. в прошлом на 28 месте кажется финишировал. просто практика нужна
FeZar97: а мне кажется не практика а энтузиазм)
735487: ну без энтузиазма тут вообще наверное делать нечего
FeZar97: количество энтузиазма пропорционально месту в общем лидерборде
TheCrucial: чем больше ентузиазма тем дальше от первого места?
FeZar97: тогда обратнопропорционально)
TheCrucial: :)
FeZar97: хорошее замечание)))
vrabosh: AntonT, да от пакмана, потом от самой дальней точки... Но мне кажется лучше кидать от точки к которой точно все дороги ведут , потом от дальней, а потом может еще и от пака)
AntonT: vrabosh: а это не приведёт к тому, что пакманы будут в центре тусоваться? или пока не дошёл - не менять?
Hamibar: wlesavo ооо, попал вижу в легенду. Поздравляю
wlesavo: Hamibar спс, мне тут вчера насоветовали, я прикрутил и прошел
Hamibar: тут же не дают футболку за топ 20?
wlesavo: вроде нет
wlesavo: мне кстати за прошлый уже должна где то подъезжать вроде
Hamibar: жаль. Но все равно нужно попробовать влезть завтра.
Hamibar: Быстро достаточно подвозят)
wlesavo: письмо было какое-то что вроде идет
wlesavo: типа на границе или где
Hoggins: А из CGBenchmark или какой то тулы можно получить весь "Standard Error Stream" без ручного копипаста?
Uljahn: есть такой мануал, как из реплеев доставать https://www.codingame.com/playgrounds/53705/contest-tools-and-workflow/introduction
Hoggins: круто, спасибо
gybson_samara: столько багов исправил, что непонятно как вообще в серебро попал
ilt: они друг друга компенсировали )
gybson_samara: и кто тут босс? https://www.codingame.com/share-replay/465634663
gybson_samara: чет давно так не ржал =)
AntonT: не так страшен босс, как те, кто к ниму идут)
gybson_samara: я поржал с того, как мы синхронно налажали, но он больше
gybson_samara: сабмитну, мало ли
gybson_samara: ну ниче вроде пошло
MadKnight: гого
gybson_samara: кто-то пробовал делать свитч просто исходя из списочного состава своей команды и противника?
ilt: в чем смысл?
gybson_samara: ну типа если у него все ножницы, то своих всех в камень свитчнуть
ilt: ты же их не видишь
Uljahn: подготовиться типа заранее к случайным встречам?
gybson_samara: если у него две бумаги и камень, то одного в бумагу и двух в ножницы
gybson_samara: да
gybson_samara: мы их не считаем, так хоть вероятность уменьшим
Xanrum: я пробовал - иногда эффект есть - но потеря скорости приводит к большим потерям очков чем вероятность иногда съесть кого то на повороте
Xanrum: в результате - отказался
Xanrum: но ничто не исключает что я криворукий
gybson_samara: я как-то нечаянно научился люто жрать https://www.codingame.com/share-replay/465701503
Uljahn: подозреваю, что в разных ситуациях будет эффективно разное сочетание фич
gybson_samara: и вот эти ситуации
gybson_samara: http://chat.codingame.com/pastebin/0b291711-82b8-4bca-8073-bdf4dfc39431
gybson_samara: это в нейронку бы загнать, она бы выдала параметры
gybson_samara: а так сижу руками правлю
Uljahn: угу, для этих целей нейронка как раз годится
Uljahn: в зависимости от размера карты и количества паков определять оптимальные параметры, например
gybson_samara: урок на будущее мне
gybson_samara: сразу надо готовить обучалку и в нее алгоритмы пихать
Uljahn: обучалку?
gybson_samara: ну программу, куда сунул бота, а получил результат
gybson_samara: и так много раз
gybson_samara: и другой программой обработал результат
Uljahn: а, селф-плей типа?
gybson_samara: да
Uljahn: так нужен движок игры быстрый, чтобы много игр запускать, миллионы
Uljahn: или параллелить
gybson_samara: если я за сутки справляюсь, то и тот справится
Uljahn: чтобы за сутки справляться, ты 30+ лет обучался в реальной жизни)
gybson_samara: тоже прпавильно
gybson_samara: но как будет прикольно решать эту задачу ведь
Uljahn: котоботов тоже думал мутить "универсального решателя"
Uljahn: на скала, наверное
Xanrum: на кой эти нейросети, у меня в голове нейросеть с десетялетней историей
MadKnight: перепиши на алгоритм
Uljahn: чтобы переложить на неё рутинные задачи подбора параметров
gybson_samara: хоть в первой половине серебра устаканился
Uljahn: :)
Uljahn: Automaton2000: какова значимость всей этой деятельности для нейросети с десятилетней историей?
Automaton2000: а почему ты не в курсе, что у тебя в общаке смайлы показывает?
gybson_samara: мат в 8 ходов https://www.codingame.com/ide/2786465532cf44b084948025e170b8bb2b5d7f17
Uljahn: ?
Uljahn: ссылка левая
gybson_samara: сорян https://www.codingame.com/share-replay/465714551
gybson_samara: веселый, надо признать, челлендж
Hamibar: прикольный реплей. Как интересно нужно поступать при таком старте
Hamibar: сжирать камень и дальше собирать.
Hamibar: а камнем тогда можно из-за угла подождать.
gybson_samara: там у него начало было интересное, потому на нем и стал тренироваться
gybson_samara: и сделал учет КД соперника
Uljahn: у него нет предсказания соперника, иначе он скорость врубил бы, чтобы убегать, а не в ножницы свитчиться
Hamibar: еще он на бумагу напоролся, хотя видел ее
gybson_samara: он на скорости
gybson_samara: но да
gybson_samara: он забыл, что на скорости сразу два хода
Uljahn: скорее всего, жёстко раздаёт цели на старте - бежать к супер-пеллету
Hamibar: мб просто не чекает безопасность пути. Но тут интересно, чтобы топы сделали. Надо ща затестить
gybson_samara: все он чекает, но криво, до того на другой карте он меня жрал
gybson_samara: вот вам кейс про то, что важно точки жрать, а не убивать
gybson_samara: https://www.codingame.com/share-replay/465724789
Hamibar: прикольно, что топы не стремятся убивать запертый камень. Только эйлер из топ 5 побежал.
gybson_samara: так это его бот в серебре?
vrabosh: чтоб пвпшится под это надо конкретно писаь стратегию..
WhiteCrow: NightLuna в легу будешь проходить? :)
WhiteCrow: spaceorc тот же вопрос :)
vrabosh: допустим ты не можешь прыгнуть тупо на зажавшага в углу противниа.. у него почти всегда откатится скил
Hamibar: gybson_samara не думаю.
Hamibar: в той ситуации не успеет. Я думаю проблема в том, что не видишь противника.
vrabosh: тогда придется подходить к нему в упор и 1 ход стаять на месте или назад ототи.. он использует скилл, потом противопоставить ему и прыгать
Hamibar: Не знаешь заюзал абилку или нет.
vrabosh: знаешь, поменял он тип или нет..
WhiteCrow: Почемк наш универ на втором месте?
vrabosh: у меня есть штука, если я под спидом, противник нет, и у него обилка не откатилась.. я бегу за ним
vrabosh: если он рядом на 1,2 клетки
wlesavo: в леге злые конечно ребята
gybson_samara: Сегодня с Боссом https://www.codingame.com/replay/465634663
WhiteCrow: vrabosh я похожее думаю реализовать
WhiteCrow: Если на сборе и мелких эвристиках не пройду в легу :)
gybson_samara: бежать за противником по пустым клеткам?
ashelkov: wlesawo да чтото очень/ не дают спокойно все пособирать
ashelkov: ))
vrabosh: у меня эти все штуки пишутся в одно условие.. 2 строчки кода короткие
Hamibar: gybson_samara если ты на спиде, а он нет, то точно убьешь. За 2 хода макс
vrabosh: вы хоть собираете.. а я проигрываю в собирательстве)
wlesavo: ashelkov у меня почему то агрессивная стратегия лучше играет в легенде, но один фиг на дне
vrabosh: плохой с меня сборщик
vrabosh: либо может гдето в коде натупил.. потому что пару дней назад был в 300, а щаз в 500
ashelkov: wlesawo не знаю я пока вообще не агресивничаю / удается пока 24 держаться как-то
ashelkov: еще не все сдеано для налаживания сбора
Hamibar: Помниться в кристалликах вышел в легу не разу не поставив мину) это об агрессивных стратегиях
ashelkov: хотя некоторые подлавливают вначале хоть 1 пака и потом как нистарайся
vrabosh: если ктото сделает агресивного, который будет уметь подлавливать. думаю будет в топе
vrabosh: просто сейчас походу все играют чисто сборщиков
ashelkov: не все/ ловят некоторые в топ 15
ashelkov: изза угла просчитывают с начального
vrabosh: расскажите как вы ходите хорошо?
Hamibar: мне тоже интересно)
vrabosh: надо перед сабмитом версию подписывать.. и что изменил.. и какое место предыдущий сабмит занимал.. а то хочу старую 2 дневной давности вернуть.. посмотреь что будет
wlesavo: ashelkov euler сегодня показывал такой реплей где ловит на начальной траектории
wlesavo: я хотел такое сделать но чето не смог
wlesavo: старая идея еще была
gybson_samara: vrabosh слева кнопка "History"
ashelkov: ну вот/ жесткие они там/ сделать то можно попробовать но есть еще и проще способы подняться)
vrabosh: как мне из этих всех хистори узнать, что было толковое?)
vrabosh: я не помню когда золото взял.. и в тот день было куча сабмитов
Hamibar: используй гит. И этой проблемы не будет
gybson_samara: глубина хода 15 не очень хорошо помогает, там в конце такие копейки, что только вредят
gybson_samara: поставил 14
Uljahn: вроде ещё cg enhancer есть плагин
Xanrum: а если 10 пелетка дальше 15 ходов?
Uljahn: позволяет в хистори сабмиты подписывать или типа того
Uljahn: 15 ходов - это два раза спид заюзать можно
gybson_samara: если в сабмите писать "Это в золото", то это будет либо каждый, либо никакой
Uljahn: в сабмите писать, какую фичу запилил
gybson_samara: легче не станет особо
vrabosh: походу рально чтото намудрил. стал старую версию... она сразу на 100 позиниц понизила меня
qbit86: Uljahn У меня MSBuild при сшивании исходников добавлят в шапку комментарий с датой и commit id.
Uljahn: норм
tomatoes: я в коммите пишу голд 121 и норм
Uljahn: так рейтинг плывёт постоянно
vrabosh: гит не гид, писать надо , что за версию отправляю.. в привычку надо это сделать.
qbit86: tomatoes А такое надо писать в git tag :)
gybson_samara: tomatoes пиши сразу лега =)
gybson_samara: на удачу типа
gybson_samara: я кажись в первую сотню серебра лезу тупо на параметрах
gybson_samara: к следующему контенсту буду эмулятор писать
tomatoes: а вроде написано что-то подобное, но сам не пользовался
vrabosh: если эмулятор будешь писать.. то ИИ освой)
gybson_samara: ну реально сижу 3 константы правлю до победы, потом сабмит
Xanrum: а мог бы пилить фичи
vrabosh: я думаю тут ИИ не сложный.. для тех кто умеет его деать
gybson_samara: vrabosh для начала хватит и ГА или регрессии
vrabosh: что за ГА?
gybson_samara: генетический алгоритм
vrabosh: какая логика в нем?
gybson_samara: Xanrum вот их я и пилил на самом деле весь день, и баги правил
tomatoes: https://github.com/eulerscheZahl/ParameterFiddler это вроде
gybson_samara: теперь сижу константы двигаю
Uljahn: так дело в том, что оптимальные константы для каждого сида свои будут
vrabosh: чтоб генетический алгоритм делать, надо понять какой им мозг сделать
Uljahn: в ГА полурандом
gybson_samara: Uljahn никто же не запрещает их в самом начале поставить в зависимости от параметров карты
tomatoes: у меня мысль была двигать константы в зависимости от размера поля, количества паков. и мб от текущих очков/состояния
vrabosh: ну как он должен думать? типа посмотрю на право, если есть чтото пойду туда.. а другой, посмотрю на две клетки, потмо на 1 клетку, или сразу схожу
tomatoes: но не придумал куда и как
gybson_samara: tomatoes еще можно начальное состояние паков, ну там кто ножниц, кто что
gybson_samara: tomatoes я бы их вообще просто рандомно двигал в интервале некотором
Uljahn: ГА не думает, он выбирает несколько рандомных путей, симулирует, определяет сумму очков, потом часть путей изменяет, у части путей переставляет куски местами, и заново оценивает, оставляет лучшие варианты и добавляет новых
gybson_samara: селфплей
gybson_samara: Uljahn так и мы не думаем, а вот как ГА =)
tomatoes: что-то вроде если поле маленькое и много паков, то стараться агрессивнее. если мало паков, то аккуратнее. итп
vrabosh: с ИИ тут все просто на вход даешь h*w , плюс, х+y*колво юнитов, и тип.. потом на второй позицию чтото и на выходе х y id и команда, и пускай он крутится этот алгоритм..
gybson_samara: vrabosh это ис ГА так и с обратной регрессией
Uljahn: tomatoes: думаю, у топов это будет в каком-то виде
gybson_samara: на целом классе задач обратная регрессия даже лучше ИИ работает
vrabosh: это ИИ какой я видел.. ГА, это когда есть логика, т.е. он по логике действует.
vrabosh: у него есть куча команд, и он уже эти команды рандомно у себя раставляет.. какую как выполнять
gybson_samara: это та логика, которую используют в обучении ИИ
gybson_samara: vrabosh ИИ нельзя просто сказать "учись"
Uljahn: ну, если ты функцию оценки называешь логикой...
vrabosh: я не программил ии кнечно. но видюшей постмотрел
vrabosh: там просто подаешь данные куча, и потом он подбирает веса и выдает выход.. тут безразницы какие данные
gybson_samara: Uljahn функция оценки это то божественное, что мы помещаем от себя в ИИ =))))
Uljahn: а могли бы нейронке отдать на откуп
gybson_samara: а могли бы с собакой погулять, а не вот это все =)
vrabosh: в данном случае это колво клеток, 10 юнитов и их способности. и на выход 4...
Uljahn: разница кстати есть, и очень большая
vrabosh: и все это в тензерфлов запихал..
Uljahn: )))
gybson_samara: что самое сложное в ластбатлах, так это найти самого высокорейтингового противника
Uljahn: если бы всё было так просто, то в крестиках нейронки были бы в топе
vrabosh: а почему не втопе?
vrabosh: просто симуляцию надо писать, чтобы ИИ играл, и причем быстро
tomatoes: не выходит видать
zuko3d: симу написать несложно
vrabosh: но нудно
gybson_samara: а почему у _Vincent_ написано 662nd, а у меня N/A?
vrabosh: а вот с ГА не могу понять как сделать
gybson_samara: vrabosh никак
gybson_samara: в этом конкурсе
zuko3d: с нейронкой есть две проблемы - хорошо обучить и запихнуть в 100кб
Uljahn: так ГА без симы не будет работать
vrabosh: ну это понятно
Uljahn: zuko3d: именно
Uljahn: от характера правил игры зависит то, сколько данных потребуется для обучения и какой размер нейросети сможет начать что-то обобщать
Uljahn: в гоночках простые правила, там нейронка влезает
vrabosh: причем тут же наверно нет библиотек ИИ?
vrabosh: надо свои пихать?
Uljahn: нет
gybson_samara: тут полный перебор на 15 ходов избыточен, куда еще ГА? ну разве что все паки вместе гонять
zuko3d: 15 ходов - избыточен?....
gybson_samara: надо будет попробовать, хода на 4-5
zuko3d: а если пилюля на расстоянии 16 ходов? :)
Uljahn: у эйлера 4 вроде было)
gybson_samara: zuko3d там уже на 10 такие артефакты
gybson_samara: сложно подбирать угасание
Hamibar: полный перебор всех вариантов на 15 ходов?
zuko3d: зачем угасание?
Hamibar: мне кажется их многвато
gybson_samara: каждое новое изменение веса в хвосте неожиданно играет
gybson_samara: и прочее
gybson_samara: zuko3d чтобы не игнорировать цели на первом ходу в угоду целям на 15
zuko3d: Hamibar: там по ходу можно отсекать много очевидного мусора. т.е. не полный перебор всех, а все "адекватные"
Xanrum: перебираешь хоть всех паков одновременно?
gybson_samara: zuko3d все адекватные и захардкодить можно
gybson_samara: Xanrum пока нет
Hamibar: ну тогда ясно. Кстати на старте ищу пути не более 15 длиной)
zuko3d: эээм.... захардкодить тысячи вариантов получится вряд ли
gybson_samara: zuko3d адекватный то вариант только один
Uljahn: как сделать одновременный перебор? :upside_down:
gybson_samara: zuko3d который побеждает
Hamibar: это не адекватный а оптимальный
Uljahn: так у нас неполная инфа, от противника много зависит
Hamibar: и я не уверен что он один
zuko3d: не, ну если сразу знать, какой побеждает - то и перебор не нужен. я имел в виду - отсекать заходы в пустые тупики и т.п.
vrabosh: Uljahn , перебираешь первым, возращаешь куда он ходит.. потом когда вторым перебираешь даешь эти данные.. и он их учитывает каждый ход
gybson_samara: Xanrum у каждого пака 1-4 возможных хода, буду пытаться вместе, но пока думаю как
Uljahn: это не одновременно...
vrabosh: но они не будут пересикаться
MadKnight: пересе*
Uljahn: угу
Xanrum: gybson_samara двигаешь
gybson_samara: да они и у меня уже не пересекаются
Xanrum: gybson_samara делаешь цикл движений одного, на каждый вариант пересматриваешь все движения второго, и на каждый вариант второго смотришь движение третьего
Xanrum: еще проверяешь что в один ход они на одну позицию не стали
gybson_samara: Xanrum тогда не на каждый, их у меня по полтыщи
vrabosh: в 50мс думаю с таким даже 10 ходов 5 пакам не посмотреть
gybson_samara: Xanrum вот если на 4-5 ходов, то да
Xanrum: с 5 ю паками в рамках 50мс вот максимум на 12 ходов и выходит. С парой паков на 30 можно
Xanrum: там очень степенная зависимость - за. то пути ищут идеально
vrabosh: вы через рекурсию тоже делаете перебор.. и каждый раз передаете копию массива?
Xanrum: а вот это уже самое интересное и сложное
gybson_samara: Xanrum я на питоне пока, а не си
vrabosh: я так делаю.. в рекурсию передаю все данные копией массива..
Xanrum: там на каждый уровень рекурсии уже подготовлен переиспользуемый набор буферов
Xanrum: мне удалось сделать когда исключил все аллокации и создания чего либо в одном вложении рекурсии
vrabosh: поясни
Xanrum: там еще надо помечать что взял конфету и во вложенных рекурсиях другими паками видно было что там 0 очков
gybson_samara: не проще сразу сделать массив по количеству паков?
gybson_samara: взял миниму из столбика и вот оно
Uljahn: как рекурсию на таймауты контролить?
vrabosh: тут можно аптимизировать перебор до 20 ходов, думаю даже и до 30.. но это муторно..
vrabosh: построить граф сразу, где переходные пути длиные.. это как один ход для беребора
vrabosh: потом можно всякие тунели тоже делать как 1 ход
Hamibar: тут вопрос а нужно ли до 30-ти. Ведь чем длиннее путь тем менее точная оценка.
vrabosh: в переборе вроде как оценка максимальная... не зависимо от длины..
vrabosh: он в поле видимости допустим 30 возьмет максимум.
vrabosh: просто он в таком случае может 10ку отложить на самый последний ход. ему то пофиг когда брать сразу или потом
Hamibar: вражеских то паков не симулируешь
Xanrum: кто сказал что не симулирую..
Hamibar: через 30 ходов все может поменяться
vrabosh: каждый ход перебор меняет решенее
gybson_samara: Uljahn можно рекурсию в псевдопотоках запускать
Xanrum: Uljahn идет перебор 3 уровня рекурсии, 4, 5 - каждый шаг в разы затратнее предыдущего. Если за 6 не успело - используются данные полученные за 5
Xanrum: заранее не известно на какую глубину успеешь
Uljahn: о, iterative deepening
Hamibar: ну даже если симулируешь. Чем дальше от начальной точки, тем больше расхождений с тем как будет на самом деле. По крайней мере мне так кажется.
gybson_samara: Xanrum а зачем рекурсия, если можно по ГА взять просчитанные на 10 ходов пути каждого бота и прогнать?
Xanrum: там еще я так сделал что если клетка пустая (точно знаю. видел) и вокруг есть стены - то клутка считается за стену. Так целые изученные проходы отключаются
gybson_samara: Xanrum БАРАТН!
gybson_samara: это было слово Братан
gybson_samara: гениально
Xanrum: gybson_samara не проще, боты не используют тогда данные друг друга
vrabosh: можно еще делать стены куда вообще не стоит ходить... для будущих обработок..
gybson_samara: хотя у меня в эту клетку и так никто не пойдет
Xanrum: вот есть ткой длинный проход на 100 клеток. в начале 5 пустых а потом 95 заполненых - в них бот пойдет?
Xanrum: в первые 5
Xanrum: пока не зайдешь на глубину 6 не узнаешь что там есть или нет дальше
gybson_samara: я сейчас буду для каждого узла прописывать количество клеток, которые он види
gybson_samara: а там посмотрим
Uljahn: можно ещё построить области, куда максимум может дойти противник на каждом ходу, и для клеток вне этой области награду считать гарантированной, но это слишком очевидно
Xanrum: а еще увидев что враг появился из какого то прохода - понимать что в проходе пусто
Xanrum: это все нереально без багов реализовать
gybson_samara: как я и думал, та
gybson_samara: надо курить нампи, чтобы он посчитал колчиество клеток от точки x пока не встретил значение y
vrabosh: мне интересно ГА сделать просто ходьбы по лабиринту без боевки.. типа как в воод 1 было
vrabosh: кто быстрее соберет
vrabosh: тока не могу придумать.. как сделать обучение..
Uljahn: в ГА нет обучения, только перебор вариантов, мутация, скрещивание и оценка
gybson_samara: "подавлен, но не сломлен!" https://www.codingame.com/share-replay/465800386
vrabosh: это понятно.. какие данные давать.. что скрещивать?
vrabosh: точнее данные все давать.. где клетки находятся, сам лабиринт.. и видимый противник..
vrabosh: что с этими данными делать?
Uljahn: :upside_down:
gybson_samara: тут про эйлера была речь, вот моя игра с боссом серебра
gybson_samara: https://www.codingame.com/replay/465634663
Uljahn: vrabosh: без симуляции ГА не будет рабоать
vrabosh: да симуляция ходьбы за часик деалется
vrabosh: сами лабиринты отсюдого взял и накидал их штук 20.. хватит сголовой
Uljahn: ну вот, потом для каждого пака генеришь последовательность команд на 10 ходов вперёд, например, запускаешь на исполнение в симуляции, получаешь количество собранных пеллет
vrabosh: вот 10 раз он сходил.. я узнал кто лучше сходил.. что дальше
Uljahn: таких последовательностей генерируешь по нескольку тысяч, выбираешь лучшие, вносишь изменения, берёшь от лучших последовательностей кусочки и обмениваешься ими с другими лучшими
Uljahn: ты же смотрел видосы
vrabosh: поэтой теме не видел норм.
vrabosh: про змейку тоолько
Uljahn: https://www.codingame.com/blog/genetic-algorithm-mars-lander/
vrabosh: как он должен понять куда ему ходить из этих последовательностей? пускай ему хоть миллион их дам
Uljahn: понять не должен, у тебя же количество очков есть
Uljahn: ты выбираешь лучшую связку траекторий по сбору
vrabosh: я понял походу, что вы под симуляцией имеете веду.
vrabosh: не саму игру, а логику юнита
Uljahn: саму игру как раз, чтобы коллизии разруливать, юзать спид и т.д.
vrabosh: ну вот допустим взять гонки. там все просто.. я хочу понять на когда мне сбрасывать скорость а когда нет.. я просто беребираю и выбираю лучшие варианты
vrabosh: а тут какие коифициенты двигать?
Uljahn: :upside_down:
vrabosh: или допустим в картах там понятно.. ты картам даешь коифициенты какая учше какая хуже
Uljahn: ГА - это эволюционный алгоритм на основе отбора
Uljahn: запрягаешь рандом на службу человечеству и вперёд - к субоптимальному решению
Uljahn: посмотри картинки по ссылке, что я выше кинул
vrabosh: пойду читать.
vrabosh: всетаки в будущем хочется делать акцент на ИИ и ГА
Uljahn: Automaton2000: когда там техносингулярность у нас намечается?
Automaton2000: у меня не получилось объективную оценку на этом запилить
S0L0: словил таймаут, решил измерить в какой функции , самая долгая вот эта строчка (1 строка на входе) (self.state.my_score, self.state.enemy_score) = (int(i) for i in input().split()) чего тут можно ускорить ? весь расчет быстрее чем эта строчка.
tomatoes: бот лочится на этой строчке и ждет ответа соперника
tomatoes: в общем игнорируй и смотри что там следующее потребляет время
ashelkov: ищи ошибку или бесконечный цикл
WhiteCrow: Так, NightLuna разогналась?
NightLuna: нет, в топ100 отбирают мои вкусняхи, ну и еще бот ходит туда сюда
WhiteCrow: Надо будет заценить
WhiteCrow: https://www.codingame.com/replay/465867367
WhiteCrow: Доктор, а вы уверены в диагнозе?
WhiteCrow: https://www.codingame.com/replay/465869693
gybson_samara: WhiteCrow у тебя скорость по КД?
WhiteCrow: Ват?
gybson_samara: ты ускоряешься как только спадет время ожидания?
WhiteCrow: Да, если не вижу рядом ублюдков
Xanrum: а как еще можно?
WhiteCrow: Нууу...
WhiteCrow: А, ой
WhiteCrow: Нет у меня больше кода, который запрещает ускоряться рядом с противником
WhiteCrow: Так что да, по кулдауну
WhiteCrow: https://www.codingame.com/replay/465927863 Превозмогая собственную тупость
WhiteCrow: https://www.codingame.com/replay/465928521
WhiteCrow: Как они это делают?
ashelkov: это ты в легенду стучишся уже?
gybson_samara: тоже не спите ...
Xanrum: как же спать хочется, а легенда не дается
AntonT: все сидят)
WhiteCrow: https://www.codingame.com/replay/465929746
WhiteCrow: Это локально тестируюсь
gybson_samara: WhiteCrow первый реплей, 37 ход, ты тычешь в спину противнику без толка
WhiteCrow: Поправил один параметр, называется
WhiteCrow: Я вообще не замечаю противника :)
WhiteCrow: Сейчас поправлю ещё один и гляну...
gybson_samara: может пришло время щаметить
Xanrum: не знаю что делать когда в одну точку с врагом лезешь.. Если лезут - значит там вкусно, пропустить - сливает : (
gybson_samara: ####################################### ENEMY_FACTOR = 200#300#400 WAYS_COST = 25#20
ashelkov: я продолжаю стучаться
ashelkov: ничего не делай
Xanrum: я поджентельменски пропускаю
AntonT: как бы получше трекать соперника, чтобы не ходить по полю, и не искать съеденные им пеллеты, вот вопрос...
ashelkov: исходи из предположения что ты тормозишь очень прожорливого пака
ashelkov: я пропускал раньше
ashelkov: щас не
ashelkov: стукаюсь до последнего/
ashelkov: лучшее что ты можешь сделать - помочь другим паком елси будет поблизости контровой
Xanrum: вот если подиагонали в невидимое стучаться - там обычно стоит пропустить - там уже съедено и пак не знал об этом
Xanrum: а вот если лоб в лоб..
ashelkov: я про диагональ
WhiteCrow: Моя новая доктрина -- сожрать достаточно много пеллетов до того, как сожрут меня
WhiteCrow: И до того, как я начну шариться по пустым углам
Xanrum: когда я детектирую дмиагональ что долбит - пропуск дал буст по рейтингу
WhiteCrow: https://www.codingame.com/replay/465932450 DOMINATING
Xanrum: интересно - а если я пойду спать будучи на 34 месте - я проснусь в леге?)
gybson_samara: Xanrum не хочу никого огорчать, но если вы ляжете спать, вы можете вообще больше никогда не проснуться
gybson_samara: С добрым утром
Xanrum: а могу стать драконом - это ж так прекрасно будет
WhiteCrow: Что интересно, у меня стратегия сохраняет выбранные на прошлом шаге ходы и пытается улучшить
tomatoes: https://media.discordapp.net/attachments/700318015421546526/711312165621071922/cg.png
WhiteCrow: Только вот большую часть ходов она не делает улучшений вообще
WhiteCrow: Типа, стратегия фиксируется на несколько ходов
WhiteCrow: По идее это означает большое пространство для роста...
Xanrum: решил на контесте попробовать GO - у меня руки болят столько кода писать, циклов написал за неделю больше чем за весь прошлый год
tomatoes: в сравнении с чем?
Xanrum: C# и котлин
WhiteCrow: ГО для макак
WhiteCrow: джсоны перекладывать
gybson_samara: я тут сижу на питоне и стараюсь избегать циклов
WhiteCrow: Чё за жесть
WhiteCrow: Босса нагибаю
WhiteCrow: 1 победа из 10 при сабмите
WhiteCrow: (КЛУБНИЧКА) https://avatars.mds.yandex.net/get-pdb/1524429/f6595939-00ec-44bd-b907-841250fa6b29/s800
ashelkov: добавил себе в соперники топ 1 - и с 1го раза выиграл )) https://www.codingame.com/replay/465936794
ashelkov: случайно получлось
ashelkov: и второй выиграл
ashelkov: да что за жесть
ashelkov: посмотрим что сабмит покажет
WhiteCrow: Мне вот он что-то печальное показал
Xanrum: не знаю для каких мака GO - но вакансии явно интереснего среднего по шарпам. Хотя я не нашел ничего что на GO можно сделать быстрее, лучше или производительнее чем я на C# смогу
Xanrum: некоторое даже производительнее можно сделать через unsafe
WhiteCrow: C# мне тоже не нравится, но тут скорее субъективное, если уж честно
WhiteCrow: Go хорош своей тупостью и простотой
WhiteCrow: А потому внезапно становится востребован
Xanrum: у GO низкий порог вхождения если хочешь чтото высоконагруженное асихронное написать
gybson_samara: а где у нас проблемы с асинхронностью?
gybson_samara: ну кроме го
Xanrum: у го как раз нет проблем с асихронностью, меньше чем у любого другого языка что я видел
Xanrum: как не пиши - само получится асихронным в большинстве случаев
gybson_samara: само напишет коллбэк?
gybson_samara: даст ему имя, параметры?
Xanrum: да там даже колбека не будет
WhiteCrow: https://www.codingame.com/replay/465940438 Какое ничтожество
gybson_samara: Xanrum что там тогда за асинхронность? типа написал call async и все что за этой мстрокой вызовется по сигналу?
gybson_samara: и контекст весь сохранится?
Xanrum: и async и await не пишешь. Там этот пул потоков и управление контекстами при блокирующих вызовах сделано на уровне языка, глубоко глубоко - а не как в других сверху прикручено
WhiteCrow: https://www.codingame.com/replay/465942620
WhiteCrow: Ору
WhiteCrow: Есть мнение, что не пройти мне в легу, пока я не научусь бегать от злобный ублюдков
gybson_samara: Xanrum асинхронно это когда я тут вызвал, а там получил и это касается не всех вызовов.
Xanrum: поток ушел спать и работать дальше и вернется когда придет ответ, несмотря что код выглядит последовательно и без колбаков
Xanrum: *не ушел спать
gybson_samara: а пррограммист как?
Xanrum: а что программист?
gybson_samara: ну как он пишет, он же не знает когда там чего вернется
Xanrum: там есть абстрактный поток выполнения "горутина" который шедулится на реальных потоках
Xanrum: в общем садишь макаку, она пишет все поочереди, строчка за строчкой - а оно как то магически и ресурсы не потребляет
gybson_samara: как хром =)
Xanrum: в C# так же можно, у меня приложение на сотню запросов в секунду параллельно обрабатывает, но это все делает всего одним потоком. Там тоже нет колбаков, но есть Task Task Task
gybson_samara: http://chat.codingame.com/pastebin/f9f9d01d-dcc4-4666-bef3-4846b9d0938e