влияние полового отбора (в том числе и "моды") на

Автор sanj, июня 06, 2009, 23:03:06

« назад - далее »

Imperor

Теперь бы сюда еще и храповик Меллера всунуть для проверки, было бы вообще здорово :)

Alexy

Так по идее при уменьшении величины популяции храповик должен заработать.
Редкие слабо-полезные аллели вместо "побед" по идее начнут исчезать.

Alexy

Может приспособленности надо было не прибавлять, а множить?

Кстати,
а доминантность/рецессивность редкой (=полезной) аллели как-то влияла на скорость его "победы"?

Роман Джиров

Цитата: "Imperor"Результаты тестов программы:
.... Таким образом тестируемая программа не выявляет никаких эффектов дилеммы Холдейна. Если бы "эффект Холдейна" имел место, то число необходимых поколений для одновременного отбора 20 признаков росло бы в экспоненциальной зависимости в сравнении с одновременным отбором 2 признаков. Мы же не видим не только экспоненциальной, но и вообще никакой зависимости числа необходимых поколений от числа одновременного отбираемых аллелей. И среднее число необходимых поколений (см. рисунок) тоже примерно одинаково для обоих случаев.

Таким образом, либо:
1. Где-то в программном коде пока что-то не так.
2. Либо мы что-то некорректное приняли в алгоритме.
3. Либо дилемма Холдейна, действительно, математический артефакт, в природе не встречающийся (и даже не моделирующийся на компьютере).
Склоняюсь к варианту 2.
Скачал программу (Огромная благодарность ее автору Игорю Антонову за качественный продукт, удобная ,наглядная и простая для юзера!) поганял, результат аналогичный результату Имперора, чему я несказанно, признатся, удивлен. Я уверен был, что программа покажет наличие затрудненности отбора при возрастании числа отбираемых признаков. Просто я считал ,что эти затруднения можно будет преодолеть, введя в программу дополнительные параметры - "волны жизни", колониальность, и все такое. Т.е. я совсем не ожидал, что эффект Холдейна не будет наблюдатся вообще в компмодели. Неверю глазам своим.

Отсюда вопрос: нельзя ли опубликовать в текстовом виде, пошагово алгоритм использованный в программе? Я думаю, никак нельзя обойти подробное рассмотрение алгоритма, может действительно ошибка вкралась, перепроверить бы лишний раз.

Ромашишка1971

Да, алгоритм в студию. Есть исходник, но пояснения не помешали бы.
Несколько вопросов:

    1). Процент выживаемости суммируется или перемножается?
    2). Подробнее, как происходит размножение?

      а). Каждая, случайно выбранная, пара даёт установленное число детей, и так пока не кончатся вакансии?
      б). Все пары дают потомство, и первоначально популяция возрастает в несколько раз, потом отсекаются лишние особи пропорционально выживаемости?
      в). Все случайно выбранные пары дают потомство по 1 особи, а потом цикл повторяется, число детей для одной пары не должно превышать разрешённого? В этом случае все пары постоянны или в каждом цикле формируются заново?
    3). Как устанавливается верхний предел численности популяции?
    4). Генератор случайных чисел видимо стандартный? Может распределение не случайно?

*****

Вообще, программа шустро работает, что вызывает удивление.  :shock:
Видимо глюк.

Вызывает интерес, как она заработает в отлаженном виде?  :)

*****

Огромное спасибо Игорю Антонову за быструю реализацию идеи!  :)

Ромашишка1971

Несколько соображений по поводу ожидаемых результатов.
Ещё раз посмотрите заметку http://www.sekj.org/PDF/anz40-free/anz40-185.pdf, кто не читал.
Дело в том, что при первоначальной постановке задачи упущен один параметр.
Холдейн имел ввиду, не только то, что нужно зафиксировать полезные признаки и вытеснить вредные признаки сразу в более, чем одной аллели, но и успеть разгрузить популяцию от создаваемого мутациями генетического груза. Мутации, в большинстве случаев, вредные и рецессивные. Таковы были условия Холдейна. Leonard Nanney в своём эксперименте учитывает мутации и обращает внимание читателя на них особо. Опыт показал, что способность популяции зафиксировать полезные признаки, сильно зависит от появления мутаций. В первом эксперименте была задана частота мутации в 1 мутацию на 300 поколений на один признак. При такой частоте освободиться от вновь возникающих мутаций популяция смогла уверенно, только при численности в 50 000 особей и больше. При численности от 5 000 до 50 000 особей результат мог получиться разным. А при численности менее 5 000 особей, популяция никогда не освобождалась от груза. Однако, при понижении частоты мутаций до 1 мутации на 700 поколений на 1 признак, популяция стала способна освобождаться от груза мутаций при численности от 5 000 особей. То есть, понижение частоты мутаций в 2,33 раза, понизило необходимую численность популяции в 10( :!: ) раз. Зависимость сильно нелинейна.
В нашей задаче этого параметра вообще нет, может и не стоит удивляться, что программа так быстро работает?

Ромашишка1971

Попросил бы публику поактивней высказываться в адрес "Дилеммы Холдейна", а то  Игорь Антонов отладит программу окончательно и всякий интерес к дилемме пропадёт.  :)

*****

Тем, кто считает, что "Дилемма Холдейна", в принципе, непреодолимое препятствие.
Напомню, что программа Игоря Антонова неявно учитывает сразу два фактора незамеченных Холдейном.
1). Цену потери особи с более чем одной вредной мутацией;
2). Ограниченную численность популяции;
Первый фактор присутствует всегда - это математическое свойство.
Второй присутствует почти всегда, так как избавиться от ограничений на численность популяция может, только на очень короткие промежутки времени, редко больше, чем на одно поколение.
В реальности остаются ещё несколько довольно весомых факторов:
3). Мягкая эволюция;
4). Нейтральные мутации;
5). Ювенильный фактор;
6). Особенности полового отбора;
7). Особенности естественного отбора в дикой природе.
Могут быть и ещё...

DNAoidea

Цитата: "Imperor"
Ага :) Но этого не может быть  :wink:
почему?

Ромашишка1971

:idea: Интересная гипотеза!!!
Фактор ограничения численности сильно( :!: ) меняет характер отбора между полезными и вредными признаками. Упоминания о нём я слышал и ранее, но не придал особого значения. Однако, пытаясь представить себе размножение диплоидной популяции, я неожиданно сам обнаружил, тот же эффект. Суть его заключается в том, что если вы задали некие полезные признаки с начальным уровнем выживаемости, и вредные рецессивные с выживаемостью несколько меньшей начальной. То после первой же итерации вычислений характер распределения численности сочетаний признаков будет сильно зависеть от наличия ограничений численности популяции:
1.) Если ограничений нет, то избавиться от вредных рецессивных признаков в популяции становиться невозможным. Количество вредных признаков будет держаться на одном уровне - достаточно низком, но не исчезнет полностью. График распределения особей будет иметь чёткий провал в области несложных комбинаций признаков, т.е., от 2-х до 8-ми признаков в комбинации;
2.) Если ввести ограничения на численность, даже не полные(например популяция способна удваивать за одно поколение численность, а вы вводите ограничение роста не более чем на несколько десятков процентов за поколение.), то характер распределения особей в поколении меняется. Провал в области комбинаций от 2-х до 8-ми признаков уменьшается, а ветви графика приподнимаются. Скорость избавления от вредных рецессивных признаков возрастает. Если численность зафиксировать как константу, то характер распределения численности особей относительно комбинаций вредных и полезных признаков ещё сильней изменится. Избавление от рецессивных признаков становится достаточно быстрым. Много быстрее, чем можно себе представить.  :!:

*****

Проверю ещё раз расчёты.
Хотя эта особенность известна в биологии  наверное давно, но я, кроме простого упоминания о ней, ничего не слышал. Я просто не успел о ней прочитать, так как всё время размышлял о других вещах в "Дилемме Холдейна".
Этот эффект вызвал у меня, надо сказать, некоторое потрясение...   :shock:
Если он действительно существует, так как я его представляю, то у него просто фундаментальные свойства, хотя он и очень прост. :!:

*****

Если я не прав, то посмеёмся вместе.  :wink:
Если прав - то этот эффект и ошибка в цене надёжно не дадут "Дилемме Холдейна" заметно снизить скорость отбора.  :!:

augustina

Цитата: "Ромашишка1971"Если прав
В реальности всегда есть ограничение по численности. Еще Дарвин на это указывал. Каждая особь стремиться к неограниченному количеству потомков, но окружающая среда, голод, хищники, постоянно истребляют особей, сокращая численность. Баланс между истреблением и репродуктивностью и есть размер популяции.
В программе это можно задать как случайно меняющуюся величину, в каких либо пределах (желательно изменяемую, по воле исследователя).

Ромашишка1971

Цитата: "augustina"В реальности всегда есть ограничение по численности.
Ну, это естественно. В природе так и есть.
Я немного о другом. Ограничение численности радикально влияет на возможность выполнения "Дилеммы Холдейна". Это просто невероятно...
:D

augustina

