Вот уже месяц длится Russian AI Cup 2016. Это соревнование по программированию искусственного интеллекта, которое проходит в форме игры. Мы подробно рассказывали об идее и правилах нынешнего года здесь.

Но со старта чемпионата многое изменилось. Участникам пришлось попотеть, чтобы разобраться в непростых правилах игры, а нам — чтобы справиться с тестирующей нагрузкой. Редактировались правила, оптимизировался код, сменялись раунды и банились игроки. Рассказываем вам полную историю CodeWizards 2016.

Открытый бета-тест первого раунда


7 ноября был запущен бета-тест. В течение недели участники писали стратегии по правилам первого раунда, а организаторы фиксили баги и балансировали правила.

Много объектов. CodeWizards — это первая игра с большим количеством объектов. Во все предыдущие годы мы ограничивалось десятками, сейчас их может быть около пятисот: это деревья, миньоны, строения, снаряды и так далее. Такое количество объектов плохо влияет на работу стратегий и тестирующей системы.

Большое потребление оперативной памяти. Описания объектов занимали слишком много места в ОЗУ. Игра долго загружалась и тормозила. Самое неприятное — она могла даже упасть из-за того, что не укладывалась в лимиты памяти, отведённые для одной вкладки браузера.

Основную работу мы провели над визуализатором. Вместо того чтобы заново загружать изменяемые объекты, мы стали хранить историю их изменений. Все положения 3D-моделей мы подсчитываем в начале игры. Это немного замедляет загрузку, зато увеличивает fps. Нам удалось снизить среднее количество потребляемой оперативной памяти почти вдвое: с 1 Гб до 500 Мб. Когда всё заработало, мы добавили в игру звуки, чтобы наблюдать за результатами было интереснее.

Медленная отправка данных. Ещё одна сложность, связанная с большим количеством объектов: необходимость их пересылки стратегии участника. Медленные языки, такие как Ruby или Python, едва успевали справиться с приёмом и передачей данных. Если в стратегию добавлялась какая-то логика, она не могла преодолеть временной лимит и отключалась тестирующей системой.

Мы внедрили специальный механизм кеширования. Он позволил не передавать объекты, которые не изменились со времени прошлой отправки. Это было непросто: мы обновили код взаимодействия на всех языках программирования. Сейчас у нас есть несколько участников, прошедших во второй раунд на Ruby. Python же используется многими топ-игроками и спокойно конкурирует с быстрыми языками вроде Java, C# или C++.

Изменения правил игры. Мы внимательно следили за отзывами игроков на форуме. Они помогли нам сбалансировать правила и сделать игру более ровной. Помимо некоторых незначительных изменений стоит отметить увеличение урона зданий, увеличение количества баллов за подбор бонуса со 100 до 200, а также появление бонусов парами, а не случайно в одной из двух точек. В начале игры никто не боялся башен, а ходить за бонусами было невыгодно: очков они давали мало, а могли и вообще не появиться.

Новые языки. Как и в прошлые годы, сообщество расширило список языков, на которых можно писать стратегии. Теперь Russian AI Cup поддерживает сразу 10 языков. Добавились D, Go, JavaScript и Scala. Спасибо авторам языковых пакетов!

Итоги бета-теста. В первую неделю на чемпионат зарегистрировалось 650 программистов. Мы внимательно читали форум и продолжаем это делать. Всё, что предлагается, мы оцениваем и большинство идей берём в разработку. Мы рады, что в чемпионате участвуют адекватные и лояльные игроки. В основном это разработчики со стажем. Спасибо!

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


25 и 26 ноября прошел первый раунд чемпионата. Для участия в нём мы отобрали 1090 лучших стратегий из 1500 поступивших к тому моменту. Первый раунд состоял из двух этапов по 12 часов с перерывом в 24 часа. Во время них тестирующая система комплектовала и запускала игры. Итоговый рейтинг основан на результатах 40 сражений.

Поздравляем победителей, прошедших во второй раунд! А остальным напоминаем о доборе участников из Песочницы. Оттуда во второй раунд попадут 60 лучших стратегий, не прошедших по итогам первого раунда.

