четверг, 6 ноября 2008 г.

Методы для генетики

После расчёта качества на популяции производим её трансформацию. Здесь в матрице популяции (pop) отдельные геномы - это строки. Отдельные гены - это числа в диапазоне от 0 до 1. Для трансформации популяции даем качество для каждого генома, коэффициент мутации (mu) и частоту шока (flash).

Трансформация популяции

function [pop,bi] = trans_pop(pop,kach,mu,flash)
[s,idx] = sort(kach) ;

gi = idx(1:($/2)) ;
bi = idx(($/2+1):$) ;

gi = gi(randperm(length(gi))) ;
bi = bi(randperm(length(bi))) ;

for i = 1:2:length(gi)
[pop(bi(i),:),pop(bi(i+1),:)] = xver(pop(gi(i),:),pop(gi(i+1),:),mu,flash) ;
end
endfunction


Скрещивание

function [gb1,gb2] = xver(gg1,gg2,mu,flash)
gb1 = gg2 ;
gb2 = gg1 ;

for k = 1:length(gg1)
if rand(1,1,"normal") > 0
gb1(k) = gg1(k) ;
gb2(k) = gg2(k) ;
end
end
gb1 = mutate(gb1,mu,flash) ;
gb2 = mutate(gb2,mu,flash) ;
endfunction


Мутация генома

function genom = mutate(genom,mu,flash)
for k = 1:length(genom)
my_mu = mu ;
if rand(1,1,"uniform") < flash
my_mu = my_mu * 10 ;
end
genom(k) = genom(k) + (rand(1,1,"uniform")*2-1)*my_mu ;
if genom(k) > 1
genom(k) = 1 ;
end
if genom(k) < 0
genom(k) = 0 ;
end
end

endfunction

1 комментарий: