Кошмар Дженкинса

Apr 01, 2020 15:06

Я тут решил промоделировать ситуацию Дженкина (https://ru.wikipedia.org/wiki/Кошмар_Дженкина), причём в самом первоначальном варианте.
Прошу прощения за негров, это Дженкин виноват. Можете считать, что это улитки.

Итак, в поселении негров появился белый турист. Что произойдёт через несколько поколений, если белый имеет какое-то "хорошее" качество и гены непрерывны (то есть, оно может меняться от 0 до 1)?

Будем считать, что это хорошее качество - устойчивость к негритянской чуме, раз в поколение поражающей всех жителей. Устойчивость не абсолютная (иначе результат будет очевиден), но предположим 75%. После чумы население начинает размножаться до первоначальной численности.

Как передаются гены? Два случайных родителя (не будем усложнять и посчитаем что любая пара, так что это всё же улитки) берут по случайной половинке от своего гена чумоустойчивости и передают его потомку. Это значит, что если у предка было 1, то у потомка - всегда 1/2, если 0 - строго 0, а если 1/2 - случайное от 0 до 1/2.

Теперь программа:

#!/bin/perl
# jenkin nighmare model
# basic constants
$MAX=100;
$SURVIVAL=1/0.75; # How big a chance % to survive for a "GOOD" gene (0% for bad)
$PLAGUE=0.50; # how many percents are infected during plague
#----------------------------------------------- INIT
for ($0..$MAX-1) {$A[$_]=0.0};
sub randindex(){int(rand(scalar @A))};
$A[0]=1.0; # tourist
do {
#------------------------------------------------ PLAGUE
$KILL=int($MAX*$PLAGUE); # half of population
for (1..$KILL) {
$I=randindex;
if ($A[$I]>$Y ? $X-$Y : 0) : ($X1>$Y ? 1/2 : $X-$Y)
};

@B=();
while (scalar @A+scalar @B<$MAX){ # restore population
$I=randindex();$J=randindex(); # total promisciouicy
push @B,B($A[$I])+B($A[$J]);
};
push @A,@B; # add kids to pool
#----------------------------------------------- SHOW
$S=0;for (@A) {printf "%.1f ",$_;$S+=$_}; $S=$S/$MAX;
$N++;
print "\n\nStep $N\t $COLOR=$S\n"
} until (($S==0) || ($S==1)) # win or lose?

Что видно после нескольких запусков - эволюция работает даже в этом случае. Сначала признак действительно "размывается", но если рандом не отсеял его за первые несколько итераций, начинают появляться всё более и более адаптированные потомки до 1 в конце.

эволюция

Previous post Next post
Up