Как я стал чемпионом Robocode

в 10:52, , рубрики: game development, java, Robocode, истории успеха, метки:

Я — Jdev, автор робота Tomcat, который в ноябре/декабре 2011 года был Королём Премьер Лиги общего зачёта Robocode (пруф) без единого поражения, сейчас занимает 3-е место из 911 в процентном зачёте и является героем моего повествования. Эту статью я решил написать для привлечения к этой игре внимания соотечественников, потому как одному защищать честь Российского флага становится уже тяжело (не считая двух моих роботов, лучший русский робот занимет 142-ое место). Рассказ я решил построить в виде журнала.

Для начала кратко раскрою заголовок, в котором я не много слукавил ради красного словца. Robocode — это игра для программистов (robocode, robowiki) в которой надо написать систему управления танком (роботом, ботом). Далее танки бьются между собой и получают очки за победы в раундах и попадания по противнику. В игре используются две системы рейтингов: средний процент очков (в коммьюнити эта система называется Averange Percents Score, APS, и является основной) и количество побед (в коммюнити эта система называется Премьер Лигой). В комьюнити чемпионов называют Королями, поэтому и я в дальнейшем буду использовать это слово. Так вот лукавство заголовка в том, что Король без приставок определяется очковой системой, а не победной.

2005-07 год: Начало
Я точно помню, что в первый раз я прочитал о Robocode весной-летом 2005 году на сайте javaportal.ru, но сейчас, почему-то, не могу найти ту статью. Написал я какого-то простенького бота, который рвал демонстрационных ботов и решил, что я невероятно крут. Скачал робота Shadow, который в 2004 году стал вторым и последним на текущий момент абсолютным чемпионом (дуэль, схватка и командная дуэль). Естественно, он моего питомца разорвал на мелкие клочки. Я не помню точно, то ли это поражение, то ли завал на работе, то ли завал на учёбе, но к осени 2005-ого я завязял.
Снова вспомнил о Robocode я в 2007 году, после того как в первый раз прочитал про генетические алгоритмы. Я попытался “подорбать” ДНК, которая бы определяла последовательность команд для реакции на события и эта затея, конечно же, с треском провалилась. На чём и закончился мой второй набег на эту игру.

Июнь-Июль 2009: Шаг на 0-ую ступеньку
В июне 2009 меня попросили провести спецкурс по Java в летней школе программирования ВКИ НГУ и я решил, попытаться построить занятия вокруг программирования танков (это была плохая идея, да и вообще выяснилось, что с совсем маленькими детьми я работать не умею). А для того чтобы чему-то учить, надо самому это изучить. Так начался мой третий, трёхлетний поход за короной Премьер Лиги.

Лето 2009-Осень 2010: собираем грабли
Своего робота я очень “оригинально” решил назвать Jdev. Самое удивительное, что в Tomcat’е до сих пор есть куски кода и дизайна Jdev’а, написанные в 2009-ом году. Я считаю, что если речь не идёт о промышленном программировании, то изобретение велосипеда является весьма полезным для саморазвития и поэтому я целенаправленно избегал чтения робовики, и самостоятельно изобрёл все велосипеды. И это, пожалуй, было моей самой большой ошибкой за весь поход.
Осенью 2009-ого я решил стать пооригинальнее и переименовал Jdev’а в UltraMarine. Это имя я выбрал, т.к. летом 2009 мы не одну ночь в общаге провели зарубаясь в Warhammer: 40,000, и хотя я играл за Тау, наиболее благозвучным мне показалось имя именно этого достойнейшего ордена моих заклятых врагов. Да и жену мою звали Марина.
За эти полтора года я придумал и попробовал всё что только можно было — и существующие техники и какие-то свои — я мечтал превзойти ABC, автора Shadow, который изобрёл фундаментальную технику этой игры. Но всё было безуспешно.

Зима 2010-11: Релиз! Не удался...
В это время я проходил через достаточно болезненный развод с первый женой и как-то вечером в депрессии я решил “Да гори оно всё синем пламенем!” и зарелизал своего питомца. Питомец тут же начал набирать в битвах 0 очков и исследование показало, что он использует API версии 1.7, а для проведения официальных боёв использовалась версия 1.6. Допилить бота было не сложно (что я в скором времени и сделал), но на тот момент депрессия взяла верх.

Весна-лето 2011: Поиски себя
Абсолютно случайно, мою второю жену тоже зовут Марина и памятуя о том, как UltraMarine получил своё имя, я решил его переименовать. Да и очередной “прорыв” подвернулся, поэтому в марте 2011 года я переименовал UltraMarine’а в Primarch’а. Затем 3-4 месяца я потратил на “прорыв”, который в очередной раз провалился. В июле 2011 года я осознал очередной провал и решил плюнуть на славу изобретателя и просто сделать хорошего робота. Так родился он, будущий чемпион, Tomcat.

5-ое августа 2011: Релиз!
Наконец, 5-ого августа я решился на релиз. Релиз оказался достаточно успешным — 50-ое место из 816. Далее было 2 неудачных релиза — которые навели меня на мысль, что я дорос до RoboResearch — тулзы для автоматического исполнения битв локально, которая в случае достаточного количества боёв против всех роботов может весьма точно предсказать место. Однако, тулза то ли очень давно была написана, то ли просто криво написана и битвы она выполняла путём запуска bat-ника игры. А инициализация игры может быть в разы дольше собственно битвы. По этому я решил написать свою тулзу Distributed Robocode — она, во-первых, инициализировала движёк только один раз и, во-вторых, позволяла одновременно запускать несколько боёв на разных компьютерах. Точных цифр я не помню, но моя тулза работает значительно быстрее. Первую версию тулзы я закончил к 23-ему сентября 2011-ого года.

Август-ноябрь 2011: Путь на верх
Я не проводил специального исследования, но думаю что не сильно совру, если скажу что восхождение Tomcat’а было одним из самых быстрых, если не самым быстрым за “современную” историю игры. Поэтому дальше события развиваются стремительно. Но я приведу только ключевые шаги.
10 августа (40-ое место): новая система управления данными о прицеливании противника, +5 мест и первая маломальская инновация.
11 августа (32-ое место): сортировка данных о стрельбе противника, +8 мест буквально одной строкой!
12 сентября (25-ое место): при выборе журналов попаданий противника используется информация о том, куда он не стрелял, +7 мест и вторая маломальская инновация.
7 октября (7-ое место): переписал пушку с использованием алгоритма k ближайших соседей, +8 мест
3 ноября (4-ое место): улучшил использование информации о “затемнённых” (сбиваемых моими пулями) пулях противника, +3 места

6 ноября 2011: Корона!
Это было феерично. Примерно в это время, мы поехали в Ангарск, родной город моей девушки. Ехать до туда от Новосибирска полтора дня, поэтому мы взяли ноут и по дороге я “танчил”. “Натанчил” генальную вешь — теперь, при определении опасности позиции учитывается расстояние между мной и противником, не в момент, когда эта позиция достигается, а минимальное расстояние между этой позицией и всеми позициями противника. С утра я сразу же запустил тест и очень быстро стало понятно, что новая версия удалась. Я её зарелизал и пошёл на день рождения к сестре девушки. Сидим, пьём, разговариваем, а в голове крутиться одна мысль: “Ну как он там?”. Важно сказать, что это было моё первое знакомство с будущими родственниками. Наконец, изрядно, выпив я решился попроситься в интернет и вижу — 3-е место! КОРОНА ПРЕМЬЕР ЛИГИ! Что там началось — я чуть не сплясал на радостях и тут же окрестил девушку Королевой Премьер Лиги. В общем до сих пор стыдно за тот день, но родители не запретили выходить девушке за меня замуж.

Ноябрь-Декабрь 2011: Битва за корону
В эти 2 месяца между 3-мя лучшими ботами (DrussGT, Diamond и Tomcat) развернулась битва за корону Премьер Лиги. За эти 2 Месяца она переходила из рук в руки раз 5-6 и этот факт отметили в хронике 2011 года. Победителем из той битвы вышел DrussGT, который уже более 4-ёх лет является основным (по процентам) Королём Robocode. Таким положение дел сохранилось и по сей день.

Январь-Июнь 2012: Стагнация
К новому году я выдохся и взял отпуск до февраля. В феврале тоже ничего хорошего не вышло и на этом фоне мой энтузиазм постепенно умер до Июня. И в июне тоже ничего интересного не произошло, за исключением того, что у меня остались только революционные с точки зрения кода идеи и я начал разработку младшего брата Tomcat’а — ConceptA.

На этом заканчивается достаточно славная, но не идеальная история о том, как я стал чемпионом Премьер Лиги Robocode. Надеюсь вторая попытка будет удачнее. Так же надеюсь, что хоть кого-то из вас, уважаемые читатели, я заинтересовал этой игрой. До встречи на квадратных полях боя!

Автор: jdev

* - обязательные к заполнению поля