while k minSYZ=min(SYZ); posSYZ=find(SYZ==minSYZ); POS=posSYZ(1); k=k+1;
farm{k}=NEWFARM{POS}; syz(k)=SYZ(POS); SYZ(POS)=inf; end
%记录和更新,更新最优个体,记录收敛曲线的数据 minsyz=min(syz); meansyz=mean(syz);
pos=find(syz==minsyz); LC3(counter+1)=meansyz;
if minsyz Best=minsyz; Xp=farm{pos(1)}; end
LC4(counter+1)=Best; ppp=(1-Xp)+(1-q).*Xp;
LC1(counter+1)=sum(w.*prod(ppp)); LC2(counter+1)=sum(sum(e.*Xp));
%% 第五步:变异 for i=1:N
if Pm>rand%是否变异由变异概率Pm控制 AA=farm{i};%取出一个个体
POS=unidrnd(50);%随机选择变异位 R=rand;
Col=zeros(4,1); if R<0.7
RP=randperm(4); Col(RP(1))=1; elseif R>0.9
RP=randperm(4); Col(RP(1:2))=1; else
RP=randperm(4); Col(RP(1:3))=1; end
%下面是判断变异产生的新个体是否满足约束,如果不满足,此
次变异无效
AA(:,POS)=Col; Temp1=sum(AA,2);
Temp2=find(Temp1>20); if length(Temp2)==0 farm{i}=AA; end end end
counter=counter+1 end
%第七步:绘收敛曲线图 figure(1); plot(LC1);
xlabel('迭代次数'); ylabel('子目标1的值'); title('子目标1的收敛曲线'); figure(2); plot(LC2);
xlabel('迭代次数'); ylabel('子目标2的值'); title('子目标2的收敛曲线'); figure(3); plot(LC3);
xlabel('迭代次数');
ylabel('适应度函数的平均值'); title('平均适应度函数的收敛曲线'); figure(4); plot(LC4);
xlabel('迭代次数');
ylabel('适应度函数的最优值'); title('最优适应度函数的收敛曲线'); 贴出一幅运行得到的收敛曲线