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

📄 fenelize.m

📁 基于灰色系统方法的离散多目标优化设计程序
💻 M
字号:
function fen=fenelize(x,gk,hk,tpop,tmax)
 % 对有约束问题采用精确不可微罚函数,动态惩罚因子,适应数学模型:
 %         min f(x)
 %    s.t. gi(x)>=0  (i=1,2,……,gk);
 %         hj(x)==0  (j=1,2,……,hk).
     %+++++++++++++++++++++++++++++++++++++
 y0=objfunction(x);
 res_gx=zeros(gk,1);
 res_hx=zeros(hk,1);
 [res_gx,res_hx]=restrain(x,gk,hk);
     if gk>0
        sumgk=0.0; 
        for i=1:gk
             if  imag(res_gx(i,1))~=0  %出现虚数现象
                 resf=10^8; %=inf时说明该染色体超过目标函数定义域 
             else
                     if res_gx(i,1)>0
                         resf=0;
                     else
                         resf=abs(res_gx(i,1));
                      end
              end
                    sumgk=sumgk+resf;
        end
    else
        sumgk=0.0;
    end
       %+++++++++++++++++++++++++++++++++++
    if hk>0
        sumhk=0.0;
        for i=1:hk
            if  imag(res_hx(i,1))==0
            sumhk=sumhk+abs(res_hx(i,1));
            else
            sumhk=inf;
            end
        end
    else
        sumhk=0.0;
    end
        %+++++++++++++++++++++++++++++++++++
 if   hk==0
     factor1=floor(tpop/100);
     factor2=10^factor1;
     factor=min(factor2,1e+6); %阶跃式动态惩罚因子
     %if  tpop>=350
     % factor=max(factor2,1e+6);  
     % end
 else    
        if  tpop<=floor(0.5*tmax)
            factor1=floor(tpop/100);
            factor=10^factor1; %阶跃式动态惩罚因子
        else
            factor1=floor(0.5*tmax/100);
            factor2=10^factor1;
            factor=factor2+4e+6*((tpop-(0.5*tmax))/tmax)^2; %动态惩罚因子
        end
 end
 %factor=10;  %用于程序调试
 if  imag(y0)==0
     fen=y0+factor*(sumgk+sumhk); %惩罚函数值。
 else
     fen=inf;
 end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
        
        
        
        
        

⌨️ 快捷键说明

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