Pull to refresh

Симуляция жизни в системе Darwinbots. I. Первое знакомство

Reading time 3 min
Views 30K
Привет, Хабр!

Недавно сдал курсовую работу по генетическим алгоритмам в программе Darwinbots и решил, что это будет интересно сообществу. Тем более, что в данный момент сообщество проекта довольно мало. Статьи будут наполовину переводом документации, а наполовину своими исследованиями программы.

1. Первое знакомство

2. Симуляция и простейший бот



Итак, программа Darwinbots является симулятором искусственной жизни. Первые версии написаны итальянским программистом Carlo Comis с использованием языка программирования Visual Basic. Последняя версия программы на данный момент – 2.45.02D, выпущена 21 августа 2012 года. В данный момент ведётся разработка третьей версии приложения, полностью переписанного на C#. Также существует порт на языке C++. Исходный код проекта опубликован в системе управления версиями Subversion и доступен всем желающим.

Программа имитирует жизнь популяции организмов – ботов (роботов), ДНК которых описывается вручную с помощью специально разработанного языка. ДНК, по сути, является большим конечным автоматом, который считывает информацию с множества различных входов, модифицирует ее и подключается к выводам с действиями. Код бота (далее ДНК) описывается в текстовом файле с расширением .txt, что позволяет работать с ним в любом редакторе, в том числе в Блокноте. Суть симуляции состоит в выполнении ДНК за каждый цикл, с учётом возможных взаимодействий организмов, мутаций, вирусов и так далее.

Главный элемент интерфейса программы Darwinbots – мир ботов (или поле моделирования). Мир ботов – это большая недискретная плоскость (да, тот самый синий прямоугольник, что был ранее). По умолчанию, боты могут двигаться по всей площади мира. Настройки мира задаются в настройках симуляции.

Каждый бот представлен окружностью определённого размера и цвета, с некоторым узором в центре. «Глаз» бота обозначается белой точкой. Он включает в себя 9 простых глазков. При выделении бота на поле моделирования можно увидеть сетку из полей зрения каждого глазка. Глазки передают в программу значение, примерно соответствующее размеру объекта, попавшего в поле зрения.

Бот имеет систему простейших тактильных ощущений, которая позволяет ему чувствовать столкновение или атаку со стороны другого бота. Сенсорные входы ботов анализируются в ДНК, которая написана на языке с использованием абстракции FILO («первым пришёл — последним ушёл», по принципу поставленных друг на друга тарелок). ДНК большинства ботов имеют от 6 до 20 процедур, именуемых генами, в которых может выполняться до 200 операций. Каждая операция может мутировать.

Каждый бот имеет свой запас энергии. Большинство действий уменьшают количество энергии. Когда энергия станет равной нулю, бот погибнет, а когда станет выше уровня, определенного в ДНК – начнет размножение. Энергия может быть пополнена путем поглощения других ботов (аналог охоты в обычной среде) и запасами энергии из своего «тела». Если бот выбран в качестве автотрофа, то энергия восполняется автоматически в течение продолжительного времени.

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

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

Когда бот размножается, его ДНК передается потомку, иногда с некоторыми изменениями, которые влияют на поведение бота. Как в реальном мире, с изменением ДНК может произойти эволюция – очередное поколение ботов может стать более способным атаковать, размножаться, избегать контактов и так далее. Такие мутации либо передаются из поколения в поколение, либо исчезают. Со временем в ДНК может накопиться нежелательный код, который не выполняет ничего полезного. Он будет отнимать больше энергии и сделает ДНК более загруженным.

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

Эволюция в Darwinbots занимает достаточно продолжительное время. Поколение ботов может жить несколько тысяч циклов, а большинство симуляций работают с частотой около 15 циклов в секунду, поэтому до значительного естественного отбора может пройти от нескольких часов до нескольких дней.



Конечно, в этой вводной статье я вряд ли смог заинтересовать Вас этим проектом, но, в качестве приманки могу рассказать, что программа имеет Интернет-режим (некое подобие PvP), а разработчики ботов могут принимать участия в лигах – своеобразных соревнованиях.

В следующей статье поговорим о настройках симуляции и программировании ботов.

И напоследок, картинки для привлечения внимания:


Секундой позже:


Через несколько сотен циклов симуляции:


Увидимся!



UPD: Друзья!
Ответьте, пожалуйста, на вопрос по будущему продолжению статьи по ссылке. Заранее благодарю!
Tags:
Hubs:
+52
Comments 22
Comments Comments 22

Articles