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

📄 selection.m

📁 基于灰色系统方法的离散多目标优化设计程序
💻 M
字号:
function selecx=selection(xpop,pop,res_flg,gk,hk,n,cmax,tpop,tmax)
%  本程序为选择算子,从xpop(pop,n)中选择pop个染色体,xpop(pop,n)为父代,
%  该函数输出染色体矩阵为selecx(pop,n)将参与以后的交叉和变异,pop为群体
%  规模,n为设计变量维数。
          %+++++++++++++++++++++++++++++++++
 fitFx=zeros(1,pop);
for  j=1:pop
   fitFx(1,j)=fitfunction(xpop(j,:),res_flg,gk,hk,cmax,tpop,tmax);
   % 计算父代的适应值,fitfunction为求染色体适应值的m函数。
end
         %+++++++++++++++++++++++++++++++++++
 %以下程序求适应值总和sumfit.
sumfit=0.0;
  for i=1:pop            
      sumfit=fitFx(1,i)+sumfit;
  end
                  if sumfit==0
                    fprintf('\t\t算法非正常早熟,按任意键查看目前群体xpop\n') 
                    pause
                    xpop
                    fprintf('\t\t用"Ctrl+C"组合键中止程序,建议增加群体规模pop,重新运行\n\n')
                    pause
                   end
             %+++++++++++++++++++++++++++++++++++
 %以下程序计算各染色体的选择概率。 
  p=zeros(1,pop);
  for k=1:pop
      p(1,k)=fitFx(1,k)/sumfit;
  end
 %以下程序计算各染色体的累计选择概率q(k).
  q=zeros(1,pop);
  q(1,1)=p(1,1);
  for k=2:pop
      q(1,k)=p(1,k)+q(1,k-1);
  end
           %++++++++++++++++++++++++++++++++++
  %产生pop个[0,1]间服从均匀分布的伪随机数。
   ru=unifrnd(0,1,1,pop);
  %然后用轮睹法选择pop个染色体。
  for i=1:pop
         if  ru(1,i)<=q(1,1)
             selecx(i,:)=xpop(1,:);
         else
                for k=pop:-1:2
                      if ru(1,i)<=q(1,k)&ru(1,i)>q(1,k-1)
                           selecx(i,:)=xpop(k,:);
                      end
                end
          end
  end
  %selecx
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -