selection.m

来自「matlab程序 遗传算法选择程序 敬请各位高手指教」· M 代码 · 共 41 行

M
41
字号
% 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 + =
减小字号Ctrl + -
显示快捷键?