Dota 2 для программистов: соревнование ботов с искусственным интеллектом Russian AI Cup 2016

russianaicup1

В самом разгаре стартовавший в ноябре Russian AI Cup 2016. Это ежегодный чемпионат по программированию искусственного интеллекта, организуемый Mail.Ru Group. Russian AI Cup проводится в форме игры, чтобы получилось наглядно, понятно и просто. Вкратце: участники создают алгоритм, который описывает игровую стратегию. Получившийся бот сражается с другими такими же, а лучший из них побеждает в раунде. Таким образом, из серии раундов организуется турнир, проходящий в несколько этапов.
С одной стороны, основная механика игры довольно проста и минимально рабочую стратегию реально написать за пару часов (для быстрого старта в чемпионате можно заглянуть сюда, там же можно найти небольшой tutorial). С другой же — в игре получилось много нюансов, и оттачивать стратегию, поднимаясь вверх по турнирной таблице, можно до бесконечности. В этом году предлагаем вам на месяц стать магом и сразиться на средневековом поле боя в MOBA-игре CodeWizards. Впрочем, обо всем по порядку.

Классическое поле боя MOBA-игры. Жёлтым выделены «линии», где происходит основное действие игры; точками обозначены «башни», охраняющие эти линии. В углах — базы двух команд.

Классическое поле боя MOBA-игры. Жёлтым выделены «линии», где происходит основное действие игры; точками обозначены «башни», охраняющие эти линии. В углах — базы двух команд.

Две команды игроков сражаются друг с другом на карте особого вида. Каждый игрок управляет одним персонажем. Конечная цель игры — уничтожить главное здание вражеской команды с помощью героев и юнитов, управляемых компьютером. Черпая вдохновение из произведений Riot Games и Valve мы создали собственное поле боя, здания, джунгли и текстуры. Но самое главное в игре — это чемпионы-волшебники и миньоны.

players_russianaicup

Чемпион (сверху) и миньоны (снизу)

Новое расписание раундов

В этом году добавлена дополнительная неделя между первым и вторым раундом. Правила второго раунда отличаются, и под них приходится перестраивать алгоритм. Раньше многие участники жаловались на нехватку времени, ведь они могли уделить чемпионату лишь несколько вечеров после работы. Теперь, надеемся, всем хватит времени.

Итоговое расписание раундов такое:

  • первый этап — с 26 ноября 2016 года по 27 ноября 2016 года;
  • второй этап — с 10 декабря 2016 года по 11 декабря 2016 года;
  • третий этап (заключительный) — с 17 декабря 2016 года по 18 декабря 2016 года.

В перерывах между раундами работает «Песочница», в которой можно отточить свои стратегии.

Правила игры

Основное нововведение в этом году — кооперативная механика игры. То есть, стратегии игроков бьются в командах, а значит нужно учитывать не только действия врагов, но и действия союзников по раунду.

Чтобы лучше понять механику процесса, прочитайте краткие правила чемпионата. Полную и актуальную версию вы можете посмотреть на нашем сайте.

Игровой мир является двумерным, а все юниты в нём имеют форму круга. Игровая область ограничена квадратом, левый верхний угол которого имеет координаты (0.0, 0.0), а длина стороны равна 4000.0. Ни один живой юнит не может покинуть пределы игровой области.

Время в игре дискретное и измеряется в «тиках». В начале каждого тика игра получает от стратегий желаемые действия волшебников в этот тик и обновляет состояние волшебников в соответствии с этими желаниями и ограничениями мира. Затем происходит расчёт изменения мира и объектов в нём за этот тик, и процесс повторяется снова с обновлёнными данными. Максимальная длительность любой игры равна 20000 тиков, однако игра может быть прекращена досрочно, если достигнута командная цель одной из фракций либо стратегии всех участников «упали». «Упавшая» стратегия больше не может управлять волшебником.

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

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

Волшебники, строения, миньоны и деревья являются живыми юнитами. Основными характеристиками каждого живого юнита являются текущее и максимальное количество жизненной энергии. В общем случае, при падении количества жизненной энергии до нуля юнит считается погибшим и убирается из игрового мира. Волшебники — единственные живые юниты, обладающие регенерацией здоровья. Каждый тик они автоматически восстанавливают некоторое количество жизненной энергии. Скорость регенерации является вещественным числом, как правило, меньшим единицы. Волшебник считается погибшим, если целочисленная часть его жизненной энергии падает до нуля.

Каждые 750 тиков база каждой фракции генерирует 3 отряда миньонов: по одному на каждую дорожку. Каждый такой отряд состоит из трёх орков и одного фетиша. Отряд сразу же устремляется по своей дорожке в направлении базы противоположной фракции, атакуя всех противников на пути. Волшебники используют миньонов как пушечное мясо. При этом сами они стараются держаться в безопасной зоне и атакуют противника на расстоянии.

В лесных зонах с некоторой вероятностью могут появляться нейтральные миньоны. Обычно они не агрессивны, однако в случае нанесения урона одному из них все нейтральные миньоны поблизости устремляются к обидчику, атакуя при этом любого, кто встанет у них на пути.

Каждые 2500 тиков на карте может появиться бонус. Если на карте уже присутствует хотя бы один бонус, то новый не будет создан. Бонус создаётся в случайно выбранной точке из двух возможных: (1200, 1200) или (2800, 2800). Если любая часть области появления бонуса уже занята волшебником, то симулятор попытается создать бонус в другой точке из списка. В случае неудачи создание бонуса будет отложено до окончания очередного интервала.

Коллизия живых юнитов между собой, а также с границами карты не допускается игровым симулятором. Если расстояние от центра живого юнита до центра снаряда меньше или равно сумме их радиусов, то живой юнит получает урон, а снаряд убирается из игрового мира. При этом, огненный шар взрывается и наносит урон всем живым юнитам, находящимся поблизости. Если расстояние от центра волшебника до центра бонуса меньше или равно сумме их радиусов, то волшебник на 2400 тиков приобретает магический статус, в зависимости от типа бонуса.

На каких языках можно писать

Среди поддерживаемых языков: это C (плюсы и #), Java, Python (2 и 3), Ruby, Pascal, JavaScript, D и GO. Недавно была также добавлена Scala. Подробнее смотрите на нашем сайте.

Кроме того, в этот раз мы перевели правила и документацию на английский язык, а значит будем анонсировать чемпионат среди англоязычных программистов. Надеемся, что это добавит интереса в схватках.

Новая графика

Этот чемпионат для нас юбилейный — пятый. Поэтому мы постарались сделать все идеально. В этом году мы приблизили визуализацию к Dota 2. В прошлом году у нас было всего лишь две принципиально разных модели машинок. В этот раз есть уже три персонажа, каждый из которых имеет, как минимум, пять уникальных анимаций. Мы добавили динамическое освещение, что прибавило живости и эффектности картинке. Сконцентрировали внимание на мире, в котором происходят события. Чемпионат погружает зрителя в мрачный лес, населенный магами, орками и магическими башнями которые то и дело вспыхивают огнём и рушатся под напором стратегии игроков. Впрочем, смотрите сами.

Прим. ред. Как участник чемпионата могу сказать, что следить за матчами с участием своего бота действительно чрезвычайно захватывающе! Ниже приведены несколько скриншотов.

pic1

pic0

Призы

В этом году участник, занявший первое место, получит MacBook Pro. Второе и третье места — MacBook Air и Apple Ipad. Кроме того, памятные призы достанутся тем, кто займет в финале места с четвертого по шестое, и тем, кто за время проведения чемпионата лучше всех проявит себя в песочнице. По традиции, всем участникам финала достанутся толстовки с символикой чемпионата, а всем участникам второго раунда — футболки.

pic2

Мы вложили душу в CodeWizards 2016. Надеемся, что вас заинтересовало наше небольшое превью, и вы попробуете свои силы в написании стратегии. Заходите на сайт чемпионата, там вы найдете полную версию правил, рекомендации по созданию алгоритма и сможете зарегистрироваться. До встречи на поле боя!