📄 mutation.m
字号:
function Ret=Mutation(PMutation,LenChrom,Individuals,SizePop,Opts,Bound,Pop)
% In this function,it fulfils a mutation among chromosomes
% PMutation input : probability of mutation
% LenChrom input : length of a chromosome
% Individuals.Chrom input : set of all chromosomes
% SizePop input : size of population
% Opts input : tag for choosing method of crossover
% Pop input : current serial number of generation and maximum gemeration
% Ret output : new set of chromosome
switch Opts
case 'simple' % mutation at single position
for i=1:SizePop
% select child at random
Pick=rand;
while Pick==0
Pick=rand;
end
Index=ceil(Pick*SizePop);
Pick=rand;
if Pick>PMutation
continue;
end
% mutation position
Pick=rand;
while Pick==0
Pick=rand;
end
Pos=ceil(Pick*sum(LenChrom));
v=bitget(Individuals.Chrom(Index),Pos);
v=~v;
Chrom1=bitset(Individuals.Chrom(Index),Pos,v);
end
Ret=Individuals.Chrom;
case 'float' % multiple position mutation
for i=1:SizePop
% select child at random
Pick=rand;
while Pick==0
Pick=rand;
end
Index=ceil(Pick*SizePop);
Pick=rand;
if Pick>PMutation
continue;
end
% mutation position
Pick=rand;
while Pick==0
Pick=rand;
end
Pos=ceil(Pick*sum(LenChrom));
v=Individuals.Chrom(i,Pos);
v1=v-Bound(Pos,1);
v2=Bound(Pos,2)-v;
Pick=rand;
if Pick>0.5
Delta=v2*(1-Pick^((1-Pop(1)/Pop(2))^2));
Individuals.Chrom(i,Pos)=v+Delta;
else
Delta=v1*(1-Pick^((1-Pop(1)/Pop(2))^2));
Individuals.Chrom(i,Pos)=v-Delta;
end
end
Ret=Individuals.Chrom;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -