📄 main2.m
字号:
n_xn2_0=size(chrom,1);
number_01=1;
chrom_slip1=[];chrom_slip2=[];chrom_slip3=[];chrom_slip4=[];
chrom_objv1=[];chrom_objv2=[];chrom_objv3=[];chrom_objv4=[];
selch1_thl1=[];selch1_thl2=[];selch1_thl3=[];selch1_thl4=[];
best1=[];best2=[];best3=[];best4=[];
while number_01<=n_xn2_0,
if (chrom_space1(number_01)>5)|(chrom_space2(number_01)>5),
chrom_slip1=[ chrom_slip1;chrom(number_01,:)];
chrom_objv1=[chrom_objv1;objv_or_fitnv(number_01)];
else
if (chrom_space1(number_01)>=3)|(chrom_space2(number_01)>=3)&(chrom_space1(number_01)~=chrom_space2(number_01)),
chrom_slip1=[ chrom_slip1;chrom(number_01,:)];
chrom_objv1=[chrom_objv1;objv_or_fitnv(number_01)];
else
if (chrom_space1(number_01)>=3)|(chrom_space2(number_01)>=3)&(chrom_space1(number_01)==chrom_space2(number_01)),
chrom_slip2=[chrom_slip2;chrom(number_01,:)];
chrom_objv2=[chrom_objv2;objv_or_fitnv(number_01)];
else
if (chrom_space1(number_01)>=1)|(chrom_space2(number_01)>=1)&(chrom_space1(number_01)~=chrom_space2(number_01)),
chrom_slip2=[chrom_slip2;chrom(number_01,:)];
chrom_objv2=[chrom_objv2;objv_or_fitnv(number_01)];
else
if (chrom_space1(number_01)>=1)|(chrom_space2(number_01)>=1)&(chrom_space1(number_01)==chrom_space2(number_01))
chrom_slip3=[chrom_slip3;chrom(number_01,:)];
chrom_objv3=[chrom_objv3;objv_or_fitnv(number_01)];
else
if (chrom_space1(number_01)<=0)&(chrom_space2(number_01)<=0),
chrom_slip4=[chrom_slip4;chrom(number_01,:)];
chrom_objv4=[chrom_objv4;objv_or_fitnv(number_01)];
end
end
end
end
end
end
number_01=number_01+1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
chrom_slip_number=1;
while chrom_slip_number<=4,
if chrom_slip_number==1,
chrom=chrom_slip1;
chrom_objv=chrom_objv1;
n_xn1=size(chrom,1);
m2=fix(n_xn1*ftaotailv1);
if m2<n_xn1,
chrom(m2+1:n_xn1,:)=[];
end
selch1_thl1=chrom;
end
if chrom_slip_number==2,
chrom=chrom_slip2;
chrom_objv=chrom_objv2;
n_xn1=size(chrom,1);
m2=fix(n_xn1*ftaotailv2);
if m2<n_xn1,
chrom(m2+1:n_xn1,:)=[];
end
selch1_thl2=chrom;
end
if chrom_slip_number==3,
chrom=chrom_slip3;
chrom_objv=chrom_objv3;
n_xn1=size(chrom,1);
m2=fix(n_xn1*ftaotailv3);
if m2<n_xn1,
chrom(m2+1:n_xn1,:)=[];
end
selch1_thl3=chrom;
end
if chrom_slip_number==4,
chrom=chrom_slip4;
chrom_objv=chrom_objv4;
n_xn1=size(chrom,1);
m2=fix(n_xn1*ftaotailv4);
if m2<n_xn1,
chrom(m2+1:n_xn1,:)=[];
end
selch1_thl4=chrom;
end
if size(selch1_thl1)>=best_num,
best1=selch1_thl1(1:best_num,:);
else
best1=[];
end
if size(selch1_thl2)>=best_num,
best2=selch1_thl2(1:best_num,:);
else
best2=[];
end
if size(selch1_thl3)>=best_num,
best3=selch1_thl3(1:best_num,:);
else
best3=[];
end
if size(selch1_thl4)>=best_num,
best4=selch1_thl4(1:best_num,:);
else
best4=[];
end
%%%%%%%%%%%%%%%%%%%%%%%%%
chrom_slip_number= chrom_slip_number+1;
end
%%%%%%%%%%%%%%%%%%%%%%%%
best=[best1;best2;best3;best4];
chrom=[selch1_thl1;selch1_thl2;selch1_thl3;selch1_thl4];
%%%%%%%%%%%%%%%%%%%%%%%%
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 第二步寻找PARETO全部解中使用结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if space~=0,
%%%%%%%%%%%%%%%%%%%%%%%% 第一步寻找PARETO部分解中使用
objv1=f1333(chrom(:,:));
objv2=f2333(chrom(:,:));
objv01=[objv1';objv2'];
if probability<0.05,
probability1=0.1;
else
probability1=probability;
end
number=fix(1/probability1)+1;
number_1=1;
objv02_14=[];
while number_1<=number,
suiji_4=suiji_4+probability;
if suiji_4>probability_sup,
probability_below1=fix(suiji_4/probability_sup);
probability_below2=suiji_4-probability_below1*probability_sup;
if probability_below2<(probability_below/5),
suiji_4= probability_below;
else
suiji_4= probability_below2;
end
end
suiji= suiji_4;
%suiji_1=rand;
%suiji=probability+ suiji_1*(1-2*probability);
objv02_14(number_1,:)=suiji.*objv01(1,:)+(1-suiji).*objv01(2,:);
number_1=number_1+1;
end
objv02_14_1=sort(objv02_14,1);
objv0=(objv02_14_1(1,:)+objv02_14_1(number,:))./2;
%%%%%%%%%%%%%%%%%%%%%%%%
[objv0_1,oid_0]=sort(objv0);
oid_01=oid_0';
objv_or_fitnv=objv0_1;
selch1_thl=chrom(oid_01,:);
n_xn_warm=size(selch1_thl,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%调整最优个体库
stock_nub=fix(nind*stockbi);
best=selch1_thl(1:best_num,:);
chrom=selch1_thl(1:stock_nub,:);
objv1=f1333(chrom(:,:));
objv2=f2333(chrom(:,:));
distancea1=sqrt((objv1(2:stock_nub)-objv1(1:(stock_nub-1))).^2+(objv2(2:stock_nub)-objv2(1:(stock_nub-1))).^2);
distanceb1=sqrt((objv1(stock_nub)-objv1(1)).^2+(objv2(stock_nub)-objv2(1)).^2);
distance01=[distanceb1;distancea1];
[distance0_01,distance0_id11]=sort(distance01);
selch1_0thl=chrom(distance0_id11,:);
selch1_0thlnhy=selch1_0thl;
selch1_0thlnhy(1:(stock_nub-nind),:)=[];
stock_001=selch1_0thlnhy;
chrom=selch1_thl;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%调整最优个体库结束
%%复杂排序结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%淘汰
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n_xn1=size(objv_or_fitnv,2);
m2=fix(n_xn1*ftaotailv);
objv_or_fitnvfd=find(objv_or_fitnv>(ftaotaibili*(sum(objv_or_fitnv))/n_xn1));
selch100=chrom;
chrom(objv_or_fitnvfd',:)=[];
n_xn12=size(chrom,1);
if n_xn12<(nind*youqunbi),
selch100((m2+1):n_xn1,:)=[];
chrom=selch100;
else
n_xn2=size(chrom,1);
number_1=fix(m2/n_xn2);
selch1=chrom;
if number_1>=1,
number_0=1;
while number_0<number_1,
number_0=number_0+1;
chrom=[chrom;selch1];
end
chrom=[chrom;selch1(1:(m2-n_xn2*number_1+1),:)];
else
chrom((m2+1):n_xn2,:)=[];
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%淘汰结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%选择最优解式扩张种群,第一步寻找PARETO部分解中使用
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
objv1=f1333(chrom(:,:));
objv2=f2333(chrom(:,:));
objv01=[objv1';objv2'];
%%%%%%%%%%%%%%%%%%%%%%%%%%
if probability<0.05,
probability1=0.1;
else
probability1=probability;
end
number=fix(1/probability1)+1;
number_1=1;
objv02_15=[];
while number_1<=number,
suiji_5=suiji_5+probability;
if suiji_5>probability_sup,
probability_below1=fix(suiji_5/probability_sup);
probability_below2=suiji_5-probability_below1*probability_sup;
if probability_below2<(probability_below/5),
suiji_5= probability_below;
else
suiji_5= probability_below2;
end
end
suiji= suiji_5;
%suiji_1=rand;
%suiji=probability+ suiji_1*(1-2*probability);
objv02_15(number_1,:)=suiji.*objv01(1,:)+(1-suiji).*objv01(2,:);
number_1=number_1+1;
end
objv02_15_1=sort(objv02_15,1);
objv0=(objv02_15_1(1,:)+objv02_15_1(number,:))./2;
%%%%%%%%%%%%%%%%%%%%%%%%
fitnv0=ranking(objv0');
m3=size(chrom,1);
q=fix(ggap* m3);
selch=sus(fitnv0,q);
selch1=chrom(selch,:);
chrom=selch1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%以下为排序
suiji_6=suiji_6+probability;
if suiji_6>probability_sup,
probability_below1=fix(suiji_6/probability_sup);
probability_below2=suiji_6-probability_below1*probability_sup;
if probability_below2<(probability_below/5),
suiji_6= probability_below;
else
suiji_6= probability_below2;
end
end
suiji= suiji_6;
%suiji_1=rand;
%suiji=probability+ suiji_1*(1-2*probability);
objv1=f1333(chrom(:,:));
objv2=f2333(chrom(:,:));
objv01=[objv1';objv2'];
objv0=suiji.*objv01(1,:)+(1-suiji).*objv01(2,:);
[objv0_11,oid_0]=sort(objv0);
oid_1=oid_0';
selch1=chrom(oid_1,:);
chrom=selch1;
%%%%%%%%%%%%%%%%%%%%%%%%%%排序结束
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%选择最优解式扩张种群,第一步寻找PARETO部分解中使用结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
trace1(gen,1)=min(f1333(v_end));
trace1(gen,2)=sum(f1333(v_end))/length(f1333(v_end));
trace2(gen,1)=min(f2333(v_end));
trace2(gen,2)=sum(f2333(v_end))/length(f2333(v_end));
trace3(gen,1)=min(f1333(v_end)+f2333(v_end));
trace3(gen,2)=sum(f1333(v_end))/length(f1333(v_end)+f2333(v_end))/length(f2333(v_end));
gen=gen+1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%主循环体结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pause(1);%显示>0.1秒
[dst,GD,Ds]=GD_Ds(objv_end,P1,P2);%调用函数GD_Ds%种群与P1;P2的最短平均距离;;绝对误差;;和;;目标函数的相对波动情况
figure(2);clf;
plot(trace1(:,1));hold on;plot(trace1(:,2),'-.');
plot(trace1(:,1),'.');plot(trace1(:,2),'.');grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('目标函数值');
figure(3);clf;
plot(trace2(:,1));hold on;plot(trace2(:,2),'-.');
plot(trace2(:,1),'.');plot(trace2(:,2),'.');grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('目标函数值');
figure(4);clf;
plot(trace3(:,1));hold on;plot(trace3(:,2),'-.');
plot(trace3(:,1),'.');plot(trace3(:,2),'.');grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('目标函数值');
figure(5);clf;
plot(f1333(v_end));hold on;plot(f2333(v_end),'r-.');
grid;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -