Завершился первый раунд russian ai cup

Как создать лучшего бота для игры в стиле Dota — интервью с победителем соревнования Russian AI Cup

Недавно закончился финальный раунд ежегодного чемпионата Russian AI Cup — организуемого Mail.Ru ежегодного конкурса, на котором участники пишут ИИ для победы в выбранной организаторами компьютерной игре. В этом году задачей было написание бота-волшебника в игре, подобной Dota 2. Мы пообщались с победителем — Антоном Чумаченко — и узнали, что же именно помогло ему выиграть.

Привет, Антон. Какие в целом впечатления у тебя от соревнования?

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

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

Победа далась нелегко и в какой-то степени благодаря везению, так как отрыв от 2-ого места составил всего лишь 4 балла, а от 3-его — 6 баллов (у Антона 1250 баллов в финале — прим.ред).

У тебя уже был опыт участия в russian ai cup?

Да, я участвовал во всех чемпионатах Russian Ai Cup, начиная с 2012-ого года, и каждый раз результат был все выше и выше. Лучшим результатом до этого года у меня было 8-ое место в 2015-ом году.

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

И первое место в песочнице (сразу после победителей финала) подарило мне вместе с ценным подарком веру в собственные силы и в то, что выучить что-то и улучшить свои способности никогда не поздно.

Как ты проектировал свою стратегию?

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

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

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

Визуализатор от организаторов

Собственный визуализатор Антона

Обратите внимание

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

В общем случае объекты делятся на 2 типа: которые притягивают к себе (например, вражеское строение, которое нужно уничтожить), и которые отталкивают (например, деревья, которые нужно было обходить, чтобы не застрять в них).

Одновременно точка может и притягивать, и отталкивать: например, мы хотим издалека стрелять во врага, но не подходить к нему слишком близко, чтобы не получать урон.

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

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

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

Помогло ли умение играть в DOTA, на которую похож формат игры?

Умение играть в доту помогло, но косвенно: был повышенный интерес в самом начале соревнования, вследствие чего быстро забрался в верхнюю часть песочницы. А дальше уже дополнительно подстегивало желание не потерять набранных позиций.

Также считаю, что помог победить опыт настройки баланса и подбор коэффициентов, который я получил при написании пары своих небольших игрушек. В данном чемпионате были достаточно важны эвристические предположения, такие как «пойти за бонусом на 37-ой секунде или на 38-ой».

Математически все аспекты данного чемпионата запрограммировать было очень сложно, так как время ограничено.

Ты писал свою стратегию на C++, почему выбор оказался таким?

C++ я выбрал потому, что большинство крупных работ выполнял именно на нем, также не хотел упираться в лимит по времени, отведенный на стратегию, если вдруг будут какие-то сложные вычисления. Хотя особенности С++ я использовал мало, поэтому не так уж и важно, на каком языке писать.

Лучше выбрать тот инструмент, для которого не потребуется каждые 15 минут лезть в гугл и искать примеры инициализации массивов. Правда, это утверждение хорошо подходит, если цель — занять место повыше.

А целью может быть еще и изучение нового языка (такое наблюдалось у некоторых из участников).

Как можно подготовиться к этому соревнованию?

Заранее глобально подготовиться сложно. В целом могу посоветовать побольше изучить теорию графов, в частности поиск путей, и перебор с отсечением (это наиболее популярные виды алгоритмов, которые использовались на прошедших 5-ти Russian AI Cup).

Также полезным будет прочтение статей победителей прошлых лет и изучение их кода. Хорошо потренироваться в написании ботов можно на сайте www.codingame.com. Еще раз повторюсь, что написание своего визуализатора увеличивает скорость отладки.

Я для его написания использовал OpenGL, но, возможно, кому-то будет более комфортно использовать другие средства для отрисовки простой графики.

Порекомендуешь принять участие в чемпионате?

Конечно, оно того стоит! Неважно, какое место я занимал: 1-ое или 200-ое — во время чемпионата я получал массу удовольствия, отличную разминку для мозгов, дополнительные знания и навыки, а также знакомился с собратьями по интересам.

Благодарим Антона за предоставленное интервью.

Игры, для прохождения которых нужно писать программный код, в последнее время набирают популярность. Помимо участия в Russian AI Cup, «поиграть в программирование» дают возможность и другие компьютерные игры: мы собрали подборку игрушек, которые подойдут новичкам, а также коллекцию проектов, которые приглянутся уже более опытным программистам.

А о написании искусственного интеллекта для прохождения игры у нас есть целый цикл статей: в нем рассказывается о написании ИИ для игры в хоккей.

Источник: https://tproger.ru/interview/russian-ai-cup-winner/

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

Пару дней назад окончился первый раунд ежегодного чемпионата Russian AI Cup. И по его результатам мы сегодня подготовили для вас всевозможную статистику.

К моменту начала первого раунда более 1500 участников загрузили в систему свои стратегии. Из них 900 лучших по значению рейтинга в Песочнице сражались за право участвовать во втором раунде чемпионата.

Конкурс составлял три человека на место, поэтому адреналина хватило всем.

Первый раунд состоял из двух частей, каждая по 12 часов непрерывного обсчета. Между частями был суточный перерыв, во время которого участники имели возможность доработать свои стратегии. В среднем конкурсанты приняли участие более чем в 100 играх в ходе каждой из частей первого раунда.

Важно

Любопытно, что во второй части удалось провести чуть меньше боев, что, наверное, объясняется усложнением стратегий и проведением работы над ошибками в ходе суточного перерыва.

Результаты игр на сайте обновлялись не сразу, а с 15-ти минутной задержкой.

Это сделано специально для создания большей интриги, в эти 15 минут многие из участников смогли почувствовать себя Анатолием Тарасовым, сопереживая своей команде. А уж сколько адреналина выплеснулось в ходе просмотров самих игр!

Что касается общей статистики, то мы хотим обратить ваше внимание на несколько любопытных моментов.

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

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

Итак, в первом раунде победу одержал загадочный участник recar, оставивший в профиле очень мало информации о себе. Победитель Чемпионата 2012-го года Николай «Mr.Smile» Вабищевич занял достойное шестое место.

Результаты раунда — http://russianaicup.ru/contest/2/standings

Статистика

Рейтинг городов:

№ГородКоличество участниковРейтингТоп-3
1 Москва 97 559,80 cheeser Mr.Smile santa324
2 Минск 55 529,51 Romka paul_ik Contemplator
3 Санкт-Петербург 55 515,95 NS_Serg Nikita.Podguzov turbotankist
4 Екатеринбург 15 465,58 mopdobopot anton_sh Fireworks
5 Нижний Новгород 15 455,03 sokolik tegArt partizan
6 Харьков 8 437,82 sdya aszinovyev serlis
7 Ижевск 14 434,45 4stalker LOKKI Poma
8 Челябинск 12 425,61 valex crain ildarka
9 Саратов 8 420,41 meradin RomanX Eran
10 Иваново 8 410,93 mortido PieceOfNonsense aides

Распределение по городам:

Распределение по странам:

Распределение по языкам:

Распределение по возрасту:

Суммарный размер посылок по языкам:

Python 2 45.66 MB
Python 3 33.25 MB
C# 201.96 MB
C++11 103.19 MB
Pascal 17.66 MB
Scala 10.71 MB
Ruby 18.36 MB
C++ 123.02 MB
Java 254.23 MB

Кстати, обратите внимание на средний размер посылок на разных языках:

Python 2 14.78 kB
Python 3 10.08 kB
C# 22.56 kB
C++11 21.35 kB
Pascal 9.92 kB
Ruby 15.55 kB
Scala 24.58 kB
C++ 15.17 kB
Java 19.25 kB

С чем, по вашему мнению, связан средний размер посылок на языке Scala (24,58 Кб), учитывая присущую ему лаконичность?

По ссылкам ниже вы можете посмотреть ход трёх особенно любопытных игр:

russianaicup.ru/game/view/562470 — Победитель песочницы recar против aton4eg
russianaicup.ru/game/view/661824 — Победитель чемпионата 2012-го года Mr.Smile против SkyHawk
russianaicup.ru/game/view/639640 — чемпион мира ACM-ICPC 2012 и 2-е место RCC прошлого года tourist против Moonkin63

Второй раунд чемпионата начинается 4 октября. Но участвовать в нём могут не только 300 лучших участников первого раунда, но и первые 60 конкурсантов по рейтингу Песочницы. Подробнее о правилах второго раунда вы можете прочитать на сайте чемпионата. Даже если вам не удалось пройти во второй раунд, то вы всё ещё можете побороться за ценные призы, вручаемые за успехи в Песочнице.

Источник: https://www.pvsm.ru/programmirovanie/70764

Russian AI Cup 2014 — CodeHockey

Конкурс состоит из 3 (трёх) этапов, каждый из которых завершается определением Победителей. Последний этап Конкурса является решающим для Участников конкурса в состязании за получение звания Победителя Конкурса, занявшего соответствующее призовое место. Срок проведения Конкурса: с 00.

00 часов 8 сентября 2014 года до 24.00 часов 19 октября 2014 года по Московскому времени.

Сроки начала и окончания этапов Конкурса:

  • первый этап – с 00 часов 00 минут 27 сентября 2014 года до 24 часов 00 минут 28 сентября 2014 года;
  • второй этап – с 00 часов 00 минут 4 октября 2014 года до 24 часов 00 минут 5 октября 2014 года;
  • третий этап (заключительный) – с 00 часов 00 минут 11 октября 2014 года до 24 часов 00 минут 12 октября 2014 года.

В зависимости от этапа соревнования у вас в команде будет от 2 до 6 полевых хоккеистов (при этом одновременно на площадке может находиться не более трёх, остальные должны сидеть на скамейке запасных), а также вратарь. 

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

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

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

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

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

Совет

Турнир проводится в несколько этапов, которым предшествует квалификация в Песочнице. Песочница — соревнование, которое проходит на протяжении всего чемпионата. В рамках каждого этапа игроку соответствует некоторое значение рейтинга—показателя того, насколько успешно его стратегия участвует в играх.

Читайте также:  Искусственный интеллект создает музыку

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

Если победа или поражение произошли в дополнительное время, то рейтинг меняется значительно меньше обычного.

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

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

Начальное значение рейтинга на каждом основном этапе турнира равно 0. За каждую игру участник получает определённое количество единиц рейтинга в зависимости от занятого в ней места. А именно:

  • За победу в основное время участник получает 3 единицы рейтинга, его противник получает 0.
  • За победу в дополнительное время участник получает 2 единицы рейтинга, его противник получает 1. 
  • За ничью оба участника получают по 1 единице рейтинга.

Сначала все участники могут участвовать только в играх, проходящих в Песочнице. Игроки могут отправлять в Песочницу свои стратегии, и последняя принятая из них берётся системой для участия в квалификационных играх. Каждый игрок участвует примерно в 1 квалификационной игре за час.

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

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

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

Обратите внимание

По итогам игр в Песочнице происходит отбор для участия в Раунде 1, в который пройдут 900 участников с наибольшим рейтингом (при его равенстве приоритет отдаётся игроку, раньше отправившему последнюю версию своей стратегии).

Этапы турнира:

  • Раунд 1 проверит ваши навыки управления командой из двух хоккеистов. Этап пройдёт по упрощённым правилам, о чем подробнее читайте далее. Этот этап, как и все последующие, состоит из двух частей, между которыми будет небольшой перерыв (с возобновлением работы Песочницы), который позволит улучшить свою стратегию. Для игр в каждой части выбирается последняя стратегия, отправленная игроком до начала части. Игры проводятся волнами. В каждой волне каждый игрок участвует ровно в одной игре. Количество волн в каждой части определяется возможностями тестирующей системы, но гарантируется, что оно не будет меньше десяти. 300 участников с наиболее высоким рейтингом пройдут в Раунд 2. Также в Раунд 2 будет проведён добор 60 участников с наибольшим рейтингом в Песочнице (на момент начала Раунда 2) из числа тех, кто не прошёл по итогам Раунда 1.
  • В играх Раунда 2 будет участвовать по 3 хоккеиста с каждой стороны. Участникам придётся не только координировать возросшее количество юнитов, но и учитывать разницу между ними: на этом этапе вводится понятие атрибутов хоккеистов. Между этапами будет некоторый перерыв, так что у вас есть возможность доработать стратегию. Усложняет задачу то, что после подведения итогов Раунда 1 часть слабых стратегий будет отсеяна и вам придётся противостоять более сильным соперникам. По итогам Раунда 2 лучшие 50 стратегий попадут в Финал. Также в Финал будет проведен добор 10 участников с наибольшим рейтингом в Песочнице (на момент начала Финала) из числа тех, кто не прошёл в рамках основного турнира.
  • Финал является самым серьёзным этапом. После отбора, проведённого по итогам двух первых этапов, останутся сильнейшие. И в каждой игре вам придётся сойтись лицом к лицу с одним из них. У игрока в распоряжении находится команда из 6 хоккеистов, из которых одновременно на игровой площадке находятся только трое, а остальные сидят на скамейке запасных. В игру вводится понятие выносливости. Немного выносливости тратится на каждое действие хоккеиста. Выносливость восстанавливается сама по себе для всех хоккеистов, но для сидящих в запасе скорость восстановления заметно выше. Система проведения Финала имеет свои особенности. Этап по-прежнему делится на две части, однако они уже не будут состоять из волн. В каждой части этапа будут проведены игры между всеми парами участников Финала. Если позволит время и возможности тестирующей системы, операция будет повторена.

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

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

Призы за Песочницу распределяются на основании занятого места после этого упорядочивания. Лучшие шесть участников Песочницы награждаются ценными подарками.

Игровой мир представляет собой некоторую двумерную прямоугольную область. Размер области — 1200 × 800. Ось абсцисс в этом мире направлена слева направо, ось ординат — сверху вниз, угол 0.

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

Ниже приведены две схемы игровой площадки с начальным расположением команд из двух и из трёх хоккеистов:

Время в игре дискретное и измеряется в «тиках». В начале каждого «тика» игра получает от стратегий желаемые действия хоккеистов в этот тик и обновляет состояние хоккеистов в соответствии с этими желаниями и ограничениями мира.

Затем происходит расчёт изменения мира и объектов в нём за этот тик, и процесс повторяется снова с обновлёнными данными. Базовая длительность каждой игры — 6000 тиков.

Важно

В случае равного счёта по окончании основного времени игра продлевается на 2000 тиков дополнительного времени. Помимо этого, игра не может закончиться в течение 300 тиков после забитого гола.

Эти 300 тиков являются периодом «вне игры», о чём подробнее читайте в следующем разделе. Таким образом, максимально возможная длительность игры составляет 8300 тиков. Если стратегии обоих участников «упали», игра завершается преждевременно.

«Упавшая» стратегия больше не может управлять хоккеистами. Стратегия считается «упавшей» в следующих случаях:

1) Процесс, в котором запущена стратегия, непредвиденно завершился, либо произошла ошибка в протоколе взаимодействия между стратегией и игровым сервером.

2) Стратегия превысила одно (любое) из отведённых ей ограничений по времени. Стратегии на один ход хоккеиста выделяется не более 2 секунд реального времени. Но в сумме на всю игру процессу стратегии выделяется

