Chat:Ru/2020-09-15
ConstantBolzmann: иду на варфронт, давай оплачивай подписку гогого за орду!)
gsomix: Доброе утро.
MadKnight: hihi gsomix
MadKnight: чё пилишь?
gsomix: Пощади, я только на работу пришел. :)
gsomix: MadKnight не дает расслабиться.
MadKnight: да ты уже 12 минут как на работе
MadKnight: вполне можно было отдышаться и начать чёнить пилить
MelnikovIgor: gsomix о, ты на фшарпике пишешь, норм)
Chebyrek: Парни как юзнуть буст?
Uljahn: в гоночках?
Uljahn: пиши строку BOOST в вывод
Uljahn: вместо ускорения
Uljahn: или ты про с++ библиотеку спрашиваешь? :thinking:
gsomix: MelnikovIgor, да, но я на нем пишу в стиле "as a Better Python". :)
tutubalin: а он же пошустрее питона?
MelnikovIgor: Ну, зависит, .net надо смотреть
MelnikovIgor: Я в крестиках на шарпике на 25 месте
MelnikovIgor: В каких то контестах питона больше в топе
MelnikovIgor: В .net можно неуправляемым кодом и указателями
пользовтаься, почти как в плюсах, в питоне так можно?
MelnikovIgor: Я просто не знаю
Uljahn: неуправляемый - это без GC?
MelnikovIgor: Да
MadKnight: напрямую указатели как в с++ крч
MelnikovIgor: И да и нет, можно работать с указателями, но так чтобы GC знал об аллокации (фиксировал обьект в памяти), а можно работать с указателями так чтобы гц не знал ничего об аллокации
MelnikovIgor: Тогда обьект будет создан в неуправляемом блоке памяти, куда гц не дотянется и не потерет ничего
Uljahn: но тогда и утечки возможны?
MadKnight: Uljahn не, они просто берут manageable объект и берут на него указатель
depthzer0: добавил в гоночках упреждение - 18 й... ну теперь надо интеллект как-то подключать...
depthzer0: наверное ))
MadKnight: depthzer0 и какие идеи?)
depthzer0: ну с ГА наверное начну... но тут уже сима нужна, если я всё правильно про ГА понимаю
MadKnight: лучше с попроще начинай
depthzer0: например?
MadKnight: ну смотри
MadKnight: как ты понимаешь ГА ?
depthzer0: как эвристический алгоритм поиска ))
MadKnight: ну давай его разберём
depthzer0: мутация, скрещивание, селекция
MadKnight: он генерит поколение случайных солюшенов, оценивает их
depthzer0: и снова генерит, и снова...
MelnikovIgor: Uljahn утечки возможны, все операции с указателями выполняются только при включении флага unsafe
depthzer0: пока не получится из г конфетка ))
735487: а я в search race на 4 очка всего отстаю от 8 места и никак не нарандомлю ))
depthzer0: просто не знаю, что может быть попроще ГА.... пока не очень много алгоритмов знаю...
Uljahn: depthzer0: проще только просто рандомить особей и оценивать, без скрещивания
735487: SA проще
Uljahn: ага, в SA величина мутаций управляемая
MelnikovIgor: SA?
Uljahn: simulated annealing
Uljahn: метод имитации отжига
MelnikovIgor: Это какой то конкретный алгоритм? Это же общее название?
735487: там вроде от температуры не величина мутаций управляется а допустимость выбора лучшего решения
depthzer0: https://habr.com/ru/post/112189/
MelnikovIgor: Так, эта штука подойдет же для генерации весов нейронки?)
MelnikovIgor: Или вы на прямую пути в гоночках считаете с помощью GA/SA
MadKnight: depthzer0, короче, GA генерит случайные, потом пытается их улучшать
MelnikovIgor: MadKnight я так понял он улучшает не все параметры за ша, а по одному и на дельту, которая зависит от температуры?
magaiti: на случайную величину, пропорциональную дельте
MadKnight: MelnikovIgor но это всё - микроулучшения
MadKnight: достаточно просто нагенерить 10 000 случайных солюшенов и заюзать лучшее
ConstantBolzmann: а что вы в гоночках генерируете?
ConstantBolzmann: можя ща вкурю в этот алгоритм
depthzer0: я генерирую координаты точки, куда ехать
ConstantBolzmann: генерация происходит после первого круга или что означает генерация в гоночках
ConstantBolzmann: ты после первого круга генерируешь?
depthzer0: не, сразу начинаю
ConstantBolzmann: генерируешь тоесть ты из всего сегмента вычленяешь типо лучшую точку, тоесть нагенерил сегмент и выбрал лучшую чтоли?
Uljahn: лучше наверное не точки генерить, а наборы углов поворота и ускорений
depthzer0: ConstantBolzmann не, я генерю пока чисто тригонометрически - одна точка получается за раз
depthzer0: Uljahn я имею в виду конечный результат, т.к. интерфейс понимает только координаты и ускорение
ConstantBolzmann: тоесть я попытаюсь конкретизировать получается задача такова надо написать такую программу которая ведет статистику лучших ходов
ConstantBolzmann: неважно каких шахматы и прочее типо важно лучшие ходы находить из генерации множества типо по какомуто эталону так чтоли?
735487: depthzer0: лучше генерировать угол от -18 до 18 и скорость
depthzer0: я так понимаю, что не столько ведёт, сколько делает лучшие ходы, выходит в легу, побеждает Мэда, побеждает рекурса, всех побеждает
735487: причем генерить так чтобы 200 скорость и углы +-18 были чаще
depthzer0: amurushkin учту, спасибо
ConstantBolzmann: ммм получается решение в такой задаче как маска эталонная
ConstantBolzmann: спек
735487: ConstantBolzmann: генерится последовательность ходов. оценивается и лучшая выбирается
ConstantBolzmann: ага
ConstantBolzmann: это получается механика спеков похожа на генерацию по опр параметрам
Uljahn: каждую последовательность надо просимулировать и найти конечный стейт с учётом всех посещённых чекпоинтов, которая оказалась дальше по трассе - та и лучшая (в простейшем случае)
magaiti: крокодил Гена играл в крестики-нолики сам с собой. Проиграл три раза и очень расстроился.
Uljahn: стакан у Гены был наполовину пуст
depthzer0: Кстати, раз уж зашла речь, а как контролировать тайм лимит?
magaiti: я с лимитом намучался, хз как
magaiti: опрашивать время
magaiti: причем я так и не понял, какой из таймеров надо использовать
depthzer0: ну т.е. вот так вот - брать и посматривать на часы - сколько успел - столько насчитал
depthzer0: или есть более хитрые способы?
magaiti: типа того
magaiti: пробуй все варианты какие есть в твоем языке, смотри реплеи, чтоб по таймауту не проигрывать
magaiti: выбери лучший
Uljahn: вроде бы, отсечку времени надо начинать после первого инпута в игровом цикле
Uljahn: *отсчёт
Uljahn: на питоне я юзаю timeit.default_timer, более-менее точно получается
magaiti: ну вот я сделал 70 мсек отсечку, при заявленном таймауте 75, и все равно где-то раз в 500-1000 боев выскакивает таймаут
magaiti: тут уже смотреть надо, что выгоднее - урезать время обсчета дальше или терять счет на таймаутах
MadKnight: > где-то раз в 500-1000 боев выскакивает таймаут ну это уже слишком мало
magaiti: я точно не помню, но вроде частота таймаутов еще от нагрузки сервера зависела
MadKnight: тогда это можно объяснить тем, что ОС отложила твой процесс проги бота в очередь и вернулась только через 5мс
magaiti: ну и смысл тогда вообще
MadKnight: типа твоя прога висела на паузе в очереди аж 5мс
magaiti: у меня 2 года висела отсечка 50 мс, между прочим
magaiti: и ничего
magaiti: чет не вижу пользы от еще 20 мс
MadKnight: зависит от алгоритма ващет
magaiti: видимо сходится раньше
magaiti: выиграл у рисуса. потому что он словил 2 таймаута, лол
magaiti: но чувствую в топ 20 мне с этим алгоритмом уже не ворваться
magaiti: http://cs5.pikabu.ru/post_img/big/2015/12/04/5/1449210847155432089.jpg
735487: я когда то тоже так думал. а потом починил баг в симе. улучшил оценочнку. ускорил немного. и ворвался :)
magaiti: у меня уже были такие моменты
735487: вот в search race бы еще 4 очка выдрать
magaiti: улучшить оценочку - это сложно
magaiti: что за серч рейс
735487: https://www.codingame.com/multiplayer/optimization/search-race
magaiti: а почему она так популярна?
magaiti: это 1 под без врагов?
MelnikovIgor: Простой симулятор для тренировки нейронок
MelnikovIgor: И подготовке к CSB)
magaiti: а
735487: это же оптимизация. кто больше очков наберет
magaiti: ну без коллизий не тру
MelnikovIgor: Там физика как в CSB
MelnikovIgor: кроме коллизиц
magaiti: ясненько-ясненько
magaiti: нейронку было бы забавно заиметь
735487: там и без нейронок есть чем заняться ))
magaiti: ну как - взять PID controller и коэффициенты натренировать нейронкой
magaiti: для начала
magaiti: чет csb перестал бои считать
magaiti: забанил меня штоль
gsomix: Что скажете про Code of Ice and Fire? Интересная игра?
Uljahn: правила не очень сложные, зато и глубины особой нету
gsomix: Спасибо. Я выделил немного свободного времени сегодня. Нужно инвестировать в мульти. :)
Uljahn: основная сложность там - коллизии между юнитами и возможность выстраивать цепочки, покупая несколько юнитов за ход
tutubalin: да не, там разные задачи есть
tutubalin: 1. отрезание юнитов противника
tutubalin: 2. расстановка башен
tutubalin: 3. идеальный в плане экономики захват начальной территории
tutubalin: 4. менеджмент денег: подкопить, чтобы потом победить одним ударом или потратить сейчас, чтобы подорвать экономику противника
BorisZ: да, все правильно описал, бот как бы делится естественным образом на подзадачи
BorisZ: более-менее независимые, можно сначала одно запилить, потом другое
BorisZ: захват начальной территории самое сложное, там какой-то даже был хитрый алгоритм чуть ли не научная работа на эту тему
BorisZ: вроде у эйлера в постмортеме а может не у него
BorisZ: все по-моему так примерно и решали, жадным образом, только у победителя было что-то типа минимакса глуюиной 1
BorisZ: слишком много ветвлений для симы
BorisZ: у меня прям по порядку все проверяется - могу захватить базу - захватываю, враг может захватить - пытаюсь защититься , могу отрезать кусок - режу и так далее
gsomix: BorisZ, порядок жестко прописан, или есть оценка действий?
BorisZ: вроде жестко, там очевидно что база - главное, отрезать кусок почти всегда лучше чем одну клетку
BorisZ: но это у меня так, может у топов и похитрее что-то
BorisZ: она немного несбалансированная была когда контест был, потом вроде чуть скорректировали правила
BorisZ: шахты почти никто не юзал, башня почти всегда выгоднее чем 2 ил 3 лвл солдатик
gsomix: штош
gsomix: Пока портировал Starter kit для поварят с Ocaml на F# — свободное время и закончилось. :)
gsomix: Но зато будет в чего начать в следующий раз.
gsomix: Доброй ночи.
gsomix: Доброе утро? :thinking: