image


Вот уже пять лет мы проводим russian ai cup, крупнейший в СНГ ежегодный чемпионат по искусственному интеллекту (а если проще — по написанию ботов для игр). И вот уже семь лет участники этого чемпионата просят либо оставлять песочницу работать весь год, либо запустить площадку, где можно было бы весь год играться в подобные же конкурсы, только чуть меньше размером.


Мы подумали и решили опробовать второй вариант — открыли новую площадку с мини-конкурсами, связанными с искусственным интеллектом и написанием ботов для игр. Встречайте новый для нас класс чемпионатов — http://aicups.ru/.


И сразу же предлагаем принять участие в первом, тестовом чемпионате.
И не бейте нас, пожалуйста, за дизайн площадки. Мы очень упарывались в качество самого соревнования, поэтому в дизайн мы просто не успели. Сделаем вид, что мы так видим ;)


Суть задачи


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


  1. У каждого пассажира есть вес
  2. Чем больше пассажиров мы везем, тем медленнее едем
  3. При достижении определенного (критического) количества пассажиров, мы едем еще медленее

Кроме того, задачу мультиплеерная. То есть, у нас есть две группы лифтов и каждый игрок управляет своей группой. Сами же пассажиры делятся на “своих” и “чужих” — чужого сложнее забрать с этажа. Но если смог, получил 2x очков ;)


Подробнее обо всем этом можно прочитать ниже, в разделе “Правила”


Этапы чемпионата


Чемпионат открывается сегодня, 15-сентября, и продлится до 9-го октября.


Пока что наш план таков:


15-го сентября открывается площадка с песочницей, и у участников появляется возможность загружать свои стратегии и играть не-рейтинговые игры “на интерес” с другими своими стратегиями, с другими игроками или с бейзлайном — в песочнице живут два фейковых пользователя (“good baseline” — забирает всегда только своих пассажиров и “evil baseline” — забирает только чужих).


В сутки можно загрузить не более 24 новых решений, и сыграть не более 48 не-рейтинговых игр.


18 сентября в песочнице начинают работать рейтинговые игры (их система создает сама). Время от времени псевдослучайно выбирается два участника (для подбора мы используем TrueSkill, спасибо Microsoft за этот прекрасный алгоритм!). От каждого из них мы берем стратегию, которую он до этого выбрал для участия в рейтинге. Две эти стратегии играют друг с другом, победившая передвигается в лидерборде вверх, проигравшая вниз. Таким образом строится рейтинг песочницы.


9-го октября мы планируем провести финал. Некоторое количество топовых участников из песочницы будет отобрано в отдельный рейтинг, после чего мы запустим несколько волн игр “каждый с каждым” и таким образом выясним, чья же стратегия самая крутая, раздадим призы, учтем пожелания и пойдем готовиться к следующему подобному чемпионату!


Призы


Как уже давно принято в наших чемпионатах, мы награждаем TOP6. Расклад призов такой же, как и в прошедшем недавно highloadcup:


  1. Apple iPad Air 2 Cellular 16GB за первое место
  2. WD MyCloud 6TB
  3. WD MyCloud 6TB
  4. WD MyPassport Ultra 2TB
  5. WD MyPassport Ultra 2TB
  6. WD MyPassport Ultra 2TB

Кроме того, маечки! Не будем нарушать и эту добрую традицию — TOP20 получат от нас майки с символикой чемпионата. Возможно маек будет больше — в highloadcup мы тоже начали с 20-ти штук, в результате дарим 116 :)


Задача и правила


Итак, подробнее о задаче.


image


Описание здания:


  1. Здание содержит 2 группы лифтов, каждая группа принадлежит одному игроку
  2. Здание содержит 2 лестницы
  3. В здании 9 этажей, которые пронумерованы с 1 до 9 снизу вверх
  4. Высота каждого этажа равна 1
  5. Расстояние от центра этажа до группы лифтов равно 60 единиц
  6. Расстояние от центра этажа до места ожидания пассажиров каждой группы равно 20 единиц

Лифты:


  1. Каждая из двух групп содержит 4 лифта
  2. Лифты в группе отстоят друг от друга на 80 единиц
  3. В начале игры все лифты стоят на 1 этаже с открытыми дверьми и готовыми к забору пассажиров
  4. После открытия дверей лифт стоит на этаже минимум 40 тиков
  5. Открытие дверей длится 100 тиков
  6. Закрытие дверей длится 100 тиков
  7. Максимальная вместимость лифта 20 пассажиров
  8. Пустой лифт преодолевает этаж за 50 тиков
  9. Лифт едет тем медленнее, чем больше пассажиров он везет
  10. Если в лифте едет более 4 пассажиров, он теряет скорость в двойном объеме
  11. Потеря скорости лифта зависит от веса пассажира

