Russian AI Cup - сражение алгоритмов. Часть 1
@ivan_osipovАккаунты автора: GitHub
Время чтения: около 7 минут
Хеллоу, ворлд! Воскресный вечер, ноутбук, что еще нужно для хорошего поста на канале Джун уронил прод?
Сегодня мы обсудим чемпионат по программированию искусственного интеллекта на примере игровых стратегий Russian AI Cup.

Время проведения чемпионата
Чемпионат проводится каждый год с 2012 года обычно поздней осенью. А это значит самое время узнать о чемпионате и при желании участвовать - подтянуть свои навыки в программировании AI.
Суть чемпионата
Каждый раз разработчики из Mail Ru Group представляют общественности игру, только вот играть в неё будете не вы, а ваш алгоритм. Тема игры текущего года как всегда - загадка, но сегодня мы оглянемся назад и посмотрим какие чемпионаты были ранее. Ваша задача - написать алгоритм, который будет управлять юнитом или группой юнитов в контексте игры. Невероятно, но факт: за призовые места в чемпионате дают призы (в 2016 году: 1 место - MacBook Pro, 2 место - MacBook Air 3 место - iPad Air 2 и так далее).
Эволюция чемпионата
Как я писал выше, чемпионат проводится с 2012 года. За это время он рос, прокачивался, всё круче и круче становилась демонстративная составляющая. Я искренне восхищен тем, каких результатов достигла команда разработки чемпионата.
2012 год
Это было так давно, хотя и недавно. Первый чемпионат прошел на тему танков. Ниже представлен скриншот игры. Снаряды могли рикошетить, а танки старались всеми силами выжить и починиться.

2013 год
Спустя год, получив первый фитбэк, участников пригласили написать алгоритм для управления отрядом бойцов. На поле разложили аптечки, поставили препятствия и выпустили команды в разных углах карты. Одним словом - солдатики :) Скриншот игры вы можете видеть ниже.

2014 год
Видимо, под влиянием победы России на чемпионате мира по хоккею в 2014 году, разработчики RusAICup решили "хайпануть немножечко" и сделали, как вы думаете что? Хоккей! Графика стала чуть более графичной, а игроки управляли командами. По традиции, скриншот ниже.

2015 год
Какой русский не любит быстрой езды? Возможно, что так и подумали разработчики Russian AI Cup 2015 и сделали гонки в космосе с интересной физикой, бросанием шин, разливанием масла и прочими увлекательными событиями.

2016 год (крайний)
В прошлом году разработчики чемпионата снова шагнули вперед. Каждый год графика становится лучше и зрелищнее, требования по сложности алгоритмов возрастают и в этот раз я в составе еще полторы тысячи человек играл в качестве волшебника. Волшебники могли добывать бонусы, убивать башни и миньонов, бродить в лесу, а главная цель - уничтожить вражескую базу (ничего не напоминает? ;-) ) или набрать максимальное количество очков к концу игры.
Судя по тренду, от игроков хотят большей универсальности алгоритмов, т.к. от одиночного управления танками чемпионат проделал путь к смешанным играм, где ваш алгоритм могут запустить и для одного волшебника и для команды.
Скриншот одной из моих игр ниже :)

Моё участие в чемпионате
2016 год - был дебютом в этом чемпионате. Хотя знал я про него и раньше, но постоянно искал отговорки, чтобы не участвовать, а зря. В чемпионате приняло участие около 1500 человек, среди которых, я оказался где-то в середине на 777 месте, сыграно 584 игры из которых 17% побед в песочнице, т.е. 1 из 10 мест (ссылка на профиль). После песочницы нужно было участвовать в 1 раунде, где минимальная проходная позиция в рейтинге - 300, тут-то я и провалился, оставшись на 631 месте :)
Какие были проблемы?
Основные проблемы возникают в самом начале, когда нужно подготовить пакеты для запуска локального тестирования. Обычно, спустя какое-то время, народные умельцы представляют общественности патч, благодаря которому вы сможете рисовать поверх канвы для отладки своих алгоритмов, но чтобы понять как этим правильно воспользоваться - пришлось постараться. Пример того как это работает вы увидите в следующей части статьи.
Иногда я не понимал (а в некоторых случаях и до сих пор не понимаю) почему мой волшебник вёл себя так или иначе, в этот момент я включал режим отладки и тратил вечер на поиски причин сомнительного поведения.
Как я реализовывал искусственный интеллект
Пожалуй этому я посвящу отдельную статью на канале Джун уронил прод.
Языки программирования
Вариантов много: Java, C#, C++, Python... Обещали добавить Kotlin. В общем с этим проблем не возникает.
Рейтинги
Давайте посмотрим на изменения рейтинга в моих играх 2016 года. Изначально присваивается 1200 очков и если алгоритм не совсем беспонтовый, то рейтинг быстро начинает расти, затем, после нескольких игр ваш алгоритм находит свое место в рейтинге.

Видите резкую просадку 23.11? Есть возможность скинуть рейтинг для того чтобы избавиться от инерционности, как вы видите - много пользы это мне не принесло ;-) Вы можете изменять свои алгоритмы, загружать их лучшие версии или откатывать назад, но помните, что остальные игроки тоже прокачиваются и когда "качество на рынке" растет, то "качество вашего алгоритма без изменений" начинает плавно падать.
Исходный код
О реализации я буду рассказывать в следующей статье, но исходный код вы можете посмотреть здесь уже сейчас.
Заключение
Это потрясающий, очень интересный чемпионат, настоящий вызов для любого программиста, не смотря на результаты я остался очень доволен и горд собственным участием. Разработка приносит массу удовольствия, а просмотр игр с участием чужих алгоритмов в столкновении с вашим - это что-то невообразимое, ну и конечно, подглядеть за другими ребятами тоже бывает интересно (реверс инженеринг в действии). В любом случае, я вам крайне рекомендую поучаствовать хотя бы раз, скорее всего это доставит вам массу удовольствия. До встречи в игре!