Цитата: "Ромашишка1971"Я немного о другом. Ограничение численности радикально влияет на возможность выполнения "Дилеммы Холдейна". Это просто невероятно...
:D
Что же тут невероятного? Модель - она и есть модель... Не все было учтено Холдейном при своих измышлениях. Я вот предполагаю, что и количество нейтральных мутаций будет влиять на результаты. Причем не просто количество, а способность нейтральных превращаться либо в отрицательные, либо в положительные, так же случайным образом. Они (нейтральные) ведь будут "вышибать места" предназначенные для положительных и отрицательных. И уже будет из 20 не 10:10, а скажем 5:10 (а 5 - нейтральные). А еще если нейтральные и "подыгрывать" начнут каким-либо...! Например, более многочисленным. Или наоборот, играть против "сильного"..В реальности ведь так и происходит. Учитывает ли это алгоритм?

Роман Джиров

Цитата: "Игорь Антонов"
Цитата: "Imperor"
...Таким образом очевидно, что никакой дилеммы Холдейна здесь даже не просматривается - не наблюдается не только замедления времени отбора по экспоненте (с увеличением числа аллелей), но вообще никакого замедления не наблюдается - аллелю совершенно всё равно, один он отбирается, или в компании из еще 11 аллелей.
В моих пробах закономерное замедление отбора с ростом числа одновременно отбираемых аллелей наблюдалось.
Поигрался еще немного программой. Наверное ,я сильно поспешил с выводами о полном отсутствии эффекта Холдейна. Вполне возможно ,он присутствует, просто при малом числе прогонов программы случайные флуктуации перевешивают влияние эффекта. Если сделать тысячу-другую прогонов тогда и станет видно. Но если нет ошибок в алгоритме и глюков в программе, то тогда этот эффект намного слабее , чем я ожидал, потому я и поспешил с выводами. Словом, пока ясно только то, что еще ничего не ясно.  :)

Alexy

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

В принципе по логике формировать приспособленность особи следовало бы так:
Приспособленности не прибавлять (как видимо делалось?), а множить (Ведь взаимодействие генов принимается мультипликативным)
Например:
у владельца 4-х слабовредных аллелей (дающих снижение выживаемости на 10%) выживаемость = 1 - 4*0,1 =  0,6 = 60%.
А должна была бы быть (1- 0,1)(1- 0,1)(1- 0,1)(1- 0,1) = 0,9^4 = 0,6561 = 65,61%
Разница правда небольшая, но она увеличивается с увеличением числа рассматриваемых локусов


А вводить случайность и определять выживших среди потомства наиболее логично так:
Цикл:
Перенумеровать все текущие особи потомства.
Создать двухмерный массив {<номер особи>, <сумма приспособленностей (в % или десятых или ещё более мелких долей %-ов, в зависимости от выбранной точности) её и всех предыдущих особей>}
Случайным (по второй переменной массива) образом выбрать 1 элемент из этого массива.
Конец цикла. (Повторить без отбракованной особи, пока не отбракуется нужное число особей)

Игорь Антонов

Описание алгоритма моделирования отбора, реализованного в тестируемой программе.

1. Создаём популяцию и инициализируем её исходное состояние.

Создаётся экземпляр класса Population. При его создании в памяти автоматически размещается динамический массив из total_individuals особей, для каждой из которых, в соответствии с заданным числом наблюдаемых признаков создаётся массив стандартных локусов (поле g класса Individual). Гены стандартного локуса получают признак рецессивности, если для наблюдаемых аллелей задан флаг доминантности. И, соответственно, наоборот.
Метод set_alleles изменяет свойства наблюдаемого аллеля у заданной доли особей исходной популяции. Особь для каждой атомарной инъекции выбирается случайно.

2   Моделируем отбор

2.1   Выбираем из массива особей два случайных экземпляра (o1 и o2). Объекты при этом удаляются из массива. Генерируем четыре (или сколько задано) дочерних объекта (child). Содержание генома определяется для всех потомков единообразно: в хромосому a помещается случайно выбранный аллель из а или b хромосомы первого родителя, в хромосому b попадает случайно выбранный аллель из а или b хромосомы второго родителя.
2.2   Затем вычисляется пригодность каждой новой особи (метод get_fitness). Для этого суммируются и делятся на 100 значения влияния на  пригодность (поле shift класса Gen) доминантных аллелей  всех локусов особи. Результат прибавляется к единице. Затем по пригодности вычисляется вероятность для особи участвовать в следующем цикле размножения.  Для этого пригодность умножается на коэффициент, обратно пропорциональный размеру популяции, числу потомков пары  и среднестатистической пригодности особи по популяции в целом.
2.3   Проверяется – произошло ли случайное событие с вероятностью участия особи в размножении (метод Form1.ok()). Если да, текущий экземпляр добавляется к новому массиву  особей (_obj), если нет – он отбрасывается. Обработав всех потомков текущей пары переходим на пункт 2.1  до тех пор, пока исходный массив не опустеет.
2.4   Заменяем исходный массив на новый
2.5    Повторяем цикл пока пользователь не нажмёт на СТОП или  отбор в первом из контролируемых локусов не завершится.