Пассажиры:


  1. Пассажиры появляются парами раз в 20 тиков на первом этаже вплоть до 2000 тика
  2. Каждый пассажир за время игры хочет посетить от 1 до 5 случайных уникальных этажей, кроме первого (распределение количеств этажей и самих этажей равномерное) и вернуться на первый этаж ближе к концу игры
  3. Пассажиры ждут лифт 500 тиков, после чего уходят на лестницу
  4. Скорость подъема пассажира по лестнице — один этаж в 200 тиков
  5. Скорость спуска пассажира по лестнице — один этаж в 100 тиков
  6. Горизонтальная скорость пассажира 2 единицы в тик
  7. Пассажир имеет случайный вес от 1 до 1.1
  8. После выхода из лифта пассажир идет на свой этаж ровно 40 тиков
  9. Пассажир проводит на этаже 500 тиков, после чего появляется на этаже с той стороны, куда он уходил
  10. Пассажир всегда идет в ближайший назначенный ему лифт
  11. Переназначить лифт пассажиру нельзя
  12. Если лифт пассажира уехал без него, то у пассажира снимается назначенный ему лифт и он возвращается на свою начальную позицию
  13. Подобрать пассажира противника можно только лифтом, который уже простоял на этаже 40 тиков
  14. Перемещения лифтовый холл -> лестница, этаж -> лифтовый холл происходят мгновенно

Подсчет очков:


  1. За своего пассажира игрок получает (количество этажей) * 10 очков
  2. За пассажира противника игрок получает вдвое больше, чем за своего

Побеждает игрок, набравший большее кол-во очков.


API и Baseline мы выложили в официальном репозитории с документацией, здесь. В этом же репозитории принимаются новые issue, мы обязательно будем их просматривать.


А на чем писать?


Сейчас у нас есть API для следующих языков:


  1. Python 2.7
  2. Python 3.6
  3. Cpp11
  4. Java1.8
  5. Nodejs
  6. PHP7

Возможно, этот список будет пополняться. Прямо сейчас пытаемся подключить C#.


А кому можно участвовать?


Участвовать могут все, без ограничений! Заходите, пробуйте! Поучаствовать можно здесь, а обсудить чемпионат можно в VK и в Telegram. Удачи в чемпионате!

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


  1. Tairesh
    15.09.2017 19:13
    +2

    Тема с конями не раскрыта


    1. sat2707 Автор
      15.09.2017 19:22

      Если нарисуешь годный скин с конями и поделишься — то мы даже специально систему скинов туда добавим :)


  1. idiockus
    15.09.2017 20:18

    Хороший сайт. А где кнопочка «Donate»?


    1. sat2707 Автор
      15.09.2017 20:19

      Да ну какой Donate, на что он нам. Нас и так прёт :)


  1. ertaquo
    15.09.2017 23:27
    +1

    Дурацкий вопрос: как потестить стратегию на локалке? Скажем, версию для nodejs.


    1. sat2707 Автор
      16.09.2017 01:33

      Локалраннера пока нет, на следующей неделе выкладываем. Пока можно на сайте тестировать, взяв baseline отсюда github.com/sat2707/aicups/tree/master/baseline


  1. shemal
    16.09.2017 01:32

    Идея супер, только вот письмо для подтверждения регистрации не приходит


    1. sat2707 Автор
      16.09.2017 01:33

      Могло в спам лечь или в рассылки?


  1. robert_ayrapetyan
    16.09.2017 01:41
    +5

    Лифты на epoll(0) всех вывезут…


    1. sat2707 Автор
      16.09.2017 01:44
      +1

      Полагаю тут тоже найдется какая-нибудь своя уберфича, как и в highloadcup, да


  1. claimc
    17.09.2017 18:49

    Аптечки и гранаты появятся? Мне без них сложно: )


    1. sat2707 Автор
      17.09.2017 18:52

      Пока не знаем. Душа просит как-нибудь эдак упороться, может и правда появятся :)


  1. WhoKnowsWhoCares
    17.09.2017 18:49

    А то, что соединение не защищено это нормально? *паранойя*


    1. sat2707 Автор
      17.09.2017 18:51

      Ну такое… не успели сертификат настроить. Настроим


  1. lookuut
    17.09.2017 18:49
    +1

    Здравствуйте, не очень понятна условия:
    Расстояние от центра этажа до группы лифтов равно 60 единиц
    Расстояние от центра этажа до места ожидания пассажиров каждой группы равно 20 единиц

    не понятно почему расстояние до места ожидания от центра этажа ближе чем расстояние от центра этажа до группы лифтов, я правильно предполагаю что человек сначала доходит до группы лифтов потом идет до места ожидания пассажиров?


    1. sat2707 Автор
      17.09.2017 18:51
      +1

      Привет! Человек появляется на месте ожидания пассажиров, а когда хочет в лифт — идет к группе лифтов. То есть:
      лифты1 — пассажиры1 — центр — пассажиры2 — лифты2


  1. MoreBeauty
    19.09.2017 06:35

    О, вы решили помочь разрабам Craft the World создать нормальный AI для лифтов? :)