Rocket League - это соревновательная игра, в которой, управляя машинкой на футбольном поле, нужно забить мяч в ворота противника. Своеобразная интерпретация футбола на машинках. Звучит просто, но на деле игра требует определенных навыков и не так проста, как может показаться на первый взгляд, и даже была признана киберспортивной дисциплиной. Тем интереснее было попробовать обучить своего бота играть в эту игру, используя нейросети и обучение с подкреплением.
Оказалось, что существует множество возможностей для создания ботов в этой игре. Взаимодействие стороннего кода и игры происходит через отдельный плагин. Но использовать эти возможности и запускать ботов в сетевом режиме нельзя, по понятным причинам. Создать бота можно используя разные языки программирования, но так как речь зашла про нейросети, то понятно, что это будет python. В игре доступны разные режимы игры (1 vs 1, 2 vs 2, хоккей и т.д.). Чтобы упростить себе задачу, я сосредоточился на режиме 1 vs 1.
Перед тем как приступить непосредственно к теме я хочу выделить два бота, которые можно было найти в open-source:
Nexto. Самый продвинутый бот на данный момент. Был момент, когда игру взломали и добавили возможность запускать бота в соревновательный режим. В итоге этот бот в онлайне показал себя лучше, чем 99% игроков. Для обучения использовался алгоритм PPO с дискретным пространством действий, т.е. бот как бы играет на клавиатуре, а также работает в 12 фпс. Ещё интересный момент, что на входе в сеть есть backbone, основанный на attention-like архитектуре, который собирает всю информацию о текущем состоянии игры в вектор фиксированного размера. Благодаря этому бот может играть с разным количеством игроков, что также позволяет ему играть в разных режимах игры. Только код этого backbon'а выглядит сыровато, и не очень понятно, как конкретно это работает. Размер policy-модели - 444032 параметров.
Также в его репозитории есть предыдущая версия бота - Necto.Seer - похоже чья-то магистерская работа. Судя по оценкам автора, он почти добрался до уровня Necto (не Nexto!). Тоже использовал PPO. В его документе можно найти конкретную архитектуру, которую он использовал, систему наград и гиперпараметры. Он использовал общую LSTM для Actor и Critic модели. Actor и Critic модели вместе содержат 2 миллиона параметров. Автор пробовал выполнять претренировку модели на данных с повторов обычных игроков, но это не дало результатов. А ещё он пишет, что обучение заняло 1.5 месяца
