⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selection.m

📁 matlab程序 遗传算法选择程序 敬请各位高手指教
💻 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 + -