В комментариях к прошлой записи самый клёвый тролль ЖЖ
kray_zemli затроллил меня тем, что назвал фишеровское убегание гуманитарщиной (ну или как он там любит выражаться).
(Что такое "фишеровское убегание" тем, кто не знает, как всегда отлично
объясняет Марков).
Решив доказать
kray_zemli, что эти "рассуждения на пальцах" - вовсе не гуманитарщина, я по-быстренькому написал симулятор, гм, секса оленей.
В прошлых сериях были
бабочки, но сейчас нас сильно интересуют эффекты дрейфа, поэтому популяция размером в десятки тысяч бабочек нам не нужна. Возьмём 200 животных покрупнее, например, оленей.
Основные упрощения примерно те же: размер популяции постоянный, пол оленей при скрещивании не учитывается (г-жа Мизулина, отвернитесь), наследование признаков равновероятное от "папы" или "мамы" (т.е. тот факт, что в жизни хромосомы делятся на пары, и признаки бывают "доминантные/рецессивные", нами игнорируются).
Признаков у нас будет всего два: уши длинные/короткие (бинарный признак), и любит олень других оленей с длинными ушами, или любит с короткими, и насколько сильно это его пристрастие выражено (вещественное число от 0 до 1). Наследование этих признаков независимое.
В одной пачке тестов олени у нас будут беспорядочные, совокупляющиеся с кем попало равновероятно. Во второй пачке олени будут разборчивые, но изначально каждый будет разборчив по-своему: кому-то длинные уши нравятся, кто-то их терпеть не может, кому-то почти всё равно (детали, кому интересно, в коде).
Проводим 6 тестов: два для случая нейтрального признака (длина ушей не влияет на выживание), два для случая слегка положительного отбора (длинные уши повышают выживаемость на 2%), и два для случая сверх-положительного отбора (длинные уши повышают выживаемость на 10%). Нас будет интересовать среднее число поколений, за которое признак {длинно,коротко}ухости полностью закрепляется в популяции. Среднее это вычисляется из 80 независимых тестов, если кто не доверяет моим доверительным интервалам, можете увеличить переменную numTests (а у кого браузер зависнет, я не виноват).
Код (с возможностью его запустить, отредактировать и т.п.) лежит здесь:
http://codepen.io/zfinder/pen/KDHzbОно может подтормаживать; всё-таки JavaScript не предназначен для массивных вычислений, я его выбрал только потому, что так результатами проще делиться.
А результаты эти меня, честно говоря, удивляют.
Во-первых, фишеровское убегание, очевидно, вовсе не миф и не гуманитарщина: нейтральный признак у "разборчивых" оленей закрепляется почти вдвое быстрее, чем у предпочитающих "беспорядочные связи". Но это как раз нормально, это ожидалось.
Но во-вторых, "половая разборчивость" в этих тестах никогда не приносит пользы, а ещё и немножечко вредит. Нейтральный признак у "разборчивых" закрепляется гораздо быстрее, а вот полезный, наоборот, медленнее. Эволюционно эффективному механизму пристало вести себя в точности наоборот. Это очень странно. Значит, метаэволюционные механизмы должны всякую такую разборчивость устранять очень быстро - гораздо эффективнее будет, если все do it со всеми, цветы любви цветут безгранично и т.п.; ещё и ресурсы никакие не нужно будет тратить на "ухаживания" (чего в модели, впрочем, нет).
Вывод отсюда можно, видимо, сделать только такой, что модель была упрощена уже до полного несоответствия реальности.
Почему? Чего именно не хватает? Оно "работает" только на определенных размерах популяции? Все-таки важно деление на "мальчиков" и "девочек"? Все-таки важны эффекты имени Менделя? Важно то, что разных признаков должно быть несколько, и они должны как-нибудь нетривиально сочетаться в своем влиянии на выживание? Кто считает, что понимает, как устроена эволюция - делайте ваши ставки, а мы сразу вместе и проверим, так ли это. Благо, все модели под рукой.
Что интересно, в рассуждениях "на пальцах", приводимых Марковым, ничего этого тоже нет. Биологи, изучающие эволюцию, расскажите, вы в своей не научно-популярной ипостаси код пишете? Или подобные объяснения вполне "прокатывают", а с (само)обманом вы боретесь как-то иначе? Интересно!
Ах да, чуть не забыл, нужна картинка же. Тут, конечно, надо бы про секс оленей, я поискал, но они все унылые. Мне вообще-то вот эта лиса гораздо больше понравилась, хоть она и не про секс:
Доб. В комментариях
modulo_zero нашёл в моем коде "нефизичное" допущение, и поправил симуляцию так, чтобы фишеровское убегание ускоряло эволюцию везде. Исправление, на мой взгляд, очень убедительное. А
a_bronx правильно отметил, что устоявшийся русский перевод "убегание" очень неудачный, на самом деле "runaway" здесь означает "разнос" (as in "машина пошла в разнос").