当 x1+x2>=Max 时 对适应度值进行惩罚
代码:
for s=1:1:M
N=G(s,:);
y1=0;y2=0;
N1=N(1:1:CL); %对x1进行解码,
for i=1:1:CL
y1=y1+N1(i)*2^(i-1);
end
x1=(Max-Min)*y1/(2^CL-1)+Min;
x1_G(k)=x1; %为了便于最后图形输出,而引进的类似指针型变量
N2=N(CL+1:1:2*CL); %对x2进行解码
for i=1:1:CL
y2=y2+N2(i)*2^(i-1);
end
x2=(Max-Min)*y2/(2^CL-1)+Min;
x2_G(k)=x2; %为了便于最后图形输出,而引进的类似指针型变量
F(s)=814.1*(x2+10)^2/(x1+x2+10)+1456.38*(x2+10)/(x1+x2+10)-19173154*x1/(x1+x2+10)^2+531.675*(x1+10)^2/(x1+x2+10)+956.25*(x1+10)/(x1+x2+10)- 12831767*x2/(x1+x2+10)^2; %目标函数表达式
%%%%%%%%%%%%%%
if(x1+x2>=Max)
F(s)=F(s)-99999;
end
%F(s)=x1.^2+x2.^2;
end
在目标函数表达式后加入
代码:
if(x1+x2>=Max)
F(s)=F(s)-99999;
end
即可