Задание для соискателей

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

Игра базируется на игре, использованной для Google AI challenge

http://planetwars.aichallenge.org/specification.php

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

Планеты

Каждая планета имеет ID>0, координаты, количество производимых кораблей за ход, ID игрока и количество кораблей на данный момент.

Общение внутри команды

Каждый ход бот может отправить своему соседу по команде сообщение в виде целого числа, ограниченного 2^32, то есть 32 бита.

Обмен информацией с ботом

После каждого хода игровой мир присылается в stdin боту в виде списка планет, его ID и сообщения от соседа по команде в следующем виде:

P 1 2 3 1 0 1

P 3 0 0 2 1 1

P 2 3 4 2 2 1

M 236746

Y 1

.

Планета это “P” PlanetId X Y Increase PlayerId Fleet, где Increase – прирост флота за ход, Fleet – количество находящихся на планете кораблей

M number – сообщение соседу по команде (в команде игроки только одного типа и только союзники, формат сообщения остаётся на усмотрение того, кто реализует бота)

Y id – идентификатор текущего игрока. Это число не меняется в течение игры.

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

F 3 1 1

M 23777

.

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

Сражения

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

Последовательность вычисления

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

Окончание игры

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

Размеры мира

Предполагается тестировать решения на мирах не превышающих 100 планет и не более 10 игроков в команде. Численность игроков в командах может не совпадать.

Время и старт бота

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

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

Передача сообщений

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

Нападение на союзников

Огонь по своим не исключается, это значит что если бот попытается атаковать бота из своей же команды – у него это получится. Кроме того, союзники в списке никак не помечаются, для того чтобы отличить кто свой, а кто – чужой служат сообщения. Все игроки видят одинаковые ID.

Критерии оценки

Нам не хотелось бы устанавливать строгих требований на победу в каких-либо конкретных условиях, это задание – возможность проявить себя.

Результаты

Турнирную таблицу с прошедшими играми можно посмотреть здесь.

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

Монитор, “мир” и примеры реализации можно найти на github: https://github.com/ai-challenge-mz/getting-started

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

Ботов с описанием процесса запуска и резюме отправляйте на jobs@machinezone.com