📄 selection.m
字号:
% n代表Fsize
function Spop=selection(Fsize,pop,nxs,u,pass,obj)
mouts=zeros(Fsize,pass(4));
for r=1:Fsize
mouts(r,:)=simu(nxs,pop(r,1),pop(r,2),u,pass(2),pass(3));
q(r,:)=(mouts(r,:)-obj).^2;
Q(r)=sum(abs(q(r,:)))*100;
end
[nq,num]=sort(Q); % 按照从小到大排序
for i=1:Fsize % 重新排列种群
pop(i,:)=pop(num(i),:);
end
for k1=0:(Fsize-1) % 分配概率密度
if k1<=(Fsize/2-1)
ps(k1+1)=1-1/(Fsize-1)*k1;
else
ps(k1+1)=1/(Fsize-1)*(k1-Fsize);
end
end
sumQ=sum(ps);
for k1=1:Fsize
cfitness(k1)=ps(k1)/sumQ;
end
for k1=2:Fsize
cfitness(k1)=cfitness(k1-1)+cfitness(k1);
end
for k1=1:pass(1)
p=rand(1);
index=1;
while(p>cfitness(index))
index=index+1;
end
Spop1(k1,:)=pop(index,:); % 新的种群
SQ(k1)=Q(index);
end
[sq,num1]=sort(SQ);
for i=1:pass(1) % 重新排列种群附加误差
currentp(i,:)=Spop1(num1(i),:);
currentQ(i)=SQ(num1(i));
end
Spop=[currentp,currentQ];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -