Шрифт:
Программа размножит эту последовательность в тысяче экземпляров, внося в нее случайные мутации с заданной частотой. Например, пусть каждая буква в каждой копии с вероятностью 0,05 мутирует, т. е. заменяется другой случайной буквой. В результате каждая двадцатая (в среднем!) буква у каждого потомка будет отличаться от родительской. Зададим оптимум, к которому нужно стремиться, – некую осмысленную фразу. Попробуем сначала прийти к оптимуму без помощи отбора, методом случайных блужданий. Для этого из 1000 потомков выберем одного наугад и снова размножим в 1000 экземпляров с мутациями. И еще раз, и еще.
Вот что у нас получилось. Справа указаны номер поколения и степень отличия от целевой последовательности, т. е. удаленность от оптимума:
Бесполезно! За 100 поколений – ни малейшего прогресса, никакого приближения к оптимуму. Фраза осталась такой же бессмысленной, какой и была. Случайное блуждание в пространстве последовательностей, которое мы сейчас смоделировали, практически не дает шанса найти конкретную точку в белковой вселенной.
Нет, конечно, будь у нас бесконечный запас времени, когда-нибудь мы все же наткнулись бы на оптимум. Когда, вот в чем вопрос. Мы использовали 26 букв латинского алфавита и пробел, итого 27 знаков. Длина фразы – 60 знаков. Оптимум – это одна комбинация из 2760 (~7,6x1085) возможных. Вариантов больше, чем атомов во Вселенной. Примерно столько поколений нам и потребуется, чтобы случайно наткнуться на нужную точку.
К такому способу поиска вполне приложимы известные рассуждения об урагане, пролетевшем над свалкой, который ни за что не соберет из мусора «боинг-747», и об обезьяне, которая, бессмысленно стуча по клавиатуре, никогда не напишет «Войну и мир». Таким способом – и впрямь не напишет. К счастью для нас, эволюция идет вовсе не этим способом. Или, если быть совсем уж точными, не только этим способом.
Мы все-таки не зря моделировали случайные блуждания – у них тоже есть аналог среди эволюционных процессов. Именно так идет нейтральная эволюция. Так меняются последовательности (аминокислотные или нуклеотидные), от которых приспособленность организма не зависит и которые поэтому не находятся под действием отбора.
Между прочим, хоть блуждания и случайные, некие закономерности можно заметить и в этом случае. Обратите внимание, что эволюционирующая последовательность постепенно становилась все менее похожа на исходную. Фраза из поколения № 1 отличается от исходной только тремя знаками, в поколении № 2 мы видим уже семь отличий, в поколении № 4–13, в пятом поколении – 16 отличий. К 50-му поколению никакого сходства с исходной последовательностью не осталось. Но в течение первых 20–25 поколений сходство сохранялось, постоянно уменьшаясь. Поэтому мы могли по степени этого сходства примерно определить номер поколения, к которому принадлежит данная фраза. Мы могли, сравнив данную фразу с исходной и зная скорость мутирования, примерно оценить, сколько поколений разделяет эти две фразы! На этом принципе основан замечательный метод молекулярных часов, с которым мы познакомимся в следующем разделе. А пока вернемся к отбору.
Изменим немного нашу программу. Пусть теперь для размножения выбирается не любая из 1000 последовательностей наугад, а лучшая – наиболее похожая на «оптимальную». Все прочее оставим как было. Запускаем программу и получаем следующее: