Проект "Киберморф"
Nov. 25th, 2011 12:18 pmФормальным началом истории можно считать момент, когда я набрёл на обсуждение эволюции (в клубе "Наука и технология" на Я.ру-шке). Продуктивным итогом моего участия в диспутах стал повышенный интерес к предмету и апгрейд имевшихся к тому времени у меня знаний. Тема заинтересовала настолько, что когда мне в руки попалась книга Ричарда Докинза "Слепой часовщик", я не смог побороть желание завести собственную "зверюшку". :)
Но на сколько многообещающей была идея создания условий для работы абстрактной эволюции, на столько же сложной она оказалась в реализации. История и причины выбора эволюционирующего организма достойны отдельного поста (тем более что в процессе разработки был момент, когда возникшие трудности наводили на мысль, что проект реализовать будет невозможно). Несомненно, биоморфы Докинза были идейными вдохновителями, но некоторые их свойства совершенно не подходили для проекта. В результате мучительного поиска "дрозофил" (или "кроликов" - кому как больше понятно) выбор неожиданно остановился программном коде, а проект был назван Киберморфом. Программа (которых сменилось уже более десятка версий - тоже эволюционирует ;-) ) обеспечивает изменчивость кода, наследственность и отбор, а эволюция в предоставленных условиях резвится как ей заблагорассудится.
Более подробно о некоторых результатах я планирую описать в последующих постах, а пока коротко о наиболее интересном.
Довольно быстро эволюция находит способы реализовать "скрытые мутации" - аналог "мусорной ДНК", которые делают частт последующих мутаций нейтральными. Этот процесс настолько выгоден, что продолжается даже если стоимость вставки гораздо дороже, чем стоимость других мутаций. Данный процесс характерен для любой системы, в которой существует хотя бы минимальный синтаксис. Когда я попытался запретить использовать эволюции знак комментария, который она использовала для формирования зон скрытой мутации, её "находчивость" меня изумила: она обнаружила недокументированную особенность в библиотеке определения расстояния Левенштейна. Судя по всему, библиотека написана на C, в котором нулевой символ в строке является терминирующим. Но в perl, на котором реализован проект, нулевой символ является равноправшым элементом строки. В общем, эволюция обнаружила эту разницу и стала использовать её для того, чтобы "спрятать" результаты нежелательных мутаций от "ока отбора".
При определённых условиях наблюдается расслоение всей популяции на несколько семейств, эдаким то ли видам, то ли штаммам. Хотя приравнивать получавшихся киберморфов к уровню даже одноклеточных, скорее всего неверно. Происходящее, на мой взгляд, гораздо больше похоже на химическую эволюцию.