📄 main2.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求各个体的距离和结束
n_xn2_0=size(chrom,1);
chrom_space1=[];
chrom_space2=[];
chrom_space_end=[];
distance000=zeros(n_xn2_0,n_xn2_0);
happy=1;
while happy<=2,
if happy==1,
objv1_objv2_max_min_end=objv1_objv2_max_min_end1;
distance000=distance0001;
else
objv1_objv2_max_min_end=objv1_objv2_max_min_end2;
distance000=distance0002;
end
number_01=1;
chrom_space1_lv_dis1=(objv1_objv2_max_min_end./nind);
while number_01<=n_xn2_0,
number_02=1;
temp=0;
while number_02<=n_xn2_0,
if distance000(number_01,number_02)<chrom_space1_lv_dis1,
temp=temp+1;
end
number_02=number_02+1;
end
if happy==1,
chrom_space1(number_01)=temp-1;
else
chrom_space2(number_01)=temp-1;
end
number_01=number_01+1;
end
happy= happy+1;
end
chrom_space_end=chrom_space1+chrom_space2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求各个体的距离数字化结束
%%排序并选择nind个个体
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求共享函数数字化
n_xn2_0=size(chrom,1);
number_01=1;
v_end1_1=[];objv02=[];
v_end1_2=[];
v_end1_3=[];
v_end1=[];
while number_01<=n_xn2_0,
if (chrom_space1(number_01)>5)|(chrom_space2(number_01)>5),
objv02(number_01)=objv02_thlhappy_1(number_01).*chrom_space1_dwon;
else
if chrom_space1(number_01)>=chrom_space2(number_01),
chrom_space_end(number_01)=chrom_space1(number_01)*2;
else
chrom_space_end(number_01)=chrom_space2(number_01)*2;
end
objv02(number_01)= objv02_thlhappy_1(number_01);
end
if ((chrom_space1(number_01)<=2)&(chrom_space2(number_01)<=2))&((chrom_space1(number_01)>0)|(chrom_space2(number_01)>0)),
if chrom_space1(number_01)==chrom_space2(number_01),
v_end1_2=[v_end1_2;chrom(number_01,:)];
else
v_end1_3=[v_end1_3;chrom(number_01,:)];
end
end
if (chrom_space1(number_01)<=0)&(chrom_space2(number_01)<=0),
v_end1_1=[v_end1_1;chrom(number_01,:)];
end
number_01=number_01+1;
end
v_end1=[ v_end1;v_end1_1];
chiqun=size(v_end1,1)
if chiqun<nind,
v_end1=[ v_end1;v_end1_2];
end
chiqun=size(v_end1,1)
if chiqun<nind,
v_end1=[ v_end1;v_end1_3];
end
chiqun=size(v_end1,1)
if chiqun>nind,
v_end1((nind+1):chiqun,:)=[];
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%求共享函数数字化结束
objv0_system=objv02+chrom_space_end.*objv1_objv2_max_min_end.*baoduolv_dis;%+(1-distance000_1./distance000_2).*objv1_objv2_max_min_end.*baoduolv_dis1;
objv0=objv0_system';
[objv0_11,oid_0]=sort(objv0);
oid_1=oid_0';
selch1=chrom(oid_1,:);
chrom=selch1(1:nind,:);
%%%%%%%%%%%%%%%%%%%%%%%%%
v_end=chrom;
objv1=f1333(chrom(:,:));
objv2=f2333(chrom(:,:));
objv0=[objv1';objv2'];
objv_end=objv0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%距离加权定标结束
%%排序并选择nind个个体结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%% %第二步寻找PARETO整个边界,共享函数法结束
if (happy_kaiguan==1)|(happy_kaiguan==2),
if happy_kaiguan==1,
objv_end1_happy1=sum(objv1)./nind;
objv_end1_happy2=sum(objv2)./nind;
else
objv_end2_happy1=sum(objv1)./nind;
objv_end2_happy2=sum(objv2)./nind;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%区间界定结束
%%保持种群的多样性结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%本循环每运行10次,显示一次结果
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if rem(gen,interval_2)==0,
figure(1);
plot(P1,P2,'r-.');
hold on;
plot(objv0(1,:),objv0(2,:),'.b');
title(['Gen= ' num2str(gen)]);
hold off;
pause(.1);%显示>0.1秒
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%显示一次结果结束 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%交叉、变异,产生nind_amp*nind新个体
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
amp_n=1;
selch0=[];
while amp_n<=nind_amp,
amp_n=amp_n+1;
selch1=recombin('recdis',chrom,pcross);
selch0=[selch0;selch1];
end
chrom=selch0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%变异区间调整
% if space~=0,
%%%%%%%%%%%%%%%%%%%%%
if rem(gen, interval_3_pmutation)==0,
n_xn2_1=size(chrom,1);
n_xn2_2=size(chrom,2);
number=1;
while number<=n_xn2_2,
[tempt,oid_0]=sort(chrom(:,number));
fieldr1_1(1,number)=tempt(1);
fieldr1_1(2,number)=tempt(n_xn2_1);
number=number+1;
end
fieldr1(1,:)=fieldr1_1(1,:)-(fieldr(2,:)-fieldr(1,:))./pmutation_zone;
fieldr1(2,:)=fieldr1_1(2,:)+(fieldr(2,:)-fieldr(1,:))./pmutation_zone;
number=1;
while number<=n_xn2_2,
if fieldr1(1,number)<fieldr(1,number),
fieldr1(1,number)=fieldr(1,number);
end
if fieldr1(2,number)>fieldr(2,number),
fieldr1(2,number)=fieldr(2,number);
end
number=number+1;
end
%%%%
else
%%%%
fieldr1=fieldr;
end
%%%%%%%%%%%%%%%%%%%%%%%
%else
%%%%%%%%%%%%%%%%%%%%%%%
% fieldr1=fieldr;
% end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%变异区间调整结束
chrom=mutbga(chrom,fieldr1,[pmutation,little_pmutation]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%交叉、变异,产生nind_amp*nind新个体结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%复杂排序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if space~=0,
chrom=[stock_001;best;chrom];
else
chrom=[best;v_end1;chrom];
end
%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%第二步寻找PARETO全部解中使用
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if space==0,
%%%%%%%%%%%%%%%%%%%%%%%%%%%求各个体的距离和
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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=[];objv0=[];
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_xn1=size(objv_or_fitnv,2);
m2=fix(nind.*ftaotailv0);
chrom((m2+nind+1):n_xn1,:)=[];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n_xn2_0=size(chrom,1);
distance0001=zeros(n_xn2_0,n_xn2_0);
distance0002=zeros(n_xn2_0,n_xn2_0);
distance000_1=[];
happy=1;
while happy<=2,
number_01=1;
while number_01<=n_xn2_0,
number_02=1;
vbiaozhun1=chrom(number_01,:);
objvbiaozhun11=f1333(vbiaozhun1(:,:));
objvbiaozhun12=f2333(vbiaozhun1(:,:));
while number_02<=n_xn2_0,
vbiaozhun2=chrom(number_02,:);
objvbiaozhun21=f1333(vbiaozhun2(:,:));
objvbiaozhun22=f2333(vbiaozhun2(:,:));
%%%%%%%%%%%%%%%%%%%%%%%%%%%
if happy==1,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
distance0001(number_01,number_02)=abs(objvbiaozhun11-objvbiaozhun21);
else
distance0002(number_01,number_02)=abs(objvbiaozhun12-objvbiaozhun22);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
number_02=number_02+1;
end
number_01=number_01+1;
end
happy=happy+1;
end
%distance000_1(number_01)=sum(distance000(number_01,:));
%distance000_2=max(distance000_1);
%[distance000_3,distance000_iod]=sort(distance000_1);
%selch1=chrom(distance000_iod,:);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求各个体的距离和结束
n_xn2_0=size(chrom,1);
chrom_space1=[];
chrom_space2=[];
distance000=zeros(n_xn2_0,n_xn2_0);
happy=1;
while happy<=2,
if happy==1,
objv1_objv2_max_min_end=objv1_objv2_max_min_end1;
distance000=distance0001;
else
objv1_objv2_max_min_end=objv1_objv2_max_min_end2;
distance000=distance0002;
end
number_01=1;
chrom_space1_lv_dis1=(objv1_objv2_max_min_end./nind);
while number_01<=n_xn2_0,
number_02=1;
temp=0;
while number_02<=n_xn2_0,
if distance000(number_01,number_02)<chrom_space1_lv_dis1,
temp=temp+1;
end
number_02=number_02+1;
end
if happy==1,
chrom_space1(number_01)=temp-1;
else
chrom_space2(number_01)=temp-1;
end
number_01=number_01+1;
end
happy= happy+1;
end
chrom_space_end=chrom_space1+chrom_space2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求各个体的距离数字化结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -