Вот уже пять лет мы проводим russian ai cup, крупнейший в СНГ ежегодный чемпионат по искусственному интеллекту (а если проще — по написанию ботов для игр). И вот уже семь лет участники этого чемпионата просят либо оставлять песочницу работать весь год, либо запустить площадку, где можно было бы весь год играться в подобные же конкурсы, только чуть меньше размером.
Мы подумали и решили опробовать второй вариант — открыли новую площадку с мини-конкурсами, связанными с искусственным интеллектом и написанием ботов для игр. Встречайте новый для нас класс чемпионатов — http://aicups.ru/.
И сразу же предлагаем принять участие в первом, тестовом чемпионате.
И не бейте нас, пожалуйста, за дизайн площадки. Мы очень упарывались в качество самого соревнования, поэтому в дизайн мы просто не успели. Сделаем вид, что мы так видим ;)
Суть задачи
Поскольку это первый чемпионат на новой площадке, мы особо не упарывались в сложность задачи и взяли довольно простую тематику — развоз пассажиров по этажам с помощью лифта. Чтобы разнообразить задачу, в неё добавлено несколько факторов, влияющих на алгоритм развоза пассажиров:
- У каждого пассажира есть вес
- Чем больше пассажиров мы везем, тем медленнее едем
- При достижении определенного (критического) количества пассажиров, мы едем еще медленее
Кроме того, задачу мультиплеерная. То есть, у нас есть две группы лифтов и каждый игрок управляет своей группой. Сами же пассажиры делятся на “своих” и “чужих” — чужого сложнее забрать с этажа. Но если смог, получил 2x очков ;)
Подробнее обо всем этом можно прочитать ниже, в разделе “Правила”
Этапы чемпионата
Чемпионат открывается сегодня, 15-сентября, и продлится до 9-го октября.
Пока что наш план таков:
15-го сентября открывается площадка с песочницей, и у участников появляется возможность загружать свои стратегии и играть не-рейтинговые игры “на интерес” с другими своими стратегиями, с другими игроками или с бейзлайном — в песочнице живут два фейковых пользователя (“good baseline” — забирает всегда только своих пассажиров и “evil baseline” — забирает только чужих).
В сутки можно загрузить не более 24 новых решений, и сыграть не более 48 не-рейтинговых игр.
18 сентября в песочнице начинают работать рейтинговые игры (их система создает сама). Время от времени псевдослучайно выбирается два участника (для подбора мы используем TrueSkill, спасибо Microsoft за этот прекрасный алгоритм!). От каждого из них мы берем стратегию, которую он до этого выбрал для участия в рейтинге. Две эти стратегии играют друг с другом, победившая передвигается в лидерборде вверх, проигравшая вниз. Таким образом строится рейтинг песочницы.
9-го октября мы планируем провести финал. Некоторое количество топовых участников из песочницы будет отобрано в отдельный рейтинг, после чего мы запустим несколько волн игр “каждый с каждым” и таким образом выясним, чья же стратегия самая крутая, раздадим призы, учтем пожелания и пойдем готовиться к следующему подобному чемпионату!
Призы
Как уже давно принято в наших чемпионатах, мы награждаем TOP6. Расклад призов такой же, как и в прошедшем недавно highloadcup:
- Apple iPad Air 2 Cellular 16GB за первое место
- WD MyCloud 6TB
- WD MyCloud 6TB
- WD MyPassport Ultra 2TB
- WD MyPassport Ultra 2TB
- WD MyPassport Ultra 2TB
Кроме того, маечки! Не будем нарушать и эту добрую традицию — TOP20 получат от нас майки с символикой чемпионата. Возможно маек будет больше — в highloadcup мы тоже начали с 20-ти штук, в результате дарим 116 :)
Задача и правила
Итак, подробнее о задаче.
Описание здания:
- Здание содержит 2 группы лифтов, каждая группа принадлежит одному игроку
- Здание содержит 2 лестницы
- В здании 9 этажей, которые пронумерованы с 1 до 9 снизу вверх
- Высота каждого этажа равна 1
- Расстояние от центра этажа до группы лифтов равно 60 единиц
- Расстояние от центра этажа до места ожидания пассажиров каждой группы равно 20 единиц
Лифты:
- Каждая из двух групп содержит 4 лифта
- Лифты в группе отстоят друг от друга на 80 единиц
- В начале игры все лифты стоят на 1 этаже с открытыми дверьми и готовыми к забору пассажиров
- После открытия дверей лифт стоит на этаже минимум 40 тиков
- Открытие дверей длится 100 тиков
- Закрытие дверей длится 100 тиков
- Максимальная вместимость лифта 20 пассажиров
- Пустой лифт преодолевает этаж за 50 тиков
- Лифт едет тем медленнее, чем больше пассажиров он везет
- Если в лифте едет более 4 пассажиров, он теряет скорость в двойном объеме
- Потеря скорости лифта зависит от веса пассажира
Пассажиры:
- Пассажиры появляются парами раз в 20 тиков на первом этаже вплоть до 2000 тика
- Каждый пассажир за время игры хочет посетить от 1 до 5 случайных уникальных этажей, кроме первого (распределение количеств этажей и самих этажей равномерное) и вернуться на первый этаж ближе к концу игры
- Пассажиры ждут лифт 500 тиков, после чего уходят на лестницу
- Скорость подъема пассажира по лестнице — один этаж в 200 тиков
- Скорость спуска пассажира по лестнице — один этаж в 100 тиков
- Горизонтальная скорость пассажира 2 единицы в тик
- Пассажир имеет случайный вес от 1 до 1.1
- После выхода из лифта пассажир идет на свой этаж ровно 40 тиков
- Пассажир проводит на этаже 500 тиков, после чего появляется на этаже с той стороны, куда он уходил
- Пассажир всегда идет в ближайший назначенный ему лифт
- Переназначить лифт пассажиру нельзя
- Если лифт пассажира уехал без него, то у пассажира снимается назначенный ему лифт и он возвращается на свою начальную позицию
- Подобрать пассажира противника можно только лифтом, который уже простоял на этаже 40 тиков
- Перемещения лифтовый холл -> лестница, этаж -> лифтовый холл происходят мгновенно
Подсчет очков:
- За своего пассажира игрок получает (количество этажей) * 10 очков
- За пассажира противника игрок получает вдвое больше, чем за своего
Побеждает игрок, набравший большее кол-во очков.
API и Baseline мы выложили в официальном репозитории с документацией, здесь. В этом же репозитории принимаются новые issue, мы обязательно будем их просматривать.
А на чем писать?
Сейчас у нас есть API для следующих языков:
- Python 2.7
- Python 3.6
- Cpp11
- Java1.8
- Nodejs
- PHP7
Возможно, этот список будет пополняться. Прямо сейчас пытаемся подключить C#.
А кому можно участвовать?
Участвовать могут все, без ограничений! Заходите, пробуйте! Поучаствовать можно здесь, а обсудить чемпионат можно в VK и в Telegram. Удачи в чемпионате!
Комментарии (17)
ertaquo
15.09.2017 23:27+1Дурацкий вопрос: как потестить стратегию на локалке? Скажем, версию для nodejs.
sat2707 Автор
16.09.2017 01:33Локалраннера пока нет, на следующей неделе выкладываем. Пока можно на сайте тестировать, взяв baseline отсюда github.com/sat2707/aicups/tree/master/baseline
robert_ayrapetyan
16.09.2017 01:41+5Лифты на epoll(0) всех вывезут…
sat2707 Автор
16.09.2017 01:44+1Полагаю тут тоже найдется какая-нибудь своя уберфича, как и в highloadcup, да
lookuut
17.09.2017 18:49+1Здравствуйте, не очень понятна условия:
Расстояние от центра этажа до группы лифтов равно 60 единиц
Расстояние от центра этажа до места ожидания пассажиров каждой группы равно 20 единиц
не понятно почему расстояние до места ожидания от центра этажа ближе чем расстояние от центра этажа до группы лифтов, я правильно предполагаю что человек сначала доходит до группы лифтов потом идет до места ожидания пассажиров?sat2707 Автор
17.09.2017 18:51+1Привет! Человек появляется на месте ожидания пассажиров, а когда хочет в лифт — идет к группе лифтов. То есть:
лифты1 — пассажиры1 — центр — пассажиры2 — лифты2
MoreBeauty
19.09.2017 06:35О, вы решили помочь разрабам Craft the World создать нормальный AI для лифтов? :)
Tairesh
Тема с конями не раскрыта
sat2707 Автор
Если нарисуешь годный скин с конями и поделишься — то мы даже специально систему скинов туда добавим :)