Разберемся с Дилеммой Холдейна (почему в некоторых комп моделях она не наблюда)

Автор Alexy, марта 26, 2011, 19:21:15

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

Mr. B

"Из опыта совершенно очевидно, что наименьшее зерно природной честности и доброжелательности оказывает большее влияние на поведение людей, чем самые напыщенные взгляды, предлагаемые теологическими теориями и системами." — Д. Юм.

Vuto

Цитата: Alexy от апреля 04, 2011, 12:29:37В реальном объекте только пространство (но оно не всегда моделируется) и время непрерывны
А всё остальное вроде дискретно?
Но даже время в реальном объекте "отчасти дискретно", ибо есть периодичность в жизнедеятельности
ну что вы!
Почти все траектории непрервыны, то бишь движение плавно.
А вот если в модели будут мушки между струн летать, то задевание струн - это дискретные пространственные шаги, если у нас датчики будут только на струнах.
Наш же случай - это вычислять численность особей(дискретная величина) диф.урами - это переводить в непрерывные значения.
Это не так страшно, как может показаться.  ;)



Что касается программы И. Антонова, то пока самое там тёмное - нормировка выживаемости по поколению. Это в корне неверно.
Хотя, .... может я не внимательно смотрел. Посмотрим ещё.

Макроассемблер

Все хочется прочитать статью Холдейна, но, поскольку как обычно, статья в англовики намного полнее русскоязычной и не оставляет сомнения, что Холдейн ошибался, так что считаю это лишь упражнением...
Что не могли найти ошибку, так при взгляде со стороны -  скорее всего и не искали...

Alexy

Цитата: Vuto от апреля 05, 2011, 01:16:13Почти все траектории непрервыны, то бишь движение плавно.
А вот если в модели будут мушки между струн летать, то задевание струн - это дискретные пространственные шаги, если у нас датчики будут только на струнах
Так во многих случаях обходятся вообще без моделирования пространства
Цитата: Vuto от апреля 05, 2011, 01:16:13нормировка выживаемости по поколению. Это в корне неверно
Вы имеете в виду, что неверно то, что выживаемость каждой конкретной особи обратно-пропопорциональна среднего по ныне живущему поколению фитнеса?

Alexy

Макроассемблер, так Вы нашли ошибку Холдейна? Действительно ли это НЕучёт потери более, чем одной вредной мутации при смерти одной особи
(Из http://en.wikipedia.org/wiki/Haldane's_dilemma ошибка(и) Холдейна не очень понятны, но читал не очень внимательно. А pdf-ы обоих статей самого Холдейна в первом сообщ этой темы)

Макроассемблер

Мне вообще сам смысл термина "цена замещения" кажется неуместным... она подобна "упущенной экономической выгоде", т.е. виртуальная величина, и даже и не складывается-то.
помню писал генетический алгоритм для раскрытия решеток... вот таких
http://en.wikipedia.org/wiki/Grille_(cryptography)
там вот скорость решения с увеличением размера падала очень быстро... правда там по отдельным "признакам" зависимость была, но я уже расстроился ))

Макроассемблер

Цитата: Imperor от марта 29, 2011, 16:29:19
Имхо, компьютерные модели гораздо более простые. То, что в мат. моделировании нужно изображать четырехэтажными формулами (в которых легко запутаться), в компьютерном моделировании реализуется весьма легко. У меня лично к ним (компьютерным моделям) больше доверия.
а чего так у вас мнение поменялось на противоположное... это не подначка, просто интересно
http://www.paleo.ru/forum/index.php/topic,2350.msg52210.html#msg52210

Alexy


Vuto

Цитата: Alexy от апреля 05, 2011, 17:24:38Так во многих случаях обходятся вообще без моделирования пространства
Извините, если я не допонял ваш вопрос, я думал вы спрашиваете в общем.
Поэтому я привёл пример из биологии с подгонкой с дискретики под непрерывность.

