ПРИМЕЧАНИЕ. В настоящее время этот вызов не решен, поскольку я не могу установить языки, необходимые для запуска матча. Если у кого-то есть время и интерес, чтобы сделать это, я не против.
Смотрите в нижней части поста для лидеров.
Это полу-кооперативный вызов царя холма, где боты строят пути через двумерный сеточный граф. Бот, который контролирует узлы с наибольшим количеством трафика, является победителем. Однако для создания соединительного пути требуется больше, чем один бот, поэтому ботам придется работать вместе - в некоторой степени.
Игровой процесс
Далее, пусть N > 0
будет количество ботов в игре.
Сетки
Игра ведется на двумерной целочисленной сетке размером , нижняя левая координата которой равна . Каждая координата с имеют исходящие ребра к трем координатам , и над ним, где -координаты берутся по модулю . Это означает, что сетка оборачивается на восточном и западном краях. Каждая нижняя координата является источником , а каждая верхняя координата является стоком .⌊4/3N2⌋ × ⌊4/3N2⌋
(0,0)
(x,y)
0 ≤ y < ⌊4/3N2⌋-1
(x-1,y+1)
(x,y+1)
(x+1,y+1)
x
⌊4/3N2⌋
(x,0)
(x,⌊4/3N2⌋-1)
На следующем рисунке показана 8 × 8
сетка.
Каждая вершина графа является неактивной , активной или сломанной . Все вершины начинаются неактивно и могут быть активированы ботами, которые затем станут их владельцами. Кроме того, боты могут ломать вершины, и они не могут быть восстановлены.
Заказ поворота
Поворот состоит из фазы разрушения и фазы активации . На этапе уничтожения каждый бот может сломать одну неактивную вершину. С тех пор эта вершина нарушается и может быть никем не активирована. На этапе активации каждый бот может активировать одну неактивную вершину. С тех пор они владеют этой вершиной, и никто другой не может ее активировать. У нескольких ботов может быть одна вершина, если они все активируют ее в один ход. На каждом этапе выбор вершин выполняется одновременно.
счет
Один раунд длится ровно по очереди. После этого раунд засчитывается следующим образом. Из каждой активной исходной вершины мы выполняем случайный поиск в глубину вдоль активных вершин (это означает, что дочерние элементы каждой вершины посещаются в случайном порядке). Если путь найден от источника до некоторого стока, то для всех вершин вдоль этого пути каждый владелец вершины получает одну точку.N2
N
Вся игра длится 100 раундов, и бот с наибольшим количеством очков является победителем. Я могу увеличить это число, если дисперсия оценок слишком высока.
Дополнительные правила
- Нет возиться с контроллером или другими представлениями.
- Максимум одно представление на одного участника.
- Никакие внешние ресурсы, кроме одного личного текстового файла, очищены в начале игры.
- Не заставляйте своего бота побеждать или поддерживать конкретных противников.
- Предоставьте команды для компиляции и запуска вашего бота. Любой компилятор / интерпретатор, который свободно доступен для Debian Linux, является приемлемым.
Контроллер
Контроллер написан на Python 3 и может быть найден в GitHub . Смотрите файл README для получения подробных инструкций. Вот API для начала:
- Боты запускаются в начале каждого раунда и сохраняются до конца раунда. Связь с контроллером осуществляется через STDIN и STDOUT, используя завершающие строки сообщения.
BEGIN [num-of-bots] [num-of-turns] [side-length]
ввод в начале.DESTROY [turn]
вводится в начале каждой фазы уничтожения. Ваш бот должен ответить либоVERTEX x,y
выбрать вершину, либоNONE
.BROKEN [turn] [your-choice] [other-choices]
вводится в конце каждой фазы разрушения. Порядок других ботов рандомизируется в начале каждой игры, но остается неизменным в течение этого времени. Выбор представлен какx,y
илиN
.ACTIVATE [turn]
иOWNED [turn] [your-choice] [other-choices]
являются эквивалентами вышеуказанного для фазы активации и имеют одинаковую семантику.SCORE [your-score] [other-scores]
ввод в конце игры.- У вашего бота есть 1 секунда, чтобы проанализировать результаты фазы и выбрать следующую вершину, и 1 секунда, чтобы выйти после получения оценки. Я протестирую материалы на своем относительно старом ноутбуке, поэтому лучше оставить здесь запас.
Пожалуйста, не забудьте очистить ваш выходной буфер. Невыполнение этого требования может привести к зависанию контроллера в некоторых средах.
Leaderboard
Обновлено 13.03.2015
Peacemaker запущен и работает, и Funnelweb также получил обновление. Баллы подскочили на порядок. Коннектор превысил ограничение по времени в двух играх.
Funnelweb: 30911
Connector: 18431
Watermelon: 3488
Annoyance: 1552
Explorer: 735
Checkpoint: 720
Random Builder: 535
FaucetBot: 236
Peacemaker: 80
Полный журнал с графикой ASCII можно найти в репозитории контроллера, в graphical_log.txt
.
Некоторые наблюдения:
- Соединитель можно очень легко остановить, разбив одну вершину перед ним. Я подозреваю, что раздражение часто делает это. Однако в настоящее время это не имеет большого смысла, поскольку только Connector может создать путь.
- Арбуз может получить приличный счет, просто оказавшись на соединительном пути (так как DFS, скорее всего, будет использовать его вершины).
- Исследователь любит выращивать виноградные лозы из арбузов.
- Обновленный Funnelweb получает действительно хорошие оценки, поскольку Connector обычно фиксирует его в нижней половине сетки.
- Игры становятся довольно длинными, средний раунд занимает около 25 секунд на моей машине.
4/3*N^2
, и даже там у ботов были проблемы с формированием правильных путей. Однако, Connector был временно дисквалифицирован из-за ошибки, и теперь, когда это было исправлено, я ожидаю, что игры будут более интересными. Сегодня вечером я запущу еще одну партию.