📄 coga2_c.m
字号:
FitnVmin=ranking(reqmin);
SelCh = select('rws',Chrom,FitnVmin);
SelCh = recombin('xovsp',SelCh,0.8);
SelCh = mutate('mutbga',SelCh,[Field,Field],[1/4]);
SelCh = round(SelCh);
%SelChmin=select('rws',Chrom1,FitnVmin);
%SelChmin=recombin('xovsp',SelChmin,0.8);
%SelChmin=mutate('mutbga',SelChmin,[Field1,Field1],[1/4]);
%SelChmin = round(SelChmin);
%SelChminF1 = select('rws',ChromF1,FitnVmin);
%SelChminF1 = recombin('xovsp',SelChminF1,0.8);
%SelChminF1 = mutate('mutbga',SelChminF1,[FieldF1,FieldF1],[1/4]);
%SelChminF1 = round(SelChminF1);
%SelChminF2 = select('rws',ChromF2,FitnVmin);
%SelChminf2 = recombin('xovsp',SelChminF2,0.8);
%SelChminF2 = mutate('mutbga',SelChminF2,[FieldF2,FieldF2],[1/4]);
%SelChminF2 = round(SelChminF2);
SelChmin = SelCh(:,1:2*F);
SelChminF1 = SelCh(:,2*F+1:2*F+2*F1);
SelChminF2 = SelCh(:,2*F+2*F1+1:2*F+2*F1+2*F2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for mm = 1:NIND1 % 修补染色体(非连续航班)
for nn = 1:F
if SelChmin(mm,nn) < Tpdfs(nn)
SelChmin(mm,nn) = Tpdfs(nn);
end
if SelChmin(mm,nn+F) - SelChmin(mm,nn) < StdTime(nn)
SelChmin(mm,nn+F) = SelChmin(mm,nn) + StdTime(nn);
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 修补连续航班F1染色体
for mm = 1:NIND1
for nn = 1:F1
if SelChminF1(mm,nn) < Tpdf1s(nn)
SelChminF1(mm,nn) = Tpdf1s(nn);
end
if SelChminF1(mm,nn+F1) - SelChminF1(mm,nn) < StdTime1(nn)
SelChminF1(mm,nn+F1) = SelChminF1(mm,nn) + StdTime1(nn);
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 修补连续航班F2的染色体
for mm = 1:NIND1
for nn = 1:F2
if SelChminF2(mm,nn) < Tpdf2s(nn)
SelChminF2(mm,nn) = Tpdf2s(nn);
end
if SelChminF2(mm,nn+F2) - SelChminF2(mm,nn) < StdTime2(nn)
SelChminF2(mm,nn+F2) = SelChminF2(mm,nn) + StdTime2(nn);
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SelCh = [SelChmin,SelChminF1,SelChminF2]; % 指定染色体的各个部分功能
Chrom = reins(Chrom,SelCh);
Chrom1 = Chrom(:,1:2*F);
ChromF1 = Chrom(:,2*F+1:2*F+2*F1);
ChromF2 = Chrom(:,2*F+2*F1+1:2*F+2*F1+2*F2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 根据非连续航班生成取消情况
%Chrom1=reins(Chrom1,SelChmin);
Chrom11 = Chrom1(:,1:F);
Chrom12 = Chrom1(:,1+F:2*F);
for ii = 1:NIND1 % 生成新的zs(非连续航班)
for jj = 1:F
if (Chrom11(ii,jj) > Tpdfs(jj) + Mgfs(jj))|(Chrom12(ii,jj) - Chrom11(ii,jj) > StdTime(jj) + Mafs(jj))
Chromzs(ii,jj) = 1; % 取消航班的情况(延时过长)
else
Chromzs(ii,jj) = 0;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 根据连续航班F1生成取消情况
%ChromF1 = reins(ChromF1,SelChminF1);
ChromF11 = ChromF1(:,1:F1);
ChromF12 = ChromF1(:,F1+1:2*F1);
ChromzsF1 = zeros(NIND1,F1);
for ii = 1:NIND1
for jj = 1:F1
if (ChromF11(ii,jj) > Tpdf1s(jj) + Mgf1s(jj))|(ChromF12(ii,jj) - ChromF11(ii,jj) > Tprf1s(jj) - Tpdf1s(jj) + Maf1s(jj))
ChromzsF1(ii,jj) = 1; % 取消航班的情况(延时过长)
end
end
end
for ii = 1:NIND1
for jj = 1:F1
ChromzsF1_con(ii,jj) = 0;
ChromF1_con(ii,jj) = F1con(jj);
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 根据连续航班F2生成取消情况
%ChromF2 = reins(ChromF2,SelChminF2);
ChromF21 = ChromF2(:,1:F2);
ChromF22 = ChromF2(:,1+F2:2*F2);
ChromzsF2 = zeros(NIND1,F2);
for ii = 1:NIND1
for jj = 1:F2
if (ChromF21(ii,jj) > Tpdf2s(jj) + Mgf2s(jj))|(ChromF22(ii,jj) - ChromF21(ii,jj) > Tprf2s(jj) - Tpdf2s(jj) + Maf2s(jj))
ChromzsF2(ii,jj) = 1; % 取消航班的情况(延时过长)
end
end
end
for ii = 1:NIND1
for jj = 1:F2
if ChromzsF2(ii,jj) == 1
ChromzsF2_con(ii,jj) = 1;
ChromF2_con(ii,jj) = F2con(jj);
else
temp = ChromF22(ii,jj) - Tprf2s(jj); %%%%%%%%%%%%%%%%%%% WRONG,needs modification %%%%%%%%%%%%%%%%%%%%
if temp > tfsdash + 4
ChromzsF2_con(ii,jj) = 1;
ChromF2_con(ii,jj) = F2con(jj);
else
ChromzsF2_con(ii,jj) = 0;
ChromF2_con(ii,jj) = temp + F2con(jj);
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Repair complete
for i=1:NIND1
reqmin(i)=Avi_Lag2_C(FS,FSt,Chromzs(i,:),Chrom11(i,:),Chrom12(i,:),Cgf,Caf,Tpdfs,Tprfs,Qfs,Mgfs,Mafs,FSu,FSd,F,T,bs2rv(Chrom2u,FieldD2),r,FS1t,ChromF11(i,:),ChromF12(i,:),ChromzsF1(i,:),ChromzsF1_con(i,:),ChromF1_con(i,:),F1con,Tpdf1s,Tprf1s,F1,FS1u,FS1d,FS2t,ChromF21(i,:),ChromF22(i,:),ChromzsF2(i,:),ChromzsF2_con(i,:),ChromF2_con(i,:),F2con,Tpdf2s,Tprf2s,F2,FS2u,FS2d);
end
[R,S]=size(reqmin);
if R==1
reqmin=reqmin';
end
%t1=t1.*0.85; % can adjust 0.85
end
[dmin,ii]= min(reqmin);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 选择非连续航班当中的第i个
Chrom1u=Chrom1(ii,:);
Chrom11u = Chrom1u(:,1:F);
Chrom12u = Chrom1u(:,F+1:2*F);
Chromzsu = Chromzs(ii,:);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 选择连续航班F1当中的第i个
ChromF1u = ChromF1(ii,:);
ChromF11u = ChromF1u(:,1:F1);
ChromF12u = ChromF1u(:,F1+1:2*F1);
ChromzsF1u = ChromzsF1(ii,:);
ChromzsF1_conu = ChromzsF1_con(ii,:);
ChromF1_conu = ChromF1_con(ii,:); %后续航班起飞时间
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 选择连续航班F2当中的第i个
ChromF2u = ChromF2(ii,:);
ChromF21u = ChromF2u(:,1:F2);
ChromF22u = ChromF2u(:,1+F2:2*F2);
ChromzsF2u = ChromzsF2(ii,:);
ChromzsF2_conu = ChromzsF2_con(ii,:);
ChromF2_conu = ChromF2_con(ii,:); % 后续航班起飞时间
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for gen2=1:10
FitnVmax=ranking(-reqmax);
SelChmax=select('rws',Chrom2,FitnVmax);
SelChmax=recombin('xovsp',SelChmax,0.8);
SelChmax=mut(SelChmax);
Chrom2=reins(Chrom2,SelChmax);
for j=1:20
reqmax(j)=Avi_Lag2_C(FS,FSt,Chromzsu,Chrom11u,Chrom12u,Cgf,Caf,Tpdfs,Tprfs,Qfs,Mgfs,Mafs,FSu,FSd,F,T,bs2rv(Chrom2(j,:),FieldD2),r,FS1t,ChromF11u,ChromF12u,ChromzsF1u,ChromzsF1_conu,ChromF1_conu,F1con,Tpdf1s,Tprf1s,F1,FS1u,FS1d,FS2t,ChromF21u,ChromF22u,ChromzsF2u,ChromzsF2_conu,ChromF2_conu,F2con,Tpdf2s,Tprf2s,F2,FS2u,FS2d);
end
[M,N]=size(reqmax);
if M==1
reqmax=reqmax';
end
%t2=t2.*0.85;
end
[dmax,jj]=max(reqmax);
Chrom2u=Chrom2(jj,:);
r=r.*1.1;
if r>10000
r=10000;
end
x=Chrom1u;
disp(gen);
TdfsMr = zeros(F,T);
TrfsMr = TdfsMr;
for mm = 1:F
for nn = 1:T
if Chrom11u(mm) == nn
TdfsMr(mm,nn) = 1;
end
if Chrom12u(mm) == nn
TrfsMr(mm,nn) = 1;
end
end
end
%Obj(gen) = mincost_C(FS,FSt,Chromzsu,Cgf,Caf,Tpdfs,Tprfs,TdfsMr,TrfsMr,Qfs,FS1t,ChromF11u,ChromF12u,ChromzsF1u,ChromzsF1_conu,ChromF1_conu,F1con,Tpdf1s,Tprf1s,FS2t,ChromF21u,ChromF22u,ChromzsF2u,ChromzsF2_conu,ChromF2_conu,F2con,Tpdf2s,Tprf2s);
Obj(gen) = maxcapacity_C(FS,Chromzsu,TdfsMr,TrfsMr,FSu,FSd,T,ChromF11u,ChromF12u,ChromzsF1u,ChromzsF1_conu,ChromF1_conu,FS1u,FS1d,ChromF21u,ChromF22u,ChromzsF2u,ChromzsF2_conu,ChromF2_conu,FS2u,FS2d);
%toc;
end
mm=1:MAXGEN;
plot(mm,Obj);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -