company_banner

Приглашаем на MiniAiCup#2. В этот раз мы испортили AgarIO


    Шесть лет подряд мы (Mail.Ru Group) совместно с СГУ проводим Russian Ai Cup (соревнование по написанию игровых ботов). Придумываем игровой мир, пишем к нему API и сталкиваем лбами стратегии, написанные участниками. Выходит каждый раз довольно интересно, самобытно и вообще это крупнейший в СНГ ежегодный конкурс по ИИ!
    Под этим же соусом мы осенью 2017-го года написали, запустили и провели первый контест на еще одной площадке, MiniAiCups, получился мини-клон Russian Ai Cup со своей странной атмосферой, правилами и механикой. Очень многим понравилось, и, после раздачи призов, мы, под шумок, обещали еще один конкурс. И наконец-то рады пригласить всех в нём поучаствовать.


    Механика площадки


    Существует игровой мир, живущий по определенным законам. Наружу из этого мира торчит API (просто текстовый протокол). В соответствии с этим API стратегия игрока, написанная на любимом языке, в цикле читает (просто из STDIN) изменения в состоянии мира и отправляет (просто в STDOUT) свои действия. Таким образом и происходит сама игра. Технические подробности — в конце поста.


    Расписание


    Все игры чемпионата будут проводиться в формате 4x1 (4 игрока в игре, каждый сам за себя). Игра может быть рейтинговой (влияет на расстановку игроков в рейтинговой таблице) и нерейтинговой (просто "дуэль", присмотреться к сопернику, потестировать стратегию, этакая песочница).


    28 марта — открываем контест, начинаются нерейтинговые игры по 7500 тиков (тик — это одна неделимая единица времени в игровом мире)
    2 апреля — старт рейтинговых игр по 7500 тиков (раз в несколько минут система будет стартовать несколько игр, выбирая участников по системе trueskill и начисляя очки по результатам)
    19 апреля — TOP участников из песочницы проходят в финал, рейтинговые игры мы останавливаем и даем возможность создавать нерейтинговые игры по 25000 тиков
    23 апреля — полностью останавливаем песочницу и проводим финал. Это будет множество игр по 40000 тиков, подбирать их мы будем так, чтобы в рамках игр 4x1 каждый сыграл с каждым. Потом дарим призы (о них ниже), все участники финала по традиции получают майки на память
    26 апреля мы включим обратно песочницу с нерейтинговыми играми, и эта задача станет второй (вместе с осенней задачкой), которая останется работать вечно.


    Вот так это будет. Мы постарались сделать так, чтобы между важными событиями конкурса было как можно больше выходных. Всё для вас.


    Задача вкратце


    А всё просто. Мы взяли agar.io, восхитились и решили сделать конкурс по механике сей замечательной игры. Сделали. Потом нам стало казаться, что слишком просто. Добавили инерцию при движении, немного физики… Всё ещё простовато. Окей, подумали и решили выставлять на каждую игру собственный набор коэффициентов инерции, ускорения, роста массы и всего того, что и составляет физику этого странного мира. На этом мы и остановились.
    Таким образом, задача игрока сводится к тому, чтобы сначала разобраться с текущими физическими законами (либо всё на игровом поле летает пулей, мгновенно останавливаясь и разворачиваясь, либо ползает на инерции, норовя выйти куда-нибудь на орбиту). Ну а уже потом наступает такое милое сердцу "сожри-их-всех". Более подробные правила — ниже, после призов (да, есть призы).


    Призы


    За первое место дарим новый MacBook Air (или эквивалент по стоимости, у участника будет возможность выразить собственные пожелания).
    Второе и третье места — Apple iPad
    С четвертого по шестое место — Samsung Gear S3. Но, честно говоря, мы сами не знаем, что подарить, набросайте вариантов в комментариях. Мы ж сообщество.
    По традиции, все, прошедшие в финал, получат майки с нашей символикой.


    Правила чуть более подробно


    Здесь я постараюсь неофициально описать правила так, чтобы донести суть механики чемпионата. Итак:


    Игровой мир



    Начнем с шок-контента — игровое поле у нас прямоугольное! Никто никогда так не делал, и вот опять :)
    Отсчет координат начинается из левого верхнего угла. Каждый объект на поле обладает двумя координатами, массой и вектором скорости. Каждый объект — круг.


    Коэффициенты


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


    Объект игрока, движение


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


    Еда


    Есть два способа увеличить собственную массу (а это нужно делать, так как игрок со временем эту массу теряет):


    Во-первых, по игровому полю рассыпано некоторое количество "еды" — это небольшие неподвижные объекты, обладающие определенной массой. При перекрытии такого объекта, игрок добавляет массу такого объекта себе, а объект уничтожается. Время от времени на игровое поле добавляется еда (в рандомном месте, но равнозначно для четырех сторон поля).


    Во-вторых, можно жрать друг друга. Если полностью перекрываются два игрока, то тот, который больше, добавляет себе массу того, который меньше. Съеденный же выносится с поля. Насовсем, до конца игры.


    Звезды смерти


    По факту, это вирус в терминологии agar.io. На карте случайным образом расположено некоторое количество "звезд смерти". Если игрок, уже превышающий массу звезды смерти, сталкивается с ней, то звезда смерти уничтожается. Игрока же разбрасывает взрывом на несколько более мелких частей (их количество, массы и импульсы зависят от многих параметров). После этого игрок управляет уже всеми этими объектами скопом (давая им вектор импульса в одну и ту же точку). В таком виде игрока легче сожрать, но скорость и отклик у более мелких объектов выше. При соприкосновении друг с другом части целого сливаются, так что можно и собраться обратно в нечто большое.


    Деление, выброс массы


    Кроме движения, стратегии игрока доступно еще два действия:
    Деление. Каждая из подконтрольных игроку частей делится ровно на 2 части.
    Выброс массы. Каждая из подконтрольных игроку частей выбрасывает небольшое количество собственной неуправляемой массы, направление которой считается по вектору скорости игрока. Получается этакий "выстрел едой". Если такая штуковина попадает в звезду смерти, то становится её (звезды) частью. "Перекормленная" звезда смерти выбрасывает свою часть в сторону, противоположную последнему выстрелу. Таким образом можно посплитить на части чужую слишком отожравшуюся стратегию.


    Fog of war


    Да, он есть. Видим не всё. Считается эллипсом, с учетом направления движения, зависит от множества параметров (размер группы, массы частей в группе, скорость). В целом, fog of war получился эм… весёлым.


    Выбор победителя


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


    Технические подробности


    В данный момент мы работаем с Go 1.10, Java 1.8, C# Mono 4.3, NodeJS 6, C++11, Python 2.7/3.5, php7. Кроме того, мы постарались максимально упростить добавление новых языков — нам понадобится лишь dockerfile по определенному шаблону, если вы захотите, чтобы ваш любимый язык XXX появился в списке поддерживаемых.
    Максимальный объем исходного кода для одной стратегии — 20 мегабайт в архивированном виде в данный момент.
    Если вы хотите, чтобы в списке уже поддерживаемых языков появились какие-либо библиотеки, нужные вам (мало ли, кто-то решит упороться в ML) — пишите в каментах, поставим всё, что успеем до 25 марта (впрочем, в ходе чемпионата будем по возможности продолжать наполнять docker-образы для ЯП).
    Полные правила на старте чемпионата откроются в этом репозитории.


    Изменения с прошлого чемпионата


    Конечно же, мы не сидим на месте. С прошлого чемпионата:


    1. Был разработан правильный localrunner (написали на C).
    2. Симуляция тоже на C, обсчет стал быстрее по сравнению с python-ом, который был в первом конкурсе
    3. Были добавлены debug-виджеты для дебага игр на сайте (начнется конкурс — увидите)
    4. Переработана схема запуска решений, теперь отдельное решение просто общается с STDIN и STDOUT, без необходимости держать локальный tcp-сервер. Мы делаем это за вас.
    5. Добавились всякие мелочи вроде оценок рейтингом и комментариями отдельных игр, правильного шаринга игр и рейтинга в соцсети… кнопочки, ссылочки, короче, вот этот вот весь вебчик
    6. Новые языки стало добавлять значительно проще, как для участников, так и для нас

    Дизайн, меж тем, тот же. Мы решили окончательно притвориться, что мы так видим… :)


    Погнали?


    Регистрироваться можно уже сейчас на сайте aicups.ru, официальная группа чемпионата — @aicups, официальный канал для тех, кто не хочет в группу — @mrgchamps. Ждем вас, будет весело!

    Mail.Ru Group

    712,00

    Строим Интернет

    Поделиться публикацией

    Похожие публикации

    Комментарии 73
      +2
      Добавьте Tensorflow + Keras, а также xgboost + LightGBM для упоротых любителей ML.
        0
        Записал :)
          0
          тогда уж и котика для коллекции.
          Ну а тензорфлоу это должно быть по стандарту.
          0
          У питона удобные и эффективные библиотеки для решения небольших вычислительных задач. Имхо, возможность их использования ставит в очень неравные условия питон и другие языки, для которых подобных инструментов нет.
            +1
            Честно говоря, первый раз слышу такое мнение. Обычно, наоборот, именно от питонистов в raic и miniaicup слышно что-то вроде «эх, на питоне бы, ну да скорости не хватит, пойду на java/c/XXX»
              0
              А вы PyPy используйте, и тогда ни на что, кроме C/C++, не будет смысла переходить ради перфоманса
                0
                Записал. Нормальный такой списочек уже накопился…
                0
                В raic нельзя было использовать сторонние библиотеки. Питон медленнее, но на java построить модель методами машинного обучения очень сложно, готовые имплементации не идут ни в какое сравнение с питоновскими.
                  0
                  Ну так традиционно весь ML живет на python/R/что-там-еще, но не на джаве.
                  Значит, те же джависты вряд ли будут решать конкурс средствами ML, иначе они пришли бы сразу с python-ом под мышкой :)
                  Получается, вполне равновесная ситуация — джависты/сишники/etc решают стандартно; те же, кто хочет зарешать ML — так или иначе приносят с собой совершенно другой инструментарий.
                  Вот если бы были предпосылки к тому, что задача однозначно лучше решается ML-средствами, можно было бы говорить о несправедливости. Пока что в тг-чате чемпионата наоборот обсуждают, что «вряд ли ML тут затащит». Посмотрим, нам самим интересно :)
                    0
                    Добавьте sklearn, scipy и numpy.
                      0
                      Записал
                        0
                        А также pandas.
              0
              На какие вычислительные мощности можно рассчитывать? Максимальный объем исходников обсуждается?
                0
                max объем исходников обсуждается, по вычислительным мощностям сообщим незадолго до старта. в целом будет что-то типа полгига рама и одно ядро. ну то есть кластер под стратегию не дадим :)
                в финале возможно будет увеличение мощностей для отдельной стратегии
                  0
                  Для ML хорошо бы 50-100мб макс объём и модуль hdf5 вдобавок к тому, что уже выше попросили.
                  А во время боя в файлик можно будет что-то писать и потом считывать в последующих боях?
                    +1
                    Подумаем над всем изложенным. Пока что ничего из этого нет :)
            0
            Традиционно добавьте Free Pascal
              0
              Принял :)
                0
                Пока нет. Когда будет? Уже готов питать стратегию…
              +2
              Версию Node можно более новую? Сейчас уже даже LTS — 8-я (http://nodejs.org), да и если вы докером собираете, то вроде ничего сильно менять не придется, так что если 9-ка будет – совсем хорошо.
              0
              комментарий про бюджет(по курсу 5$/месяц_процессорного_времени) который будет потрачен на запуск стратегий в финале
                0
                думаю, при наличии поддержки джавы добавить Котлин будет несложно :)
                  0
                  Принято
                    0
                    Да и Scala думаю будет так же несложно добавить)
                      0
                      Понято :)
                  +1
                  пусть победитель сыграет с живым человеком в конце (вне конкурса)
                    0
                    Да, было бы круто дать возможность с ним поиграть всем желающим.
                      0
                      А не получится: все игры рассчитываются на сервере, в браузер отправляется только результат)
                      0
                      Идея забавная, вот только почти любой человек сольёт любой стратегии из топ-10. Так со всеми играми подобного плана. Если только пригласить топового игрока agario.
                      0
                      Добавьте PyTorch
                        0
                        А можно Ruby? :)
                        +1
                        А почему C# с Mono, а не с .NET Core? Может, добавите .NET Core 2.0?
                          0
                          Тоже удивлен, почему моно в 2к18, давно уже кора стабильная.
                            0
                            Честно говоря, мы с шарпами не очень дружим. Если поможете с докерфайлом, то не вижу препятствий
                              0
                              На докерхабе у майкрософт есть готовые докерфайлы для разных версий кора: hub.docker.com/r/microsoft/dotnet
                          0
                          Сразу на три предыдущих комментария — да, постараемся сделать
                            0
                            Ни разу не участвовал в подобном. На VS C# Exress 2013 получится что-то сделать или нужны какие-то танцы с бубном? .Net v2.0 выставить или еще что-то?
                              0
                              По идее, если оно компилится под убунту, то сможет работать
                              0
                              А будет ли у ботов non-volatile memory, состояние которой сохраняется между играми?
                                0
                                Буду рад увидеть Rust в списке поддерживаемых :)
                                  0

                                  Отличная новость что песочница — бессрочная!


                                  Для меня каждый раз камнем преткноверия является debug api, в частности, крайне необходима возможность порисовать на экране эмулятора.
                                  Будет ли поддержка этого в будущих соревнованиях?

                                    0
                                    Возможность налепить текстовый бабл есть уже сейчас, над граф-примитивами работаем. Если успеем, то оно может появиться и в текущем соревновании
                                    0
                                    TOP участников из песочницы проходят в финал

                                    а это сколько?
                                      0
                                      видимо 50-100, пока мы и сами точно не можем сказать.
                                      –1
                                      Еще введите отдельный рейтинг для тех, кто использует «обучения с подкреплением».
                                        0
                                        Неплохо было бы добавить Eigen для C++.
                                        0
                                        Простите за офтопик, но хотел спросить когда будет следующий highloadcup?
                                          0
                                          Ориентировочно в мае, но точнее сложно сказать — там очень много писать! Подпишитесь на t.me/mrgchamps, точно не пропустите :)
                                          0

                                          Добавьте, пожалуйста, в C# библиотеки
                                          https://www.nuget.org/packages/System.Numerics.Vectors/
                                          https://www.nuget.org/packages/C5/

                                          0
                                          А сертификаты для https всё ещё не подвезли? :)
                                            0
                                            ¯\_(ツ)_/¯
                                            Почему-то самые простые вещи всегда делаются дольше всего
                                            0
                                            Кхм, есть шанс, что можно будет учавствовать, написав стратегию на, кхе-кхе, Swift? :)
                                              0
                                              Было бы круто Lua добавить, ибо для игровых скриптов я ничего лучше придумать не могу, да и вообще приятный язык :っ
                                                0
                                                Scala
                                                  0
                                                  В ответ на предыдущие каменты — можно посмотреть на докерфайлы здесь github.com/MailRuChamps/miniaicups/tree/master/agario/dockers и сделать по аналогии пул-реквест, тогда добавление любимого языка пойдет гораздо быстрее :)
                                                    0
                                                    А когда будут (и будут ли) примеры по стратегиям?
                                                      0
                                                      Иногда нравится читать здесь многословные комментарии…
                                                      Это история началась с прошлого осеннего конкурса AIcup2017 в котором принял участие.
                                                      Сразу прошу прощения за ошибки в русском языке и сумбурность комментария.
                                                      Коротко про мой уровень программирования, лет 20 не программировал, последнее достижение 96 год что-то на Паскале от Борланд и БД от Микрософт.
                                                      По образованию МИЭМ.
                                                      Это важно так как в прошлом конкурсе решил попробовать силы на C#, который уже год как изучаю в виде небольших программ с мыслью ребенку передать знания )
                                                      Конкурс мальчику 13 лет не понравился, поэтому остался один на один с документацией.
                                                      Размер API на несколько страниц команд и параметров впечатлил.
                                                      Участие принял с начала конкурса. Место занял в третьей сотне, причем на первом этапе где проходят первые 300, занял 301(я так люблю по грани) и пришлось догонять через песочницу. Потом во втором этапе примерно делил 250-330 места.
                                                      Наблюдения и откровения(я иногда реально туплю поэтому откровения):
                                                      -К середине конкурса понял, что здания прозрачны для движения техники, точнее это зоны, а не здания. Документация об этом молчала, хотя на вид была избыточна.
                                                      -Ближе к концу конкурса нашел статью на английском языке, где коротко, но предельно ясно рассказывалось о похожем конкурсе и вычислительных методах принимавшей в нем участие команды, хоть пару формул написали, но в основном потенциальные поля, как решение всех проблем.
                                                      -Организаторы заиграли две майки, две программы было привет ребенку, ни вживую забрать, ни по почте не получилось, майки это символ, а не материальные блага )

                                                      До этого не сталкивался с клиент серверной архитектурой для игр, пришлось изучить после конкурса. После получения мейла о мини конкурсе даже набросал прототип ) youtu.be/0a-snQx2gQQ
                                                      Так вот, в конкурсе конечно приму участие, хотя с# моно немного настораживает. Так то в VStudio с# NET, но надеюсь на уровне компиляторов стандартный код пройдет.
                                                      Скорее всего опять потенциальные поля будут доминировать, одно ядро требует простых и действенных решений.
                                                      А так в режиме соревнований конечно здорово придуманно, прямо чувствуешь как там противники стучат по клавиатуре )

                                                        0
                                                        Потенциальные поля в действии
                                                        youtu.be/axVv6Ht-f2A
                                                          0
                                                          Похоже, что при потенциальных полях траектории получаются не оптимальными. Амебы кружатся вокруг еды как Гагарин на спутнике вокруг земли.
                                                            0
                                                            В данном конкурсе ввели массу и соответственно инерцию. Потенциальные поля учитывают только расстояние. поэтому и возникает сдвиг относительно цели.
                                                        0
                                                        Насчёт призов(хочу такие):
                                                        a) Intel NUC
                                                        b) Intel Compute Stick
                                                          0
                                                          Решил уточнить:
                                                          INTEL NUC BOXNUC5PGYH0AJ
                                                          Intel® Compute Stick STK1AW32SC // тут не уверен, пишут что он немного пищит при нагрузках.
                                                            0
                                                            Где же localrunner под разные платформы и библиотека json?

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое