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

📄 mutation.m

📁 基于灰色系统方法的离散多目标优化设计程序
💻 M
字号:
function mutax=mutation(crosx,muta_ratio,tpop,n,pop,us,ux,tmax,res_flg,gk,hk,cmax,emigrant_or_not,flag_x,dis_date,float_date)
% 变异算子,对交叉交配池中的染色体群crosx(pop,n)采用动态变异
% muta_ratio为变异概率。
          %++++++++++++++++++++++++++++++++++++++++++
   r=unifrnd(0,1,pop,n);
   yy=r<=muta_ratio;
  %确定参与变异的基因号,标记为yy(i,k)=1。
          %+++++++++++++++++++++++++++++++++++++++
for  i=1:pop
    %该循环为变异操作,us(k),ux(k)分别为设计变量x(k)的上限和下限。
    %tpop为当前的遗传代数。tmax为最大遗传代数是全局变量。
    muta_flag=0;
    for k=1:n
        if  yy(i,k)>0
            muta_flag=1;
             while 1
             mutax(i,k)=crosx(i,k)+(us(k)-ux(k))*unifrnd(-1,1)*(1-tpop/tmax)^2;  
                 if  mutax(i,k)>=ux(k)&mutax(i,k)<=us(k);
                 break
                 end
             end
        else
            
            mutax(i,k)=crosx(i,k);
        end
    end
        if muta_flag==1&emigrant_or_not==1
        fit_muta=fitfunction(mutax(i,:),res_flg,gk,hk,cmax,tpop,tmax);
        fit_cros=fitfunction(crosx(i,:),res_flg,gk,hk,cmax,tpop,tmax);
             if  fit_muta<fit_cros
           mutax(i,:)=crosx(i,:);  %  若变异后得到的染色体较交叉前差,则保留原染色体
             end
        end 
       mutax(i,:)=discrete(mutax(i,:),n,flag_x,dis_date,float_date); %离散化处理
end
        %++++++++++++++++++++++++++++++++++++++++
  %以上程序得到变异后的染色体群体为mutax(pop,n)。
 
 
    
    

⌨️ 快捷键说明

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