Настолько заинтересовался, что даже потратил два часа своего времени, написав простейшую программу для моделирования этого самого гандикапа. Какой-то положительный эффект есть, но очень небольшой, порядка 1%. На фазаний хвост непохоже. Хотя, возможно, я не все учел. Возможно, стоит ввести разные частоты мутаций для разных признаков... Всерьез заниматься некогда, но если кому интересно, и если знаете язык C - можете пользоваться: https://disk.yandex.ru/d/w7O0aas3ZBH9mQ
while true ; do ; ./a.out | tail -n 1 >> res2 ; done
И посмотрим среднюю избирательность к гандикапу
cat res2 | awk 'BEGIN {s=0;n=0;} {n=n+1;s=$3;} END {print(s/n);}'
-4.98539e-07
Т.е. средняя избирательность самки к гандикапу нулевая.
Но при этом даже если убрать мутации после определенного поколения то гандикап плохо отсеивается отбором - у функций нет нелинейностей которые будут наказывать за сильные выбросы.
Я удесятерил число поколений и установил гандикап в единицу - за 40 тысяч поколений он сполз только до одной десятой.
Ну и повторю - концепция гандикапа состоит даже не в том что это единственный сигнал.
А в том что вредный признак якобы имеет преимущество перед полезным в половом отборе за счет его "честности" - раз он вредный то единственный прок поддержания его уровня это сигнал самке.
Всерьез заниматься некогда, но если кому интересно, и если знаете язык C - можете пользоваться:
https://disk.yandex.ru/d/w7O0aas3ZBH9mQ
Reply
Одна модель стоит тысячи рассуждений. Во-первых там даже не процент, а тысячная - т.е. десятая процента. (0.674819 0.000966 -0.000173)
Добавим сид рандома
#include sys/time.h // угловые скобки не принимает форматирование коммента
...
struct timeval time;
gettimeofday(&time,NULL);
srand((time.tv_sec * 1000) + (time.tv_usec / 1000));
Накопим данные
gcc main.c
while true ; do ; ./a.out | tail -n 1 >> res2 ; done
И посмотрим среднюю избирательность к гандикапу
cat res2 | awk 'BEGIN {s=0;n=0;} {n=n+1;s=$3;} END {print(s/n);}'
-4.98539e-07
Т.е. средняя избирательность самки к гандикапу нулевая.
Но при этом даже если убрать мутации после определенного поколения то гандикап плохо отсеивается отбором - у функций нет нелинейностей которые будут наказывать за сильные выбросы.
Я удесятерил число поколений и установил гандикап в единицу - за 40 тысяч поколений он сполз только до одной десятой.
0.927902 1.222864 0.155002
0.932635 0.134074 -0.091744
При желании он легко разгоняется и в сотни.
Reply
if (is[i1]==-1) s1-=hc[i0];
Надо:
if (is[i1]==-1) s1-=hc[i1];
Reply
почему Вы не пишете
if (-1 == is[i1]) s1-=hc[i1];
?
ПС просто любопытно. я сам пишу оба варианта в разных случаях
Reply
Ну и повторю - концепция гандикапа состоит даже не в том что это единственный сигнал.
А в том что вредный признак якобы имеет преимущество перед полезным в половом отборе за счет его "честности" - раз он вредный то единственный прок поддержания его уровня это сигнал самке.
Reply
Leave a comment