Развитие эмбриона — процесс слишком замысловатый, чтобы можно было реалистично сымитировать его на маленьком компьютере. Поэтому нужно придумать некий упрощенный аналог: найти такое простое правило вычерчивания рисунков, которому компьютер мог бы легко подчиняться и которое могло бы варьировать под влиянием “генов”. Какое же правило мы выберем? В учебниках по информатике часто демонстрируются возможности так называемого рекурсивного программирования на примере простого алгоритма роста деревьев. Компьютер начинает с того, что чертит одиночную вертикальную линию. Затем эта линия разветвляется на две. Затем каждая из получившихся ветвей разделяется на две ветви второго порядка. Затем каждая из этих новых ветвей разделяется на ветви третьего порядка и т. д. Такое программирование называется рекурсивным, потому что в каждой точке всего растущего дерева применяется одно и то же правило (в данном случае правило ветвления). Каким бы большим дерево ни вырастало, каждая его веточка разделяется снова и снова в соответствии все с тем же правилом.
“Глубиной” рекурсии называется такое число веточек n-го порядка, которому позволяется вырасти, прежде чем процесс будет остановлен. На рисунке 2 показано, что будет, если задать компьютеру один и тот же алгоритм черчения, но с разными значениями глубины рекурсии. При высоких степенях рекурсии получается довольно запутанный узор, однако, как ясно видно из рис. 2, достигается он за счет того же самого простейшего правила ветвления. Несомненно, это именно то, что происходит и у настоящих деревьев. Система ветвей дуба или яблони выглядит сложной, но в действительности таковой не является. Правило, лежащее в основе процесса ветвления, элементарно. Просто оно снова и снова применяется в каждой растущей верхушке каждой веточки: ветви дают начало ветвям второго порядка, каждая из которых, в свою очередь, ветвям третьего порядка и так далее. Вот почему все дерево становится в итоге большим и ветвистым.
Рекурсивная бифуркация является также хорошей метафорой эмбрионального развития как растений, так и животных. Я не хочу сказать, будто зародыши животных похожи на ветвящиеся деревья. Они на них не похожи. Но любой эмбрион растет благодаря делению клеток. Каждая клетка всегда делится на две дочерние. А гены в конечном счете всегда осуществляют свои воздействия на организм посредством локального влияния на клетки, которые раздваиваются и раздваиваются. Гены животного ни в коем случае не являются грандиозным чертежом, подробным планом строения целого организма. Как мы дальше увидим, они похожи скорее на рецепт, нежели на чертеж, и более того, на рецепт, которому следует не весь развивающийся зародыш, а каждая клетка или каждое небольшое скопление делящихся клеток. Я не отрицаю того, что любой эмбрион, а впоследствии и взрослая особь имеет некое целостное строение. Но возникает это крупномасштабное строение за счет множества мелких локальных воздействий на клеточном уровне, происходящих повсюду в развивающемся организме. И в первую очередь местные воздействия сказываются на удвоении клеток — то есть на некоей разновидности ветвления. Именно регулируя такие локальные события, гены в конечном итоге влияют и на строение взрослого организма.
Итак, простое правило ветвления выглядит как многообещающий аналог эмбрионального развития. Что ж, превращаем это правило в небольшой компьютерный алгоритм, которому даем название РАЗВИТИЕ, чтобы затем внедрить его в более масштабную программу ЭВОЛЮЦИЯ[2]. При работе над этой большой программой прежде всего следует задуматься о генах.
Рис. 2
Какого рода “гены” могут быть представлены в нашей компьютерной модели? В реальной жизни гены делают две вещи: влияют на индивидуальное развитие и передаются следующим поколениям. У настоящих животных и растений десятки тысяч разных генов, но мы в своей компьютерной имитации скромно ограничимся девятью. Каждый ген из этой девятки будет охарактеризован в компьютере просто неким числом, которое будет называться значением гена. Какой-то отдельно взятый ген может, к примеру, иметь значение 4 или –7.
Как же эти гены будут влиять на развитие? Ну, они могут делать это множеством разных способов. Главное, чтобы они вносили в алгоритм РАЗВИТИЕ какие-то небольшие изменения количественного характера. Например, один ген мог бы влиять на угол ветвления, а другой — на длину какой-нибудь из веточек. Еще одна возможная задача для генов, которая сразу же приходит в голову, — менять глубину рекурсии, число последовательных ветвлений. Ответственным за этот эффект я назначил ген номер 9. Таким образом, вы можете рассматривать рис. 2 как изображение семи близкородственных организмов, идентичных друг другу во всем, за исключением гена 9. Не буду вдаваться в подробности того, что именно делает каждый из восьми других генов. Представление о том, какого рода воздействия они производят, вы можете получить, изучив рис. 3. В центре расположено исходное дерево — одно из тех, что изображены на рис. 2. Вокруг него располагается еще восемь. Они точно такие же, как и то, которое в центре, но только у каждого из них был изменен — “мутировал” — какой-то из этих восьми генов. Например, картинка справа от центрального дерева показывает нам, что происходит, когда ген 5 мутирует и к его значению прибавляется 1. Будь на странице больше места, я бы расположил вокруг центрального дерева кольцо из 18 мутантов. Почему именно из 18? Потому что у нас есть девять генов, и каждый из них может мутировать в сторону как “повышения” (когда к его значению прибавляется 1), так и “понижения” (когда из его значения вычитается 1). Следовательно, 18 изображений хватило бы для того, чтобы показать всех мутантов, каких можно получить из одного центрального дерева путем единичного преобразования.
Рис. 3
У каждого из этих деревьев имеется своя собственная, уникальная “генетическая формула” — численные значения всех девяти генов. Я не стал выписывать эти генетические формулы здесь, так как сами по себе они ничего вам не скажут. Это же, кстати, справедливо и для настоящих генов. Гены начинают значить что-либо, только когда в ходе белкового синтеза преобразуются в предписания для развивающегося зародыша. То же и в нашей компьютерной модели: численные значения девяти генов обретают смысл, только будучи переведенными в указания по росту древовидного узора.
Но о работе каждого конкретного гена можно получить представление, сравнивая два организма, о которых известно, что они различаются только в этом гене. Сравните, например, исходное дерево в центре рисунка с теми, что расположены по обе стороны от него, и вы получите некоторое представление о том, что делает ген номер 5.
Ровно тем же самым занимаются и генетики в реальной жизни. Обычно генетики не знают, какими путями гены оказывают свое воздействие на эмбрионы. Не знают они и полной генетической формулы каждого животного. Но, сравнив два взрослых организма, различающиеся по одному-единственному гену, они могут увидеть, какое именно действие этот ген оказывает. На самом деле все несколько сложнее, поскольку эффекты генов взаимодействуют друг с другом способами более замысловатыми, чем простое сложение. Но то же самое верно и по отношению к компьютерным деревьям. Еще как верно, и на следующих рисунках мы это увидим.
Вы, вероятно, обратите внимание, что все формы, которые у нас получатся, будут двусторонне-симметричными. Это я установил такое ограничение для подпрограммы РАЗВИТИЕ — отчасти из эстетических соображений, отчасти чтобы уменьшить число необходимых генов (если бы гены не производили одно и то же зеркально отраженное действие на обе стороны вычерчиваемого дерева, нам понадобился бы отдельный набор генов для левой половины и отдельный — для правой), и еще отчасти потому, что надеялся получить картинки, напоминающие животных, а животные в большинстве своем довольно-таки симметричны. По этой же причине отныне я прекращаю называть эти создания “деревьями”, а буду говорить “организмы” или “биоморфы”. Название “биоморфа” придумал Десмонд Моррис — для существ, отдаленно напоминающих животных, с его сюрреалистических полотен. К его картинам я испытываю особенную привязанность, поскольку одна из них была воспроизведена на обложке моей первой книги. Моррис утверждает, что биоморфы “эволюционируют” в его воображении и что их эволюцию можно проследить по его картинам.
Но вернемся к нашим компьютерным биоморфам и к кругу из 18 возможных мутантов, восемь типичных представителей которых изображены на рис. 3. Поскольку каждый из них находится в одном-единственном мутационном шаге от исходной биоморфы, нам будет нетрудно рассматривать их всех как ее детей. Итак, у нас есть своего рода РАЗМНОЖЕНИЕ, которое, точно так же как и РАЗВИТИЕ, будет воплощено в простом компьютерном алгоритме — еще одном готовом “строительном блоке” для нашей большой программы ЭВОЛЮЦИЯ. Про РАЗМНОЖЕНИЕ следует сказать две вещи. Во-первых, никакого секса: размножение бесполое. Поэтому я полагаю, что биоморфы женского пола — ведь животные, размножающиеся без полового процесса (тли, например), почти всегда устроены как самки. Во-вторых, имеется ограничение для мутаций: всегда происходит только одна за раз. Выходит, что дочь отличается от своей родительницы только по одному из девяти генов. Более того, при каждой мутации к значению соответствующего родительского гена может быть добавлено только +1 или –1. Это не более чем произвольные условия, которые могли бы быть и иными без ущерба для биологического правдоподобия.
Но вернемся к нашим компьютерным биоморфам и к кругу из 18 возможных мутантов, восемь типичных представителей которых изображены на рис. 3. Поскольку каждый из них находится в одном-единственном мутационном шаге от исходной биоморфы, нам будет нетрудно рассматривать их всех как ее детей. Итак, у нас есть своего рода РАЗМНОЖЕНИЕ, которое, точно так же как и РАЗВИТИЕ, будет воплощено в простом компьютерном алгоритме — еще одном готовом “строительном блоке” для нашей большой программы ЭВОЛЮЦИЯ. Про РАЗМНОЖЕНИЕ следует сказать две вещи. Во-первых, никакого секса: размножение бесполое. Поэтому я полагаю, что биоморфы женского пола — ведь животные, размножающиеся без полового процесса (тли, например), почти всегда устроены как самки. Во-вторых, имеется ограничение для мутаций: всегда происходит только одна за раз. Выходит, что дочь отличается от своей родительницы только по одному из девяти генов. Более того, при каждой мутации к значению соответствующего родительского гена может быть добавлено только +1 или –1. Это не более чем произвольные условия, которые могли бы быть и иными без ущерба для биологического правдоподобия.
Нельзя сказать того же о другом свойстве нашей модели, отражающем один из основных принципов биологии. Форма потомка не создается непосредственно из родительской формы. Очертания каждой новой биоморфы определяются значениями ее собственных девяти генов (влияющих на величину углов, протяженность линий и т. п.), и каждый потомок получает свои девять генов от родительской девятки. В реальной жизни происходит ровно то же самое. Следующему поколению передается не тело — передаются гены, и только они. Гены влияют на эмбриональное развитие того тела, в котором находятся. Затем эти же гены либо передаются следующему поколению, либо нет. Участие в индивидуальном развитии организма никак не влияет на природу генов, однако вероятность их дальнейшей передачи может зависеть от успеха того тела, которое они помогали строить. Вот почему необходимо, чтобы в нашей компьютерной модели два этих процесса — РАЗВИТИЕ и РАЗМНОЖЕНИЕ — были отделены друг от друга, как два водонепроницаемых отсека. Перегородка, разделяющая их, абсолютно герметична за исключением того момента, когда РАЗМНОЖЕНИЕ передает РАЗВИТИЮ значения генов, чтобы те влияли на рост новой биоморфы. РАЗВИТИЕ ни в коем случае не передает гены РАЗМНОЖЕНИЮ обратно, иначе это был бы своего рода ламаркизм (см. главу 11).
Итак, мы составили два наших программных модуля, обозначенных как РАЗВИТИЕ и РАЗМНОЖЕНИЕ. РАЗМНОЖЕНИЕ занимается тем, что передает гены из поколения в поколение с определенной вероятностью мутации. В каждом отдельно взятом поколении РАЗВИТИЕ берет предоставленные РАЗМНОЖЕНИЕМ гены и преобразует их в действие по вычерчиванию фигурок, благодаря чему те появляются на экране компьютера. Настало время объединить эти два алгоритма в одну большую программу под названием ЭВОЛЮЦИЯ.
В сущности, ЭВОЛЮЦИЯ — это бесконечно повторяющееся РАЗМНОЖЕНИЕ. В каждом поколении РАЗМНОЖЕНИЕ получает гены от предыдущего поколения и передает их следующему — но с небольшими случайными изменениями, мутациями. Мутация состоит в том, что к значению какого-то случайно выбранного гена прибавляется +1 или –1. Из этого следует, что в ряду сменяющих друг друга поколений генетические отличия от исходного предка мало-помалу накапливаются и становятся очень большими. Но при всей случайности мутаций эти накапливаемые из поколения в поколение изменения не случайны. В любом отдельно взятом поколении биоморфы-потомки отличаются от своей родительницы случайным образом. Но в том, кто именно из этих потомков будет отобран, чтобы дать начало следующему поколению, случайности уже нет. Вот тут-то и начинает действовать дарвиновский отбор. Критерием для него служат не гены сами по себе, а организмы, на форму которых гены оказывают влияние в ходе РАЗВИТИЯ.
Помимо самовоспроизводства при РАЗМНОЖЕНИИ гены еще и передаются в каждом поколении подпрограмме РАЗВИТИЕ, которая вычерчивает на экране соответствующие организмы, следуя своим собственным строго установленным правилам. В каждом поколении нам показывается весь “выводок” “детенышей” (то есть биоморф следующего поколения). Все они являются мутантными дочерьми одного и того же родительского организма, и каждая отличается от него по какому-то одному гену. Такая невероятно высокая частота мутаций — свойство откровенно небиологическое. В действительности вероятность того, что ген мутирует, составляет зачастую меньше единицы на миллион. Причина, почему в программу был заложен такой высокий уровень мутаций, заключается в том, что все это разворачивающееся на экране компьютера действо предназначалось для человеческих глаз. Ни у какого человека не хватит терпения дожидаться одной мутации в течение миллионов поколений!
Человеческий глаз вообще сыграет в этой истории важную роль. Он будет осуществлять отбор — рассматривать всех потомков в выводке и оставлять одного на разведение. Выбранный таким образом организм даст начало следующему поколению, и теперь уже его мутантные детеныши будут все разом представлены на экране. Человеческий глаз выполняет здесь абсолютно ту же функцию, что и при выведении породистых собак или декоративных роз. Другими словами, наша модель является, строго говоря, моделью не естественного отбора, а искусственного. При настоящем естественном отборе дело обстоит так: если организм обладает качествами, нужными для выживания, то его гены выживают автоматически, поскольку находятся внутри него. То есть само собой выходит, что гены, которые выживают, это и есть те гены, которые сообщают организмам признаки, помогающие выжить. В нашей же компьютерной модели критерием отбора служит не выживание организма, а его способность отвечать человеческой прихоти. Прихоть не обязательно долж на быть праздной и случайной — ничто не мешает нам проводить селекцию по какому-то определенному признаку, такому как, например, “сходство с плакучей ивой”. Однако в моем случае человек-отборщик чаще всего был капризным и беспринципным, что не так уж отличается от некоторых разновидностей естественного отбора.
Человек указывает компьютеру, какую биоморфу из имеющегося выводка оставить для продолжения рода. Гены избранницы передаются подпрограмме РАЗМНОЖЕНИЕ, и приходит время следующему поколению появиться на свет. Подобно реальной эволюции живого этот процесс может продолжаться бесконечно. Биоморфа из любого поколения находится всего в одном мутационном шаге как от своей предшественницы, так и от наследницы. Но по прошествии 100 циклов программы ЭВОЛЮЦИЯ наши биоморфы могут оказаться где угодно в пределах 100 шагов от своего исходного предка. А 100 мутационных шагов могут далеко завести.
Однако, начиная играть с только что написанной программой ЭВОЛЮЦИЯ, я и вообразить не мог, насколько далеко. Первое, что меня удивило, — это то, как быстро мои биоморфы перестали быть похожими на деревья. Исходное раздваивание ветвей никуда не делось, но оказалось, что его можно с легкостью завуалировать многократным пересечением линий, образующим сплошные цветовые пятна (иллюстрации, увы, только черно-белые). На рисунке 4 показана одна конкретная история эволюционных преобразований, продолжавшаяся в течение всего-навсего 29 поколений. Матерью-прародительницей было крохотное существо, состоящее из одной-единственной точки. Но хотя предковый организм — всего лишь точка (как бактерия в первичном бульоне), его потенциал к ветвлению такой же, как и у дерева, расположенного в центре рис. 3. Просто ген номер 9 велел ему разветвиться ноль раз! Все создания, изображенные на рис. 4, являются потомками этой точки, но, чтобы не загромождать страницу, я не стал размещать на ней всех потомков, какие мне в действительности были предъявлены. Из каждого поколения я взял только успешную биоморфу (то есть давшую начало следующему поколению) и одну или двух из ее неудачливых сестер. Итак, на рисунке представлена преимущественно одна, магистральная линия эволюции, направляемая моими эстетическими предпочтениями. Все до единой стадии, принадлежащие к этой основной линии, там присутствуют.
Давайте посмотрим на рис. 4 и кратко пройдемся по первым нескольким поколениям “генеральной линии” эволюции. Во 2-м поколении точка превращается в букву Y. В течение следующих двух поколений Y увеличивается в размерах. Затем ее рога немного искривляются, как у хорошей рогатки. В 7-м поколении искривленность усиливается, и две “ветви” почти что соприкасаются кончиками. В поколении 8 они удлиняются и приобретают по паре маленьких отростков. В следующем, 9-м поколении эти отростки пропадают, а рукоятка рогатки становится более вытянутой. Поколение 10 напоминает цветок в разрезе: изогнутые боковые ветви, подобно лепесткам, обрамляют центральный вырост-“рыльце”. В 11-м поколении “цветок” укрупняется, и его форма становится чуть более сложной.