Жулики :(


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

Такие участники есть и в Топ-300, что могло бы дать им право на получение двух или более футболок за прохождение в раунд 2. Даже зная об этом, ни один из таких участников не уведомил жюри соревнования о нарушении и не попросил заблокировать все свои учётные записи, кроме одной.

В этот раз мы решили ограничиться строгим предупреждением. Упомянутые участники не будут дисквалифицированы, однако они не пройдут дальше по итогам раунда 1. Вместо них в раунд 2 попадут следующие по списку; счастливчики, разумеется, будут уведомлены об этом по электронной почте.

Бета-тест второго раунда


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

Новые правила. Кроме того, мы вновь внесли ряд изменений в правила.

  • Количество жизненной энергии зданий во всех режимах игры уменьшено вдвое

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

  • Коэффициент опыта за повреждение и уничтожение зданий увеличен в два раза

Поскольку набор опыта зависит от количества урона, мы подняли этот коэффициент, чтобы не замедлять прокачку героев.

  • Количество опыта за подбор бонуса уменьшено с 200 до 150

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

  • Мультипликатор урона от бонуса empower снижен с 2 до 1,5

Получалось, что этот бонус был значительно выгоднее двух других. Мы добавили в игру немного баланса.

  • Длительность действия заклинаний «Ускорение» и «Щит» увеличена вдвое. Волшебник, накладывающий магический статус на любого дружественного волшебника, автоматически получает такой же статус

MOBA — командный жанр. Мы хотим увидеть взаимодействие между участниками игры, несмотря на то что зачёт в чемпионате личный.

Приглашаем принять участие в чемпионате


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

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


  1. PQR
    09.12.2016 20:47

    Теперь Russian AI Cup поддерживает сразу 10 языков. Добавились D, Go, JavaScript и Scala.


    А как можно добавить язык к соревнованию? Я бы, например, хотел на Clojure или PHP попробовать.


    1. sat2707
      13.12.2016 15:14

      Обычно сообщество само и готовит новые языковые пакеты. То есть, захотел php — написал для себя либу, поделился :)


  1. QtRoS
    10.12.2016 11:36

    Игра стала намного более рандомной (сильно зависит от случая), а так же легко сноуболится (начальное преимущество быстро увеличивается). В оригинальной доте есть специальные коэффициенты за убийство более прокаченных врагов для того, чтобы сделать камбэк возможным. К сожалению, тут нет такого.
    А, и защита от Раша очень трудна. Я видел однажды как довольно скиловый AI-игрок шел по линии один (его потенциальные враги сгруппировались на другой линии), и почти уже был готов убивать трон, но бескомпромиссно пошел назад, так как вторую башню на центре начали атаковать превосходящие силы. На самом деле та атака захлебнулась, но персонаж потратил драгоценное время и шанс выиграть. В оригинальной доте есть телепорт.
    И еще одна мысль — малое ХП зданий намекает использовать hit&run файрболлом. Никакого красивого командного херокилла станами (заморозкой) увидеть не придется…
    P.S. Не претендую на авторитетное мнение, средний игрок из топ 300 :)
    P.S.S. Знаю, что дота не единственная моба, но она можно сказать закон жанра.


    1. MiXei4
      11.12.2016 04:11

      Мне понравилась одна игра, где человек шёл по линии один, против него был один защитник. Он снёс вторую башню и пошёл на трон. В это время защитник ещё был жив. Да у атаки было гораздо больше миньонов, да у защитника ниже уровень и меньше жизни, но снос трона после сноса второй башни и с момента когда защитник ещё был жив занял 900 тиков. 900 тиков не хватит, чтобы прибежать с чужой половины. А если и успеешь, но прибежишь без файрболла к остаткам трона, то лучше бы не прибегал :)


    1. DocJester
      13.12.2016 15:08

      Если уж на то пошло, то в современном мире «закон жанра» — это Лига Легенд.
      Да, первоначально все от DotA началось, но все же Лига не только является самой популярной MOBA-игрой в мире, но и довольно интересно развила жанр, на мой взгляд.


      1. QtRoS
        14.12.2016 19:23

        Хм, а что по деньгам в киберспорте? Дота на две головы выше.


    1. kip_ind
      13.12.2016 15:08

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


  1. DenomikoN
    13.12.2016 15:08

    К сожалению этот год выпал на предновогодние релизы, даже не было возможности начать думать о стратегии. Надеюсь песочница ещё просуществует какое-то время после завершения чемпионата?
    Было бы интересно потом сравнить результат с топовыми стратегиями, но я так понимаю такой возможности не будет? (разве кто опубликует свои исходники)


    1. sat2707
      13.12.2016 15:11

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


  1. saslanbek
    13.12.2016 15:08

    А что там со Swift?