Вы, наверное, знаете «Игру жизни» Конвея , знаменитый клеточный автомат, изобретенный математиком Джоном Конвеем. Жизнь - это набор правил, которые вместе позволяют имитировать двумерную доску ячеек. Правила определяют, какие ячейки на доске живут, а какие погибают. С некоторым воображением вы могли бы сказать, что Life - это игра для нулевого игрока: игра, целью которой является поиск моделей с интересным поведением, например, знаменитого планера.
Игра нулевого игрока ... До сегодняшнего дня. Вы должны написать программу, которая играет в Game of Life - и играет в нее, чтобы победить, в стиле King of the Hill. Ваш оппонент (в единственном числе), конечно, пытается сделать то же самое. Победителем становится либо последний бот с любыми живыми клетками, либо игрок с наибольшим количеством живых клеток после 10000 поколений.
Правила игры
Правила почти такие же, как и у обычных (B3 / S23) Жизнь:
- Живая клетка с менее чем двумя дружественными соседями умирает от голода.
- Живая ячейка с двумя или тремя дружелюбными соседями выживает.
- Живая клетка с более чем тремя дружественными соседями умирает от перенаселения.
- Мертвая клетка с ровно тремя соседями одного и того же игрока оживает, чтобы сражаться за этого игрока, при условии, что вражеских соседей нет .
... но после каждого поколения и вы, и ваш противник получают возможность вмешаться. Вы можете пробудить до 30 клеток, чтобы сражаться за вас. (Кто идет первым, определяется сервером.)
Доска представляет собой (x, y) квадрат клеток. Все квадраты изначально мертвы. Границы не охватывают (это не мир в форме тора) и навсегда мертвы.
Это соревнование в духе Battlebots и Core Wars . Есть центральный сервер, который будет запускать ботов, и его можно найти здесь
протокол
Сервер арены говорит по простому протоколу JSON, передаваемому через argv
Где Values - строка в кодировке JSON
y_size
: максимальные координаты y плиток до их исчезновенияx_size
: максимальные координаты х плиток до их исчезновенияtick_id
: текущий номер тикаboard
: словарь с ключами в форме '(y, x)' и значениями в формеbot_id
(int)bot_id
: плитки на доске с этим идентификатором ваши
Пример:
{"y_size":2000,"x_size":2000,"board":{},"bot_id":1,"tick_id":1}
Сообщаем серверу ваш выбор:
- Отправьте серверу список плиток, чтобы они превратились в ваш цвет.
- Будут изменены только те, которые пусты
- Формат списка вложенных координат
[[0,0], [0,1], [100,22]...]
ПРИМЕЧАНИЕ: ваш бот не должен обновлять плитки вообще - сервер выполняет обновление самостоятельно
Правила соревнований
- Если ваша реализация не будет следовать протоколу, то ход будет аннулирован; Сервер не примет никаких изменений в состоянии
- Вам не позволено умышленно воспользоваться ошибкой на сервере арены.
- Пусть ваш ИИ определится с ходами в разумное время. Пожалуйста, отправьте ваш следующий шаг как можно быстрее.
- Наконец, пожалуйста, будьте любезны с сервером. Это там для вашего удовольствия.
- Несоблюдение этих правил может привести к дисквалификации.
- В случае ничьей обоим игрокам добавляется 1 победа
Запуск контроллера самостоятельно
Источник для контроллера можно найти здесь . Есть 2 способа запуска контроллера:
- Режим соревнования (терминал)
- Настройка с
python3 get_answers.py
- Запустите соревнование «все против всех» с каждым ботом, сравнивающим его друг с другом.
- Настройка с
- Режим тестирования (GUI)
- Бегать
python3 nice_gui.py
- щелчок
Pull Answers
- Если вы хотите добавить свой собственный ответ, чтобы попробовать его перед публикацией, нажмите
File -> Add manual answer
и найдите файл и выберите язык, на котором он написан. - Если ваш язык отсутствует, пингуйте меня, и я попытаюсь установить его на сервере, на котором я буду его запускать (инструкции по установке и запуску тоже подойдут!)
- Выберите 2 ботов, чтобы противостоять друг другу
- щелчок
Run
- Смотреть игру ...
- Бегать
- Монтаж
- Требуется python3
- get_answers требует bs4 и html5lib
- Контроллер требует способ запуска файлов .sh (MinGW на Windows)
счет
Бот с наибольшим количеством побед, начиная с 12/07/2016
(12 июля)14/07/2016
(14 июля, не смог понять, как запустить бот), побеждает.
Помощь с контроллером / графическим интерфейсом можно попросить в этом чате
Этот вопрос находится в разработке с 2014 года и был самым популярным в песочнице. Особая благодарность выражается Wander Nauta (оригинальный автор и концепция), PPCG Chat (комментарии и помощь) и всем, кто прокомментировал сообщение в песочнице (больше комментариев).
Ответы:
Python 3, Exploder
Размещает маленьких взрывников по всему месту, независимо от того, есть ли там уже блок.
источник
Рубин, ПрерывающийБлокМейкер
Вместо инициализации планеров, таких как TrainingBot, он пытается создать машину переключения блоков 5x5, как упоминалось в Википедии, в случайной точке лабиринта. Затем, с оставшимися активациями, он просто находит вражеские точки и пытается засыпать соседние области вашими клетками, пытаясь помешать им расти и, возможно, испортить их паттерны. Ваши клетки умрут в следующем поколении, но, возможно, они также остановили некоторый рост, чтобы замедлить вашего противника!
v2: немного оптимизирован (?), чтобы попытаться минимизировать время ожидания.
v3: Оптимизированный код прерывания для предварительной выборки подмножества активных блоков перед отклонением наших собственных местоположений ячейки, чтобы предотвратить дальнейшие тайм-ауты за счет некоторой эффективности в атаках ячейки прерывания.
источник
bot_score
показывают, сколько побед у каждого бота над другими ботамиPython 2, TrainingBot
Потому что всем нужен один из них!
источник
Ява, Тролль Бот
Бот Тролль подумал об этом, и он понимает, что ему нет дела до врага. На самом деле он просто спамит на этих фабриках, чтобы производить больше своих парней случайным образом по всей карте. Через некоторое время он понял, что любые дополнительные клетки лучше всего использовать в глыбах. Эти блоки из четырех ячеек будут слипаться и останавливают планеры! Он не думает, что он просто борется. Также он большой сторонник подробного объектно-ориентированного программирования. Тролль также предполагает, что координаты имеют формат y, x, и он просит проверить. Просто поместите его в файл с именем "TrollBot.java", и он будет установлен!
источник
Python 3, RandomBot
Этот бот испытывает затруднения при принятии разумных решений, но он, по крайней мере, знает, что не стоит ставить вещи поверх других вещей. Он будет случайным образом создавать планеры, лодки, блоки C / 2 Orthagonal и 2x2 с различной ориентацией, гарантируя, что когда они размещены, они не перекрываются с чем-то еще, союзником или врагом.
Этот бот не был протестирован, поскольку я получаю всевозможные ошибки при попытке запустить графический интерфейс. Кроме того, я использовал TrainingBot в качестве основы и просто редактировал, так что любые сходства в коде, вероятно, из-за этого.
источник
print(sys.argv[1])
в строке 3 испортили вывод (симулятор ожидает только строку координат, которую вы хотите активировать). Кроме того, в последней строке вашей программы отсутствует закрывающая скобка.html5lib
, затем не нашел папку, содержащую все боты (мне пришлось изменить код для обоих), и с тех пор запуск любого бота Python привел к коду возврата, отличному от 0 1.Python, GuyWithAGun
Он парень, у него есть пистолет; он безумен Он просто сбрасывает планерные пушки везде, не обращая внимания на то, что делает кто-то еще
источник
Python 3, SquareBot
Размещает квадраты везде, может быть
Квадраты - это статичные объекты в жизни - они не двигаются. Поэтому, если я размещу достаточно инертных объектов вокруг этого места, планеры и взрывы, которые создают другие, возможно, будут заблокированы или, по крайней мере, ослаблены.
-Принято из TrainingBot
Хотя у меня проблемы с его тестированием
источник