📄 pso_opt_fun_2.m
字号:
function y=Pso_Opt_fun_2(x,tpop,tmax)
% 2007.08.25罗佑新开发,引用郭惠昕开发的相应程序修改成gi(x)<=0 。
% 对有约束问题采用精确不可微罚函数,动态惩罚因子,适应数学模型:
% min f(x)
% s.t. gi(x)<=0 (i=1,2,……,gk);
% hj(x)==0 (j=1,2,……,hk).
%+++++++++++++++++++++++++++++++++++++
y0=Pso_Object(x);
[res_gx,res_hx]=Pso_restrain(x);
[gk,gk1]=size(res_gx);
[hk,hk1]=size(res_hx);
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))^2;
end
sumgk=sumgk+resf;
end
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))^2;
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); %阶跃式动态惩罚因子
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
if imag(y0)==0
fen=y0+factor*(sumgk+sumhk); %惩罚函数值。
else
fen=inf;
end
y=fen;
%%%%%%%%%%%%%%2007.8.20%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -