Программа для моделирования эволюции

Если бы вам поручили создать животный мир на некоторой планете, по какому пути бы вы пошли: задавали бы внешний вид и поведение для каждого из многочисленных видов, или создали бы только простейшие существа и определили бы правила, по которым они смогут дальше совершенствоваться самостоятельно?

Лично для меня привлекательнее второй вариант, как с точки зрения гибкости, так и с точки зрения интереса моделирования. Подобным принципом, похоже, руководствовался и Джеффри Вентрелла, талантливый программист и исследователь, когда создавал свой ”Генетический пруд” (GenePool). О мирах и существах, которых призвать к жизни может эта программа, я и собираюсь рассказать в сегодняшнем обзоре.

Итак, имеется водоём, в котором живут существа – свимботы. У свимбота есть два базовых инстинкта: питания и размножения. Тела их состоят из сегментов, которыми свимбот должен шевелить определённым образом, чтобы плыть. Движение его просчитывается, исходя из реальной физики поведения тел в жидких средах. Чем лучше он плавает, тем больше вероятность, что не погибнет от голода, найдёт партнёра для размножения, и, следовательно, передаст свои гены будущему поколению. В итоге в популяции должны остаться только лучшие пловцы.

Так работает естественный отбор в этом мире. Но здесь введён ещё и половой отбор – свимботы охотнее скрещиваются с теми особями, которые похожи на них по окраске (по крайней мере, такое правило стоит по умолчанию). Таким образом, на сохранение свимбота в общем генофонде бассейна влияют также некоторые параметры, не связанные с его умением плавать.

Итак, запустил я эту программу. На старте случайным образом создаются 200 существ и 700-800 кусочков пищи.
сущеста в стартовом бассейне GenePool

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

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

Выжили же и дали потомство из стартового набора существ вот такие ”веточки”.
веточки в  GenePool
Когда пища недалеко, усилия, затрачиваемые ими на покачивающиеся передвижения, вполне окупаются. Однако вскоре в центральной части бассейна еда закончилась, вместе с ней ушла и пора доминирования “веточек”. Им на смену пришли “двухвостки” (справа).
черви и двухвостки в  GenePool

Они могут передвигаться на сравнительно большие расстояния, а за счёт амплитуды колебаний головной части, с большей вероятностью захватят пищу. Выжившие на тот момент или мутировавшие из “двухвосток” “черви” (слева), не смотря на более экономное расходование энергии, всё равно продолжают заглатывать пищу, только если плывут прямо на неё. Правда, уже после нескольких попыток они начинают отворачивать от стенок бассейна и плавают в основном по его периметру.

Появляющиеся в это время “веточки” (в центре) выживают, только если неподалёку есть пища в большом количестве.

До сих пор “двухвостки” выживали только за счёт статистики: им, с большими шансами, нежели другим существам, удавалось во время движения захватить еду. Но, где-то через 15 часов моделирования, я обнаружил удивительную вещь: двухвостка, проплыв мимо еды, свернулась клубком и, выпрямившись, изменила направление своего движения по направлению к ней. Приглядевшись, я обнаружил, что все имеющиеся на тот момент в колонии двухвостки обладали этой способностью. Они, без изменения строения тела, научились более эффективно им управлять!

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

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

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

Несколько слов об управлении. Поскольку игра относится к классу так называемых ”симуляторов демиурга”, человек может оказывать влияние как на глобальные параметры, так и на отдельных существ, и затем созерцать последствия своего вмешательства.

Есть 6 кнопок меню:

Pool – служит для создания новых бассейнов, сохранения текущего и загрузки старых. Создавая новый бассейн, можно заселить его полностью случайными существами, создать группу родственных существ, заселить весь бассейн зелёными существами с двумя гребными лапками, или же подготовить пустую ёмкость. Загрузка и сохранение несколько неудобны: есть всего 4 слота для различных аквариумов, и постоянно путаешься, кто у тебя где живёт.
Tweak – Можно настроить такие параметры мира, как скорость нарастания и распространение пищи, прирост энергии для существа от пищи, предел оставшейся энергии, ниже которого инстинкт размножения уступает место инстинкту питания и процент энергии, который отнимается от существа при рождении у него потомка. Кроме того, в этой закладке можно настроить признак, по которому свимботы будут выбирать предпочтительного партнера для скрещивания (цвет, размер, энергичность, форма тела).
Population – Графики изменения населения бассейна и количества пищи
Help – Справка по механизмам игры, с общих чертах то, о чём рассказывается в данной статье
Swimbot – Информация о выбранном свимботе, а также меню для изменения его генов. ДНК свимбота представляет собой последовательность из 70 чисел, каждое в пределе от 0 до 255. Следовательно, возможны 2^560 различных их комбинаций, что представляет собой число из 169 цифр. Здесь кодируется как окраска и строение тела, так и то, как он должен двигать частями своего тела, в зависимости от направления на цель. Можно сохранять ДНК интересных экземпляров (опять-таки, в один из четырёх слотов, при большом количестве существ приходится переназывать ранее сознанных через файловый менеджер) и обмениваться ими.
View – Выбор режима просмотра, в частности, можно найти наиболее энергетически эффективно существо, свимбота, оставившего наибольшее количество потомков или съевшего наибольшее количество еды.

Самая новая версия, Gene Pool 6, вышла совсем недавно, её можно скачать с официального сайта http://www.swimbots.com. Также там планируется создать галерею существ для этой версии игры, если вы пошлёте Джеффу интересное существо, у вас будут все шансы попасть в первое обновление. Его почта Jeffrey@Ventrella.com. Мне тоже очень интересно, какие существа выведутся в ваших бассейнах, присылайте их, пожалуйста, мне на intelmath@yandex.ru. Если несколько человек займётся разведение свимботов, можно будет устроить турнир существ: запустить по паре каждого вида в бассейн и определить сильнейших.

И в заключение пара слов о том, почему я выбрал именно такую тему для сегодняшнего обзора. Просто я недели три назад вернулся к своему давнему увлечению: моделированию биологических процессов на компьютере. Сначала расширил свою программу для игры ”Жизнь”, добавив в неё возможность изменения правил. Затем познакомился с великолепным набором клеточных автоматов Mirek's Cellebration. Уж было собирался описать его в обзоре, как переключился на игры семейства Аква-Тор, моделирующие взаимоотношения между популяциями продуцентов и консументов в замкнутом ареале и сделал собственную версию этой игры. Потом вспомнил о Террариуме от Майкрософт, лаборатории-практикуме для программистов .NET, поэкспериментировал с существами там, и, наконец, узнал про Генетический бассейн. Таким образом, не успевала оформиться статья, как мысль уже перескакивала на очередную тему из области искусственной жизни. Но ничего, наработки по всем интересных темам есть, и я их обязательно систематизирую и опишу в дальнейшем.

P.S.
Всё-таки, не зря я сохранил тот мир с двухвостками. После ещё одного дня симуляции там возникла наиболее приспособленная на данный момент из известных мне жизнеформа, ”чайки”. Вот как они выглядят:
чайка
В нормальном движении они машут "крыльями" с одинаковой силой. Если же "чайке" требуется сделать разворот, то одно "крыло" она выпрямляет, и начинают сильнее махать вторым. Такой способ разворота забирает меньше энергии, чем последовательное скручивание и раскручивание, как у их предков – "умных двухвосток". Можете попробовать скачать их ДНК и загрузить пару таких существ в один из своих миров (предварительно переименуйте файл в swimbot1.dna и положите в каталог с программой). Если забросить пару "чаек" в свежий случайно созданный мир, можно будет наблюдать довольно занятный эффект.

Задайте вопрос на блоге о математике