Combat Genetics
В этой симуляции делается попытка создать эффективный искусственный интеллект для стрелков космического корабля с использованием генетического алгоритма. Сама игра примерно основана на Combat для Atari 2600. Когда она начинается, все корабли создаются с полностью рандомизированным набором правил, которые управляют их поведением. Как только все корабли в данном поколении получают шанс соревноваться, те, которые получили наибольшее количество убийств (с бонусом за то, что не погибли сами), могут перейти к следующему поколению и иметь детей. Дети наследуют тот же набор моделей поведения, что и родители, но слегка видоизменяют их: здесь и там меняется значение, может быть, удаляется правило или добавляется новое. Несмотря на то, что эти изменения случайны, на протяжении многих поколений процесс естественного отбора отбирает мутации, которые делают их более эффективными пилотами.
Я рекомендую максимально увеличить число тактов на кадр и дать ему поработать некоторое время, замедлив его. вниз, когда захотите зарегистрироваться. Посмотрите, насколько различны ваши корабли через 100 и 1000 поколений!
Этот проект был вдохновлен Genetic Cars 2 Рафаэля Мацунаги, на который стоит смотреть часами.< /p>Правила поведения
В основе ИИ корабля лежит набор правил поведения. Каждое новое судно получает от 8 до 20 правил, и эти правила определяют какое-то условие и действие, которое необходимо предпринять, если это условие выполнено. С каждым тиком игры каждый корабль проходит свой список правил, начиная с первогои проверка, соответствует ли состояние платы условию. Когда он находит тот, чье условие выполнено, корабль выполняет это действие и завершает работу для этого тика. Правила могут иметь время восстановления, поэтому они не могут срабатывать дважды подряд, позволяя последующим правилам иметь шанс.
Действие FIRE является особенным, поскольку корабли не могут запускать каждый тик. Все правила с действием FIRE игнорируются, если не прошло достаточное количество тиков с момента последнего выстрела корабля. В настоящее время корабль может стрелять только каждые 150 тиков.
Когда ребенок наследует и мутирует поведение родителя, все числовые значения (включая время восстановления) могут немного увеличиться или уменьшиться, а условия для правило имеет небольшой шанс измениться (например, требование минимального расстояния может стать требованием максимального расстояния, или правило может перестать учитывать угол, который другой корабль имеет по отношению к себе). Существует небольшая вероятность того, что действие правила также изменится.
Поколения и естественный отборКак только каждый корабль в данном поколении получает шанс участвовать в соревновании, всем им присваиваются очки, которые начинаются с их количество убийств в их игре. Это умножается на 1,5, если они были последним кораблем в игре. Если игра закончилась из-за истечения времени, ни один корабль в этой игре не получает этот бонус. Лучшие 25% могут быть продолжены до следующего поколения, а остальные 75% удалены.
Помимо того, что им разрешено продолжать, уцелевшим кораблям разрешено воспроизводиться. АВсе уцелевшие корабли получают одного потомка, а лучшие 1/8 из предыдущего поколения получают двух дополнительных детей (всего три). Остальные слоты заполнены совершенно новыми кораблями с полностью рандомизированным поведением.
При подсчете очков учитывается только самый последний раунд. Результаты игр предыдущих поколений перечислены в статистике корабля справа, но не влияют на то, будет ли ему разрешено выживать и воспроизводиться. Даже если корабль вышел в топ 5 поколений подряд, если у него есть игра, в которой он не совершает убийств, он выбывает (хотя, предположительно, его потомство к этому моменту будет многочисленным).
ИменаОтследить определенных семейных линий, я создал простой генератор имен, который в основном просто соединяет буквы вместе и следит за тем, чтобы там было несколько гласных. У каждого корабля есть имя, отчество и фамилия. Когда создается новый корабль, все три из них рандомизируются.
Когда корабль является дочерним по отношению к существующему кораблю, он берет фамилию родителя и использует имя родителя в качестве среднего. имя. Затем ребенок создает совершенно новое имя.
Все корабли, имеющие общего предка, будут иметь одинаковую фамилию, что упрощает отслеживание эффективности данного клана.
Технические< p>Это изначально было написано в openFrameworks. Поскольку я хотел, чтобы он существовал в Интернете, я преобразовал его в p5.js. Это всего лишь мой второй набег на p5.js, поэтому я все еще разбираюсь в этом (моим первым был простой видео-экспериментent, satan.dance).Обе базы кода доступны здесь: https://github.com/andymasteroffish/combat_genetics.
ВыводыИскусственный интеллект в играх — увлекательная тема, и тот, который я в значительной степени проигнорировал в моей собственной работе. Я всегда выбирал очень простых противников, и я думаю, что в целом простые работают лучше всего. Во многом этот генетический алгоритмический подход к боевому ИИ также очень прост: я определил правила и различные «чувства», которые есть у каждого корабля, но мне никогда не приходилось диктовать стратегию. Я всегда чувствовал себя более комфортно с системным дизайном, чем с дизайном уровней, так что это кажется мне естественным.
Я также думал о том, почему мне так нравится наблюдать за тем, как летают эти маленькие корабли; почему они чувствуют себя моими детьми. Мой друг Бен Джонсон говорил со мной об игровом ИИ для киберспорта, который он делал некоторое время назад, и он сказал, что больше не пытается делать умный ИИ: вместо этого он предпочитает делать то, что он назвал «щенячьим ИИ». ." ИИ-щенок бегает и в какой-то степени пытается достичь целей игры, но главное — выглядеть игривым. Его ИИ двигался немного неустойчиво и часто просто очень быстро бегал к своему товарищу по команде. Результатом стал ИИ, с которым мне было очень комфортно играть и к которому я относился тепло. Только когда он рассказал мне о своей схеме дизайна щенка, я понял, что мой товарищ по команде ИИ не был особенно хорошим игроком.
Потому что в том, как эти корабли работают, есть случайность, даже после многих многих поколений, они кажутся более реалистичными. Генетические алгоритмы часто рассматриваются как способ задействовать большую вычислительную мощность для решения проблемы, чтобы найти решение. Но в конце концов у меня нет идеального боевого ИИ. Однако у кораблей есть определенная живость и индивидуальность, которые, я думаю, было бы почти невозможно определить вручную. Мне нравится создавать игровые системы, потому что мне нравится удивляться тому, что из них может получиться. Демонстрируемый здесь процесс естественного отбора значительно усилил это. Игривость не была ожидаемым результатом, но я рад, что она присоединилась к вечеринке!
Javascript и помощь в редактировании от Джейн Фридхофф.
Как скачать Combat Genetics через торрент
Всего несколько простых шагов:
- Устанавливаем программу μTorrent, через которую мы будем скачивать торренты
- Выбираем и скачиваем подходящий торрент-файл репака Combat Genetics
- Двойным кликом открываем скаченный файл, программа μTorrent запустится автоматически и предложит выбрать место для сохранения дистрибутива.
- После того как репак скачается, запускайте его. Начнется установка и... это все, приятной игры!