50××+2000 (2.1)

миллисекунд реального времени и

15××+2000 (2.2) 

миллисекунд процессорного времени.

Несмотря на то, что ограничение реального времени заметно выше ограничения процессорного времени, запрещено искусствен- но «замедлять» тестирование стратегии командами типа «sleep» (равно как и пытаться замедлить/дестабилизировать тестирующую систему другими способами).

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

времени — 6000 тиков. Ограничение по времени остаётся прежним, даже если реальная длительность игры отличается от этого значения. Все ограничения по времени распространяются не только на код участника, но и на взаимодействие клиента-оболочки стратегии с игровым симулятором.

3) Стратегия превысила ограничение по памяти. В любой момент времени процесс стратегии не должен потреблять более 256 Мб оперативной памяти.

Источник: https://devtype.blogspot.com/2014/09/Russian-AI-Cup-2014-CodeHockey.html

Russian AI Cup 2018, история 9 места

Меня, как и в прошлом году, зовут Андрей Рыбалка, только в этот раз мне 33. И, раз уж я оказался в десятке лучших, я решил снова поделиться своим подходом к написанию игрового бота для Russian AI Cup 2018.

В этот раз заданием был футбол. Сама задача несколько напоминала RAIC 2014 года, когда был хоккей, но вот решение было совсем другим.
Мир в этот раз был трёхмерным и эта трёхмерность использовалась по полной программе. Сама игра больше всего напоминала Rocket League.

Совет

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

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

Кратко о турнирной системе

Для начала даётся 2 недели на разработку. Затем проходит первый раунд. 300 лучших из него проходят дальше.

После раунда правила игры меняются (а конкретно, в игру добавляется нитро) и даётся ещё 2 недели, по истечению которых проходит второй раунд.

Затем правила снова усложняются (добавляется третий футболист), даётся ещё неделя и играем финал.

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

Техническая часть будет ниже. Кому история неинтересна, можно скроллить вниз, пока не станет хорошо.

Первый раунд

Начал, как и большинство, с недели беты. Времени тратил много, по 4+ часа каждый вечер. Прежде чем залить первую версию, прошёл несколько итераций

кодим, пока не начнёт обыгрывать предыдущую версию — собираем — считаем текущую версию предыдущей — повторяем.

С первой заливкой не торопился и она произошла за несколько дней до раунда. И, поскольку, до сих пор мой бот ни с кем не играл, я понятия не имел, на каком я вообще свете и на какие позиции в рейтинге могу претендовать. Когда же я увидел, что выиграл уже более 100 игр подряд без единого проигрыша, успокоился.

Обратите внимание

В общем, первый проигрыш у меня был, кажется, на 12-м месте, по таймлимиту, а первая проигранная по счёту игра уже в топ 10. Короче говоря, я понял, что шансы попасть во второй раунд, куда проходит топ 300, у меня есть.

Поэтому я не стал гнаться за позицией в нём и ничего уже больше для раунда не заливал, а просто продолжал работу.

На тот момент я видел, что ещё много пространства для улучшения и без подключения нитро (которое появлялось после 1-го раунда), поэтому сосредоточился на основной части стратегии, понимая, что до второго раунда ещё 2 с лишним недели и нитро я успею прикрутить.

Второй раунд

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

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

За следующие 3 недели до конца чемпионата над стратегией поработал в сумме может часов 20.

В результате, во втором раунде мой бот в принципе не знал, что в игре есть нитро, но каким-то образом всё равно занял 16 место.

Финал

В финале добавлялся третий футболист. Я писал на медленном Java, а не на C++, как 7 из 8 человек выше меня в рейтинге, и мой бот и до этого нередко падал в таймаут, так что с появлением третьего игрока, падать стал в 100% игр. К счастью, игры в песочнице создаются в случайном формате, так что я автоматически

проигрывал только каждую третью игру и потому улетел вниз не слишком сильно. Кажется, упал до 18 места.

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

Добавил совсем простое нитро, направленное строго вверх, сделал так, чтобы два атакующих прекратили бежать в одну и ту же точку и сталкиваться там друг с другом, и урезал для игры 3х3 всё, что мог, начиная от глубины просчёта и заканчивая точностью симуляции, чтобы только бот не умирал по таймауту.
В таком виде оно и играло финал.

Читайте также:  "эволюция" в архангельске!

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

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

Итого, прогнав тесты и увидев счёт 395:254 против предыдущей версии, на этом успокоился. Это позволило мне взять 9-е место в финале.

Финал песочницы

Я продолжал болеть и большую часть недели над ботом не работал. За сутки до конца увидел, что несколько человек залили свежие версии, которые часто выигрывают у меня и могут выкинуть из призовых мест песочницы. Так что я потратил ещё пару часов.

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

На тот момент оно работало плохо, но я довёл её до ума, прогнал тесты, увидел,
что выигрывает у предыдущей версии почти вдвое по счёту и залил.

Важно

Итого, на момент остановки я был на 10-м месте в общей таблице, что соответствует 4-му в финале песочницы.

Заранее прошу прощения в случае, если будут неточности в терминологии. Также, я пишу по памяти, так что возможно, что где-то я опишу не финальную версию.

Итак, в основе лежат генетические алгоритмы. Хромосома состоит из нескольких генов:

  • Дробное число в диапазоне -PI..PI, задающее направление движения
  • Целое число в диапазоне 0..10, задающее количество повторений этого действия
  • Дробное число от 0 до 1. Если значение выше какого-то порога, делаем прыжок

Генотип может включать в себя разное количество хромосом, но таким образом, чтобы суммарное число действий (включая повторения) было равно 40.

Изначально создаю несколько десятков случайных генотипов. К ним добавляю:

  • Траекторию прямо на мяч
  • Прямые траектории во все стороны, всего 10 штук со смещением в 36 градусов
  • Генотип, который просто ничего не делает (без него бот всегда куда-то бежит, даже если он уже стоит в оптимальной точке)
  • Лучший генотип с предыдущего тика

Дальше это всё симулируется и прогоняется через оценочную функцию. N лучших генотипов “выживают” и клонируются M раз с мутациями. При мутации каждый ген изменяется в заданном диапазоне с вероятностью 10%. Ну и это повторяется на протяжении нескольких поколений.
Скрещивания нет, в этой задаче не вижу в нём никакого смысла.

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

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

Также, просчёт прерывается досрочно (но не ранее 5-го поколения), если найдена траектория с приемлемой оценкой.

Макро

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

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

Если мяч на стороне противника и летит в сторону его ворот, можем сходить за нитро.

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

Совет

Иначе, если мяч слишком далеко, нападающий бежит по прямой к ближайшей точке касания мяча с полом, в которой он может перехватить мяч (если в точку первого касания не успеваем — проверяем следующую и т.д.)

В противном случае (когда мяч досягаем), атакующий бежит туда, куда скажет ему функция оценки. Да, и ещё, если недалеко лежит нитро и мы можем его подобрать, подбираем.

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

Также я каждый тик разово симулировал мяч на 100 тиков вперёд со 100 микротиками (с кешированием).
Эта траектория использовалась во многих местах. К примеру:

  • Для определения точек касания мяча с полом
  • Для выяснения, угрожает ли мяч моим воротам и нужно ли переключать вратаря в режим симуляции

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

К слову, писать Footballist было лень, слова Player, Robot были зарезервированы стратегией,
так что мой класс-обёртка назывался просто Dude 🙂

Симуляция

В большинстве случаев она проходила с одним микротиком, но в некоторых ситуациях переключалась на accurate режим с большим числом микротиков (в начале на 100, затем снизил до 50 в игре 2х2, поскольку тесты показали, что разница в результатах в пределах погрешности, и до 10 в 3х3, ибо в противном случае улетал в таймауты).

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

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

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

Кроме того, я также симулировал и других футболистов (и своих и чужих), если они находились в воздухе (а следовательно, их траекторию легче предсказать), либо были близки к мячу. Для противников в итоговой версии использовалась упрощённая версия моей же стратегии принятия решений, которая запускалась раз в 5 тиков (чаще не позволяло быстродействие).

При симулировал каждого футболиста, я просчитывал себя, мяч и других футболистов на 40 тиков вперёд (мой лимит количества действий в генотипе) и затем ещё на столько же тиков симулировал один только мяч.

Нитро

Простое до неприличия.

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

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

Функция оценки

Сумма score-ов на каждом тике с затуханием на 2% в тик.

Самым большим весом, само собой, обладал гол. На его вес влияли несколько вещей:

  • Расстояние от мяча от вражеского вратаря в момент гола (чем дальше — тем лучше)
  • Y координата мяча (т.к. в верхней части ворот его гораздо тяжелее отбить)
  • Скорость мяча по оси Z (которая направлена к вражеским воротам)

При атаке на меня, всё точно так же, только с противоположным знаком.

Далее, для атакующего, общий score зависел от:

  • Расстояния от футболиста до мяча (чтобы он бежал к мячу даже если не может его ударить)
  • Штрафа за прыжок (чтобы прыгал только если это принесёт столько очков, что они превысят этот штраф)
  • Расстояния на очередном тике симуляции от мяча до противников
  • Координаты Y мяча (чем он выше, тем меньше шансов у врага его перехватить)
  • Косинуса угла между направлением мяча и центром вражеских ворот
  • Флага, коснулся ли я мяча
  • Флага, коснулся ли враг мяча
  • Бонуса за подбор нитро

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

Для вратаря:

  • Бонус за расстояния до мяча, скорость мяча по Z, позицию мяча по Y
  • Штраф за прыжок
  • Штраф за нахождение мяча в зоне перед моими воротами
  • Учитывалось расстояние до врагов и до моих нападающих (чтобы мяч летел от врагов подальше, но, по возможности, подлетел поближе к моим нападающим)
  • И ещё несколько мелочей.

Machine Learning

Было самую малость в одной из веток гита в качестве эксперимента. Но мне кажется, упомянуть всё равно стоит. Довести до ума не успел (да и не уверен, что имело смысл).

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

Но я сразу понимал, что не могу себе позволить не только нейросетку, но и вообще ничего серьезного, ибо это нужно было бы выполнять 80 раз на траекторию. Ну пусть даже 40 или 20, если считать не каждый тик, но всё равно, у меня не было вообще никакого запаса по времени, так что эти варианты я даже не рассматривал.