Цитировать
Цитата: Vuto от апреля 05, 2011, 01:16:13нормировка выживаемости по поколению. Это в корне неверно
Вы имеете в виду, что неверно то, что выживаемость каждой конкретной особи обратно-пропопорциональна среднего по ныне живущему поколению фитнеса?
Я просмотрел код.
Там неверна модель  :( :'(
Дело в том, что к размножению в каждом поколении допущены лишь те, у кого выживаемость выше средней в этом поколении.
Это .... неверный подход в корне.
Вначале почему неверный.
Например, существует доминантный отрицательный аллель в -1%. Фактически это нейтральный аллель, он ни на что не должен влиять.
Тем не мене по модели уже за 500 поколений полностью популяция избавляется от аллеля.
Или другой пример. Существует доминантный положительный аллель +1%. Фактически нейтральный аллель, он ни на что не должен влиять.
Тем не менее, по модели обычным особям не дают размножаться и в конце концов рецессивный аллель уходит из популяции.

Как исправить ситуацию - необходимо фитнес превратить в ВЕРОЯТНОСТЬ допуска к размножению.
Тогда даже нормировка не мешает.
И тогда мы увидим сооооовершенно иные результаты!

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

Цитата: Vuto от апреля 05, 2011, 22:40:07Я просмотрел код.
Там неверна модель  :( :'(
Дело в том, что к размножению в каждом поколении допущены лишь те, у кого выживаемость выше средней в этом поколении.
Это .... неверный подход в корне...
Как исправить ситуацию - необходимо фитнес превратить в ВЕРОЯТНОСТЬ допуска к размножению.
Именно так в программе и сделано. Вот строка, допускающая к размножению:

if (Form1.ok(fitness * k))  _obj.Add(child); // Формируем список, допущенных до размножения

Здесь Form1.ok - метод, сообщающий, состоялось ли случайное событие с вероятностью  fitness, скорректированной на нормирующий коэффициент k:

public static bool ok(double level)  // Событие с вероятностью level произошло
{if(rnd1.NextDouble() < level)  return true;
  else return false;
}



Vuto

Цитата: Игорь Антонов от апреля 05, 2011, 23:41:28
Цитата: Vuto от апреля 05, 2011, 22:40:07Я просмотрел код.
Там неверна модель  :( :'(
Дело в том, что к размножению в каждом поколении допущены лишь те, у кого выживаемость выше средней в этом поколении.
Это .... неверный подход в корне...
Как исправить ситуацию - необходимо фитнес превратить в ВЕРОЯТНОСТЬ допуска к размножению.
Именно так в программе и сделано. Вот строка, допускающая к размножению:

if (Form1.ok(fitness * k))  _obj.Add(child); // Формируем список, допущенных до размножения

Здесь Form1.ok - метод, сообщающий, состоялось ли случайное событие с вероятностью  fitness, скорректированной на нормирующий коэффициент k:

public static bool ok(double level)  // Событие с вероятностью level произошло
{if(rnd1.NextDouble() < level)  return true;
  else return false;
}

Первое - спасибо вам, что приняли участие с дискуссии.
Второе, да, я был не прав, не удосужился посмотреть в файл Форм, действительно там вероятность.
Ну и в третьих, в главных, даже это не меняет ситуацию в целом.
Покажу это на цифрах:
1) Вначале будем считать, что количество детей - 2, это нормализует наш коэффициент
2) смотрим на вероятность стать родителем.
Пусть у нас популяция из 10000 особей
причём имеется доминантный ген с бонусом +10%

Вначале узнаем, какова вероятность стать родителем в популяции с одними обычными генами:
1е-4
А вероятность стать родителем в популяции с лишь доминантными генами:
1е-4!!!
Это первое, что должно нас насторожить: в чистых популяциях генный бонус не даёт преимуществ!!!

Идём дальше.
Пусть у нас популяция в 10000 особей, причём 10 из них обладают доминантным бонусом.
Тогда у обычных особей шанс стать родителем равен = 9,999е-5 или незаслуженно уменьшили шанс (при том, что они ничего не делали) на 0,01%
В то время, как для доминантым особям незаслуженно увеличили вероятность  до 1,09989е-4 или же на 9,989%

Идём ещё дальше.
Пусть у нас популяция в 10000 особей, причём 10 из них НЕ обладают доминантным бонусом.
Тогда у обычных особей шанс стать родителем равен = 9,091735е-5 или ЕЩЁ незаслуженно уменьшили шанс (при том, что они ничего не делали) до 9,0829%
В то время, как для доминантым особям снизили незаслуженно увеличенную вероятность  до 1,000090917е-4 или же до 0,0090917%

Всё тоже самое касается и отрицательного бонуса.
Обычным особям незаслуженно увеличивают вероятность стать родителем, а доминантным - незаслуженно уменьшают вероятность.

Поэтому нельзя для корректности нормировать в каждое поколение по разному.
Необходимо для всех поколений делать один коэффициент.
Вы можете изменить программу и проверить?

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

Vuto, нормирующий коэффициент выполняет в этой модели роль общей отрицательной обратной связи, стабилизирующей численность популяции. Его отменить несложно, но тогда отрицательные бонусы будут приводить к вымиранию, а положительные - к неограниченному росту.

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

Вот вариант программы с отключенной нормировкой по численности.

Макроассемблер

Цитата: Vuto от апреля 06, 2011, 10:07:48
Мне кажется Вы немного неправы, как мне кажется, в программе похоже в принципе не ставится целью моделирование расширения экологических ниш и взаимодействие с внешним миром, а лишь внутривидовая борьба.

Макроассемблер

Цитата: Игорь Антонов от апреля 05, 2011, 23:41:28
if (Form1.ok(fitness * k))  _obj.Add(child); // Формируем список, допущенных до размножения

public static bool ok(double level)  // Событие с вероятностью level произошло
{if(rnd1.NextDouble() < level)  return true;
  else return false;
}
То есть если попадается особь с достаточно высоким фитнесом, то она переходит к размножению независимо от того какое значение выбросит NextDouble(), в реальности же любое удачное сочетание генов может погибнуть - конечно, с разной вероятностью.

Немного замечаний по коду (непрограммисты могут пропустить) - там у Вас в основном соблюдается паттерн MVC, но сделаны глобальные переменные и циклические ссылки между Form1 и Population. Думаю лучше переместить rnd1 в Population, а если нужно использовать другой генератор - можно унаследовать от Random и засунуть его в Population из класса Form1.

Может быть это уже обсуждалось (не осилил я всю ветку), почему моделируется именно популяция из строго моногамных гермафродитов (это, кстати, приводит к существенному замедлению работы программы)?

Для нормализации популяции пришло в голову quick-and-dirty решение. Для каждой особи умножить фитнес на коэффициент невезения -- равномерно распределенное случайное число в интервале (0,1] -- отсортировать по этому произведению список особей, взять total_individuals верхних и перевести их в следующее поколение. Таким образом размер популяции остается неизменным, у особи всегда есть вероятность погибнуть и в любом районе фитнеса реализуется генетическое преимущество.