ud1
> Ща чую ты добьешся от них того, что число групп уменьшат. До 5 например.
:)
>http://russianaicup.ru/game/view/31137
если стратегии были запущенны на одинаковых машинах, то тогда получается что твоя стратегия отработала за 1.7 секунды, то есть по 0.408 ms/frame <--- крутая оптимизация.
Adler
> то есть по 0.408 ms/frame <--- крутая оптимизация.
Это что-то нереальное, я вообще ничего не оптимизировал, при этом у меня куча циклов по всем 1000 юнитам.
ud1
> Вот моя оптимизация
я вот с этой стратегией запустил: https://pastebin.com/raw/Yg5PJscZ
![return_std_vector return_std_vector | [Russian AI Cup] CodeWars 2017](https://gamedev.ru/files/images/return_std_vector.png)
ud1
> проверь, насколько стало быстрее:
стало 10 FPS после 500-го кадра, это когда все 99 групп созданы.
а на их версии от 7 до 8 FPS.
на моей от 10 до 11 FPS.
если не считать создание std::vector`а для каждого int`а, то норм.
readVehicleUpdates с https://pastebin.com/raw/Npqqs1m4:
у меня: 0.9 ms/frame
у тебя: 0.7 ms/frame
у них: 5.3 ms/frame
если предположить, что к моменту вызова readVehicleUpdates у тебя уже всё вычитано в ReadBuffer::buf и работа с сетью не ведётся, то тогда 0.7 ms/frame - это то сколько тратиться на бесполезное пересоздание std::vector`ров.
Adler
Убрал создание векторов для readInt и readLong
ud1
> Убрал создание векторов для readInt и readLong
вот это годнота: 0.2 ms/frame иногда даже 0.1 ms/frame
upd:
"make_shared<PlayerContext>(readPlayerContext());" - 0.4 ms/frame
похоже на то что там вся инфа 2 раза копируется:
вот бы ещё мove semantics конструкторы завезли что-ли.
но можно на это забить, т.к стало намного лучше.
Adler
> ждешь.
> а потом тебе заявляют:
Это ещё довольно мягкое заявление. Я бы таких оптимизаторов, которые даже не способны привести свои правки к тому же форматированию, как и во всём остальном файле, слал куда подальше, пока не научатся элементарной гигиене кода.
> WTF?
Это опенсорс, детка. Пора привыкнуть, что не все и не всегда хотят видеть твои правки у себя, особенно в подобном виде. И что код надо приводить хотя бы в читаемое состояние, а затем уже в понятное не только тебе чтобы его кто-то начал рассматривать для добавления.
Там люди на питоне пишут, а они из сишки последнее выжимают. Имейте совесть.
короче была такая бага:
блин, у них на сервере стратегия почему-то считает, что через болото и дождливую местность ходить нельзя, но под дебагом и repeater`ом прога в консоль пишет что всё окей идём на врага, и мой debug renderer показывает что тоже собирается идти на врага в болото и под дождь, но координаты на следующем тике упорно смещаются в ортогональном направлении.
я собрал под:
x86-64 в релизе
x86 в релизе
x86 в дебаге
у меня всё ок показывать, не понимаю почему так.
только что подчинил с пятой попытки - всё дело в числах с плавающей точкой.
в одном месте ограничение скорости считается как: unit_spd*wet_ter_k - и в другом так же, но результаты умножения немножко отличаются из-за мусора в регистрах.
короче добавил eps = 0.3*0.6*0.005 при сравнении и проблемам исчезла.
Adler
Ты что, скорости сравниваешь? Зачем?
Кстати там замержили мой пул реквест, стало быстрее на сервере? Или они у себя еще обновили? Как ни открою чью-то игру, так 70+ секунд. А то и хуже.
ud1
> Ты что, скорости сравниваешь? Зачем?
да меня просто по инерции занесло, т.к сначала добавил в оценочную функцию число столкновений, потом подумал(на самом деле нет) и добавил ещё число фактов замедления, затем покрутил коэффициенты и отправил на сервер.
по умному конечно надо просто штраф пропорциональный модулю разности между реальной и запланированной скоростью в оценочную функцию добавлять.
ud1
> Кстати там замержили мой пул реквест стало быстрее на сервере? Или они у себя еще обновили?
пересоздал игру со старой версией: http://russianaicup.ru/game/view/42113
и создал с новой: http://russianaicup.ru/game/view/42110
upd(19 ноя. 2017 2:57):
>стало быстрее на сервере?
похоже ничего не поменялось.
upd2:
с новой: http://russianaicup.ru/game/view/51826
Вывод runner'а в stdout:
Program successfully terminated
exit code: 0
time consumed: 6.22 sec
time passed: 73.98 sec
peak memory: 6975488 bytes
новая vs старая: http://russianaicup.ru/game/view/51828
6.54 sec vs 77.14 sec
upd3:
Adler
Прекрасно. Это же насколько больше игр можно было в прошлых конкурсах провести.
Коллеги, а поделитесь пожалуйста инфой, кто как готовится к подобным соревнованиям?
Что можно почитать на эту тему, или может у кого что-есть из документации?
Интересует все, что касается теоретических знаний и алгоритмов.
Очень нравятся эти соревнования, заставляют мозг переключиться на что-то совершенно другое :)
Diversus
Беру бумагу и ручку, и начинаю рисовать как должны себя вести юниты. Затем думаю как заставить их себя вести именно так. Если сам знаю как, то пишу и эксперементирую.
Если не знаю то лезу в нет по конкретным вопросам.
Diversus
не знаю, можно ли это считать подготовкой, но я вот такую штуку делаю.
Тема в архиве.