Вот что я сделал:

Обратите внимание

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

Все координаты я считал относительно футболиста. Т.е. он у меня всегда был в координате [0,0,0], так что я сохранял всего 10 полей:
относительную позицию мяча, вектор скорости мяча, вектор скорости футболиста, бинарный флаг перехвата. Сохранял датасет я только для центральной части поля, т.к. понимал, что простые алгоритмы не потянут ещё и учёт бортов.

Затем я этот датасет скормил DecisionTreeClassifier-у с max_depth = 7. Обученное дерево давало точность, насколько я помню, порядка 90%. Далее я экспортировал дерево в набор if-ов (коим DecisionTree по сути и является).

Выглядело это примерно следующим образом:

public static boolean predict(double dude_vel_x, double dude_vel_y, double dude_vel_z, double ball_rel_pos_x, double ball_rel_pos_y, double ball_rel_pos_z, double ball_vel_x, double ball_vel_y, double ball_vel_z) { if (ball_vel_z

Источник: https://www.j0hnd03.org/2019/02/russian-ai-cup-2018-9.html

Cup Russia 2018 Первый тур

Все только начинается: добро пожаловать в первый тур нашего главного кейс-чемпионата Changellenge >> Cup Russia 2018! Сразу к делу: дочитайте эту страницу внимательно до конца и сохраните ее в закладках. Здесь важные правила работы над кейсом и отправки решения.

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

Так что набираемся сил, терпения — и вперед! Желаем успехов в первом туре!

В командах по 4 человека вам предстоит решить задание из своей секции и отправить его решение нам на проверку:

Обратите внимание!Перейти из одной секции в другую уже невозможно. Мы специально заранее не разглашаем темы кейсов разных секций, так как стараемся создать условия максимально приближенные к реальному бизнесу — профессионал должен уметь справляться с любой задачей, а не только с той, в которой хорошо разбирается на текущий момент.Отправить нам решение нужно на адрес first.round@changellenge.com,до 06:00 2 апреля (понедельник).

Результаты проверки вы узнаете 9 апреля до 21:00 — мы вышлем их вам на почту, указанную при регистрации. В тот же день лучшим участникам мы вышлем приглашение в полуфинал.

Как правильно выслать нам решение:1. Вы получаете кейс (ссылка для скачивания выше) и дистанционно решаете его в командах по 4 человека.2. Решение кейса должно быть оформлено в виде презентации в Powerpoint (8 слайдов, включая заглавный и один слайд с резюме команды).

Отправлять решение вы можете в формате PPT (PPTX) или PDF (последний формат предпочтительнее и достаточно просто пересохраняется из PPT).3.

Решение кейса будет оцениваться по шкале от 1 до 5 по следующим критериям: соответствие поставленной задаче, широта анализа, глубина анализа, структура и логика, качество презентации. Кроме этого, у вас будет возможность получить от 1 до 3 бонусных баллов.4.

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

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

Читайте также:  Маленькие помощники больших специалистов

5. Пожалуйста, все вопросы по кейсу задавайте в официальной группе вконтакте в обсуждениях, посвященных каждому кейсу.

6. Отправить нам решение нужно на адрес first.round@changellenge.com до 06:00 2 апреля.7. В теме письма указывайте, пожалуйста, такой текст: CLR2018 — название секции (ENG/RUS) — название команды — первые буквы всех имен участников команды. Например, у вас в команде Тимофей, Ольга, Родион и Трофим в английской секции и называется ваша команда «Smart Solution».Тогда в теме вы пишете: CLR2018-ENG-Smart Solution-ТОРТ.8. По той же логике называете файл, но без пробелов: CLR2018-ENG-SmartSolution-ТОРТ.pdf.»

Что вы можете упустить, если не решите кейс до конца:

1. Участие в одном из крупнейших кейс-чемпионатов Changellenge >> О чемпионате знают 90% лучших работодателей, 60% из них — наши партнеры (рейтинг Changellenge >> Best Company Award)2. Подробную обратную связьПосле каждого тура ты будешь получать обратную связь с подробным разбором кейса и частых ошибок (первый тур — вебинар, полуфинал и финал — личный диалог).3. Навыки решения реальных задач компанийВ каждом туре ты получаешь доступ к учебнику по кейсам и вебинары с компаниями-партнерами. Это максимально готовит тебя к решению бизнес-задач компаний.4. Кейсы гарвардского форматаНаши кейсы — самые длинные и подробные, они пишутся по проверенному в Гарварде формату. Решая их, ты начнешь разбираться даже в той теме, с которой тебя мало что связывало.5. Карьерные бонусыБольшинство партнеров сокращает этапы отбора для финалистов и особенно для чемпионов. Кроме того, на чемпионате ты можешь познакомиться с рекрутерами и HR-менеджерами лучших компаний на рынке.

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

А это специальная версия для изучения:

Консультации от экспертов компаний-партнеров для участников обеих секций Для участников каждой секции мы организуем собственный вебинар — Q&A сессию с представителями компании (напоминаем, вам предстоит решить реальную задачу из ее бизнеса). Вебинар поможет качественнее решить кейс первого тура, разобраться в непонятных моментах и получить недостающую информацию. Обязательно участвуй — эксперты ответят на самые насущные вопросы по кейсу. Регистрироваться на вебинары не нужно. Ниже вы найдете ссылку, по которой вы сможете присоединиться к своему вебинару.

А еще мы подготовили для вас максимально эффективную схему решения кейса за одну неделю:

День 1. Цель – понять проблему кейса:

  • распечатайте кейс и внимательно прочитайте его. Подчеркните маркером важную информацию. 30% решения кейса вы можете найти в его тексте;
  • сформулируйте основную проблему кейса по SMART;
  • заполните Problem Statement Worksheet (PSW);
  • каждый участник команды работает самостоятельно.

День 2. Цель – построить дерево решений, сформулировать гипотезы:

  • подготовьтесь к встрече с командой: изучите новости отрасли и место компании в ней;
  • встретьтесь с командой. Составьте общий PSW;
  • проведите брейншторм, как можно решить проблему кейса;
  • структурируйте идеи. Постройте Issue Tree;
  • сформулируйте гипотезы.

День 3. Цель – провести анализ гипотез:

  • оцените дерево свежим взглядом. Доработайте его;
  • распределите гипотезы между участниками;
  • соберите данные по вверенной вам гипотезе;
  • проанализируйте данные по вверенной вам гипотезе;
  • сделайте вывод по вверенной вам гипотезе: верна она или нет.

День 4. Цель – финализирование анализа гипотезы:

  • соберитесь с командой;
  • поделитесь выводами по проведенному анализу;
  • выберите 3 приоритетные гипотезы;
  • проведите более глубокий анализ данных по трем выбранным гипотезам.

День 5. Цель – составить рекомендации для клиента:

  • синтезируйте выводы из результатов анализа гипотез;
  • сформулируйте рекомендации, как решить проблему кейса;
  • вместе продумайте структуру презентации;
  • распределите слайды между участниками команды;
  • ответственный за финансы считает экономический эффект.

День 6. Цель – свести общую презентацию.

  • каждый участник готовит контент вверенного ему слайда;
  • ответственный за презентацию собирает слайды и оформляет их в едином стиле;
  • ответственный за финансы проводит бенчмарк: сравнивает порядок полученных чисел с похожими проектами. Порядок должен совпасть.Если нет, ищет ошибку, переделывает фин. модель;
  • ответственный за риски оценивает возможные риски и продумайте способы их нивелирования;
  • ответственный за план внедрения рекомендаций строит дорожную карту.

День 7. Цель – довести решение до идеала.

  • оцените решение «со стороны»;
  • еще раз проверьте на правильность чисел и опечатки;
  • доработайте презентацию.

Ознакомьтесь с подробным описанием всех критериев оценки решений первого тура:

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

  • проанализированы все основные аспекты решения (3-5 аспектов);
  • выделены наиболее важные, приоритетные аспекты;
  • выбор приоритетов подкреплен анализом фактов и данных;
  • рассмотрены финансы, риски и дальнейший план действий;
  • команда показывает комплексное понимание темы и проблематики кейса.
  • иерархия причин проблемы рассмотрена на 3-4 уровня;
  • каждое решение подкреплено сильной аргументацией;
  • все факты и цифры подтверждены расчетами и ссылками на источники;
  • в рамках решения проанализировано несколько альтернатив;
  • дан подробный ответ на все задачи кейса.
  • решение следует единой логике, нет скачков с темы на тему;
  • использована единая логика аргументации – либо индукция, либо дедукция;
  • решение единообразно в своей структуре (например, использованы одинаковые критерии для анализа альтернатив);
  • решение непрерывно – отсутствуют «провалы» в аргументации;
  • все слайды обладают понятной и четкой структурой.
  • команда отвечает строго на вопросы кейса, а не собственную постановку задачи;
  • решение команды адекватно поставленным в кейсе вопросам;
  • решение отражает понимание командой специфики бизнеса клиента;
  • решение является принципиально реализуемым;
  • команда использовала оригинальный, но правильный подход к решению или идею.
  • слайды презентации выстроены в понятной логической последовательности;
  • в презентации нет опечаток;
  • в презентации используется деловой стиль оформления с четкой структурой каждого слайда;
  • в презентации используются деловая цветовая гамма;
  • ясна основная мысль презентации, она «продает» решение.

Лучшее решение HQ 25 прошлого года.
Английская секция.

Лучшее решение HQ 15 прошлого года.
Английская секция.

Лучшее решение прошлого года, которое прошло в полуфинал
Английская секция.

Лучшее решение HQ 25 прошлого года.
Русская секция.

Лучшее решение HQ 15 прошлого года.
Русская секция.

Лучшее решение прошлого года, прошедшее в полуфинал
Русская секция.

Организационные вопросы

Поиск команды

Правила участия

Источник: https://1.changellenge.com/russia/first

Russian AI Cup 2018: CodeBall. Зрелищное 3D соревнование

С 2012 года ежегодно проводится соревнование Russian AI Cup по написанию искусственного интеллекта и ботов, которые ожесточенно сражаются в виртуальном мире вместо своих владельцев.

За все прошлые чемпионаты на платформе зарегистрировалось более 40 000 пользователей, которые прислали нам более 150 000 различных решений. Каждый новый чемпионат — это новая игровая задача со своими правилами, законами и механикой.

Стараемся постоянно вносить новые идеи и фичи, чтобы игры из года в год становились еще более интересными и зрелищными, развивая наш мотор под капотом проекта и делая всё во славу нашего сообщества.

Важно

Этот год не стал исключением. Mail.Ru Group в сотрудничестве с Codeforces.com официально объявляют о датах чемпионата Russian AI Cup 2018 под названием CodeBall.

Итак, поехали!
Традиционно, до анонса чемпионата мы стараемся держать сообщество в неведении. Нас пытали, ругали, но мы, как партизаны, не раскрывали cекретные данные чемпионата, вместо этого подогревая всех вбросами картинок и своими мыслями.

На неофициальном канале соревнования создали опрос, где участники пытались отгадать по наводкам организаторов суть нового RAIC 2018.Многие ребята были близки, некоторые отгадали (но об этом им не говорили). Теперь все карты на столе, пора вскрываться.

Задача посвящена футболу.

Мы очень не хотели повторить игру 2014 года CodeHockey. Нас вдохновила динамичная игра Rocket League, а также прошедший чемпионат мира.

На этот раз решили сделать игру не в 2D, а реально в 3D (с использованием 3D моделей).

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

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

Две стратегии разных участников запускаются в один мир и бьются друг с другом. Кто выиграл — играет дальше с другими игроками, а кто проиграл — улучшает свою стратегию, играет дальше и ждёт реванша. Во вторых, квикстарт. Максимально подробно всё опишем и поделимся с вами. В этом чемпионате порог входа будет ниже. Старались учесть пожелания сообщества.

Улучшили саму платформу проведения и инфраструктуру. Теперь движок работает из Docker. Это позволило разместить свои инстансы в облаке Mail.Ru Cloud Solutions. Теперь все решения будут обсчитываться на современном железе, а именно на 200 ядрах Intel Xeon E5-2660 v4.

Поработав с ними через интерфейс MCS, мы ощутили всю мощь этой платформы, поэтому лагов быть не должно, а скорость обсчета решений будет выше, чем прежде.

Итак, какой футбол и почему роботы?

Совет

Игровой мир находится в космосе, на астероиде, курсирующем по галактике. На нем построен стадион и поле, на котором бегают роботы и пинают мяч. Цель — выиграть матч, т.е. забить больше всего голов за N тиков (единица времени в игровом мире).

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

Чемпионат состоит из двух раундов и финала.

В первом раунде каждый игрок получит одинаковое количество футболистов.

Во втором раунде футболисты смогут использовать буст (нитро) с ограниченным запасом топлива, которое можно пополнять, собирая «баки» на поле. Буст появляется в фиксированных точках и респаунится через некоторое время.

В третьем раунде (финал) у каждого игрока станет больше футболистов. Сколько — сейчас не скажем.

Результат игры не зависит от случайных факторов. Мы не добавляли тряску астероида, хотя хотелось 🙂

Пользуясь случаем, хочу поблагодарить Виталия Кудасова (@kuviman), Михаила Мирзаянова (@MikeMirzayanov) и всю команду чемпионатов за созданную игру.

  1. Песочница: 17 декабря — 5 января;
  2. Первый раунд: 5 — 6 января;
  3. Второй раунд: 19 — 20 января;
  4. Финал: 26 января.

В начале любого Russian AI Cup соревнование начинается в бета-режиме. За это время возможны изменения баланса, устранение ошибок, оптимизация инфраструктуры. Кроме того, перед финалом (за неделю) также могут появиться изменения в правилах. Ничего не изменилось и в принципах отбора стратегий в первый раунд. С 17 декабря по 5 января работает песочница, из которой будут отобраны по рейтингу стратегии для первого раунда. В случае победы рейтинг растёт, в случае проигрыша — уменьшается. В рамках первого раунда лучшие по рейтингу стратегии переходят во второй раунд, а из второго — в финал. Кроме того, и во второй раунд, и в финал добираются лучшие стратегии из песочницы, а значит, шанс есть всегда! По результатам финала мы выясняем, кто же лучше всех, и дарим им призы. По сравнению с прошлым годом ничего не изменилось, только теперь можно будет заменить подарок на эквивалентный по стоимости. Все победители финала получат:

  • 1-е место — MacBook Pro.
  • 2-е место — MacBook Air.
  • 3-е место — Apple iPad.
  • 4-е место — Samsung Gear S3.
  • 5-е место — WD My Cloud 6 TB.
  • 6-е место — WD My Passport Ultra 4TB.

Для топ-6 победителей песочницы у нас заготовлены WD My Passport Ultra 2TB (но их тоже можно заменить). Всем участникам второго раунда достанутся футболки, а участникам финала — толстовки.
Теперь самое время пойти и подписаться на анонс. Мы обязательно напомним вам о начале чемпионата.

Ждем всех в Telegram-чате, Telegram-канале и группе в VK. Добро пожаловать в ряды!

Источник: https://news.myseldon.com/ru/news/index/200022292

Ссылка на основную публикацию
Adblock
detector