马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
%%%%%%%%%%%%%%轮盘随机选择算子%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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
for Time=1:1:length(FieldD)
newchrom(Time)=oldchrom(number0(Time));
end
newchrom=newchrom.';
end
%%%%%%%%%%%%%%%%%%%%%基于排序 转盘式选算子%%%%%%%%%%%%%
function newchrom=sselect(chrom,FieldD,a)
% a 适应值排名后按线性概率给每个个体相应的概率,排名最高概率最大 通常取a=1.1
b=2*(a-1);
[sfit,II]=sort(FieldD); %排序后和排序的讯号
[mount,var]=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
|