image

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

С одной стороны, основная механика игры довольно проста и минимально рабочую стратегию реально написать за пару часов (для быстрого старта в чемпионате можно заглянуть сюда, там же можно найти небольшой tutorial). С другой же — в игре получилось много нюансов, и оттачивать стратегию, поднимаясь вверх по турнирной таблице, можно до бесконечности. В этом году предлагаем вам на месяц стать магом и сразиться на средневековом поле боя в MOBA-игре CodeWizards. Впрочем, обо всем по порядку.

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

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

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

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


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

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

  • первый этап — с 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. Подробнее смотрите на нашем сайте.

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

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


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

image


image


И на десерт


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

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

Комментарии (36)


  1. Fafnir
    07.11.2016 16:48

    Скинул коллегам, но оказалось, что в английской локали картинки не локализованы — показываются с русскими надписями. Поправьте, если не сложно.


    1. sat2707
      07.11.2016 16:58

      Оу! Обязательно поправим, спасибо за наводку


  1. Dolbe
    07.11.2016 17:04

    Спасибо большое! Всегда жду AI Cup. На этот раз приятно удивили, что MOBA.


  1. ANTPro
    07.11.2016 17:30
    +1

    На чем сделан рендер? Жутко тормозит.


    1. sat2707
      07.11.2016 17:46

      На three.js. В этот раз материал для визуализации стал сильно богаче, пока что осваиваемся :) Может, кстати, тормозить при частичной загрузке игры, после полной загрузки должно стать резвее


      1. LeXeR3
        07.11.2016 18:36
        +1

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


        1. sat2707
          07.11.2016 18:41

          Отключение теней и освещения тоже не помогает? Ну то есть, на минимальных настройках тоже тормозит?


          1. alan008
            07.11.2016 21:11
            +1

            Подтверждаю, тормозит (в т.ч. и после полной прогрузки).


          1. LeXeR3
            07.11.2016 22:48

            Кажется разобрался. Попробовал в Chrome (до этого использовал Opera 41). Всё работает ощутимо быстрее. Хотя загрузка («Loading resourses») всё равно занимает прилично времени ~40-50 сек.


  1. midday
    07.11.2016 17:51

    https://github.com/Russian-AI-Cup-2016/Tutorial
    404


    1. sat2707
      07.11.2016 18:32

      Правим, спасибо


  1. midday
    07.11.2016 18:56

    А с чем связаны правила невозможности сохранения каких-либо данных… в файл к примеру? Хотелось бы нечто подобное интеллекту сделать, а его без памяти ну никак не получится сделать.


    1. SKolotienko
      07.11.2016 20:54

      Есть возможность запускать локально повторы игр. В таком случае можно дампить любую интересующую вас информацию.


  1. svr_91
    07.11.2016 20:30
    +1

    И почему-то опять никакого уведомления на e-mail. Было бы, наверно, лучше сделать рассылку таких важных моментов предыдущим участникам чемпионата


    1. sat2707
      07.11.2016 20:30

      Конечно же, рассылка будет :)


  1. MiXei4
    07.11.2016 20:50
    +2

    Новый AI Cup уже. А мне с прошлого ещё футболко-толстовку не отправили :)


    1. sat2707
      07.11.2016 20:55

      Оу. А напишите на russianaicup@corp.mail.ru, обязательно пришлем


      1. MiXei4
        07.11.2016 21:09
        +3

        Да я писал 2 раза.
        В июле ответили, что была проблема с отправкой заграницу. Попробуют позже и пришлют трек номер. После этого тишина.
        А в октябре человек, начавший фразу с «Оу!» пошёл проверять не отправили ли мне их уже и тоже пропал. :)
        Я конечно допускаю, что посылка могла просто не дойти, но трек номера я не получал.


        1. sat2707
          08.11.2016 13:35

          А скиньте мне в личку email, с которого вы писали?


  1. SKolotienko
    07.11.2016 21:05
    +1

    По-моему, в этот раз игра получилась гораздо глубже и сложнее предыдущих. Хорошо, что нет сложной физики — все объекты в мире представляются кругами и без сложных коллизий. Увеличилось количество возможных действий и объектов в мире — значит ещё сложнее будет написать стратегию на основе перебора и симуляции.

    Пока непонятно, насколько важен будет «стратегический» слой типа перемещения по карте, засад, комбинации различных навыков у разных магов и прочего. Надеюсь, что к раунду 2 появятся стратегии поумнее, чем просто идти в лоб и стрелять по врагам, уворачиваясь от них.


  1. alan008
    07.11.2016 21:08
    +1

    Беда там какая-то с рендером. Отключил всё, что можно: миникарту, туман войны, антиалиасинг, миникарту, тени, время поставил на 0.75. Но все равно одно ядро процесора грузится на 100%, кулер натужно гудит, а фреймрейт оставляет желать сильно лучшего.
    CPU Core i5, 8GB RAM, Видеокарта AMD Radeon HD 5770. Windows 7 64 bit Pro, браузер FireFox.


  1. ewgRa
    07.11.2016 22:54

    Хотелось бы поучаствовать, но настораживают правила…

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

    Я так понимаю в классической MOBA идет борьба за выигрыш команды. Здесь же с одной стороны надо действовать командой, с другой стороны получается «каждый сам за себя».

    Приплюсовывая сюда разделение на «защитную» — «атакующую» стратегию, не получится ли так что при «защитной» стратегии или при «неудачной» команде верховного мага особо баллов не наберешь?

    Еще этот верховный волшебник… который командует команде, где каждый заинтересован в персональном успехе, а не успехе команды… Не говоря о том, что твой успех будет зависеть от другого игрока…


    1. MiXei4
      07.11.2016 23:11

      Если хочется, участвуйте. В любой игре бывают случайности. В основном всё решает большое количество игр. Тем более в финале бои будут идти 1 на 1.
      Если считаете, что атакующая стратегия набирает больше баллов, то вперёд. Половину игроков получается вы уже выиграли.
      Если считаете, что больше баллов можно набрать в одиночку, а не в команде — вторую половину игроков выиграли :)


  1. midday
    07.11.2016 23:50

    >> Однако вы можете добавлять в стратегию свои файлы с кодом. Эти файлы должны находиться в том же каталоге, что и
    основной файл стратегии. При отправке решения все они должны быть помещены в один ZIP-архив (файлы
    должны находиться в корне архива). Если вы не добавляете новых файлов в пакет, достаточно отправить
    сам файл стратегии (с помощью диалога выбора файла) или же вставить его код в текстовое поле.

    Ну что за дурацкое ограничение? Зачем?


    1. Maccimo
      08.11.2016 01:41

      Ограничение как ограничение, чем оно вам мешает?


      1. midday
        08.11.2016 08:00

        Проект у меня обычно выглядит как несколько каталогов. Есть к примеру какие-то наработки по работе с математикой, а они уже в свою очередь разделены по каталогам, тут я упираюсь в эти ограничения. Это не удобно.


  1. QtRoS
    08.11.2016 01:05
    +1

    Возможно ли командное участие?


    1. sat2707
      08.11.2016 13:33

      Нет, только индивидуально. А как вы видите командное участие в подобном соревновании?


      1. QtRoS
        09.11.2016 22:05

        Вопрос скорее в том, что я не вижу, какие трудности я упустил :)
        Например, на Kaggle команда из нескольких человек может представить стратегию работы с данными, почему здесь такое невозможно?


        1. sat2707
          10.11.2016 11:57

          Ну здесь трудности скорее не технического, а операционного характера. Призы, например, у нас не делятся на несколько человек, в отличие от Kaggle'а :)
          Но мы подумаем, мне вдруг понравилась мысь о проведении отдельного командного чемпа по ИИ


  1. sinitsinsv
    08.11.2016 13:32

    Планируется ли добавить Kotlin?


    1. sat2707
      08.11.2016 13:34

      Именно в этом году — уже вряд ли


  1. Diadlo
    08.11.2016 23:55

    При запуске local-runner'a получаю ошибку: `Unsupported major.minor version 52.0 `, а в организации на github нет публичных репозиториев


    1. Maccimo
      09.11.2016 08:30

      Для запуска нужна Java (JRE) версии 8 или выше.


  1. Ivan_Misyats
    11.11.2016 14:59

    В правилах пишет: «Конкурс проводится на территории Российской Федерации.».
    Можно ли участвовать жителям других стран?


    1. sat2707
      11.11.2016 16:04

      Да, конечно. Конкурсантом может быть любой :)