遗传算法的选择算子(基于赌盘和基于排序的)
%%%%%%%%%%%%%%轮盘随机选择算子%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function newchrom=rselect(oldchrom,FieldD)
Ps=FieldD/sum(FieldD); %计算每个被选的概率
Pss=cumsum(Ps); %制作好轮盘
r=rand(length(FieldD),1); %预先产生赛制
for Time=1:1:length(FieldD) %选择个体数
number0(Time)=length(FieldD);
for n=1:1:length(FieldD)
if r(n)<=Pss(Time);
number0(Time)=n;
break
end
end
end
forTime=1:1:length(FieldD)
newchrom(Time)=oldchrom(number0(Time));
end
newchrom=newchrom.';
end
%%%%%%%%%%%%%%%%%%%%%基于排序 转盘式选算子%%%%%%%%%%%%%
functionnewchrom=sselect(chrom,FieldD,a)
% a 适应值排名后按线性概率给每个个体相应的概率,排名最高概率最大 通常取a=1.1
b=2*(a-1);
=sort(FieldD); %排序后和排序的讯号
=size(chrom);
for Time=1:1:mount %概率给定
Ps(Time)=(a-b*Time/(mount+1))/mount;
end
Pss=cumsum(Ps);Pss(mount)=1;
II=II.' ;
r=rand(mount,1); %预先产生赛制
for Time=1:1:mount %选择个体数
for n=2:1:mount
if r(Time)<=Pss(1); newchrom(Time)=chrom(II(1));break;end
if r(Time)<=Pss(n)&r(Time)>Pss(n-1)
newchrom(Time)=chrom(II(n));
break
end
end
end
newchrom=newchrom.';
end
本帖最后由 ChaChing 于 2011-10-23 16:26 编辑
回复 1 # 博大广阔 的帖子
原创 or 转贴 !? 个人专业有限, 看似像分享!? 是吗?
若是, 若能稍作简易说明下相关输入/输出/算法, 甚至举例, 或许更适合学习! 个人浅见 这是依据课本上的给的算法编出来的函数。我已多次运用,可证明程序是正确的。这个叫简单了解GA的人都看得懂,就省去例子之类了,,
页:
[1]