Трансформация популяции
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
Ну вот и началось
ОтветитьУдалить