📄 test1.m
字号:
FS = [];
F = 100;
T = 40;
% 只考虑单一机场的容量
FSu = [1,2,2,1,2,2,2,1,2,1,2,2,1,2,2,2,1,2,1,2,2,2,2,2,1,1,2,1,2,2,1,1,1,1,2,1,2,2,2,1,1,1,1,2,1,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,1,1,1,1,1,2,1,1,2,1,2,2,2,1,2,1,2,1,2,1,2,2,2,1,1,2,2,1,2,1,2,1,2,1,2,1,2,2;];
FSd = [2,1,1,2,1,1,1,2,1,2,1,1,2,1,1,1,2,1,2,1,1,1,1,1,2,2,1,2,1,1,2,2,2,2,1,2,1,1,1,2,2,2,2,1,2,1,1,1,1,1,1,2,1,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,2,1,2,1,1,1,2,1,2,1,2,1,2,1,1,1,2,2,1,1,2,1,2,1,2,1,2,1,2,1,1;];
% 起降机场表,FSu表示起飞机场序列,FSu中的1表示考虑容量限制的机场,其他不考虑者一律用2表示;
% FSd表示降落的机场序列,和上面类似;
FSt = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,2,2,1,1,1,2,1,1,1,1,2,1,1,1,2,1,1,2,1,2,1,2,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,1,1,1,1;];
% 飞机的类型序列,1表示中型飞机,2表示大型飞机
% Generate zs according to TdfsM & TrfsM,
Cgf = 7;
Caf = 10;
Tpdfs = [11,10,11,12,18,4,2,14,27,29,8,5,27,8,20,30,20,27,1,5,25,13,27,23,21,11,5,5,6,13,26,15,25,14,14,14,13,28,1,9,2,21,20,30,17,13,6,19,23,12,1,13,23,24,28,26,12,19,22,6,28,18,19,8,17,28,11,20,12,19,21,12,13,20,26,12,13,18,17,22,16,24,15,6,22,30,25,22,15,4,20,11,5,18,25,21,30,29,2,11;];
Tprfs = [27,18,29,14,31,30,39,34,37,34,29,34,29,39,39,37,26,39,22,31,32,39,28,33,27,36,17,29,8,23,33,26,34,31,17,38,34,38,33,30,10,27,33,36,19,16,16,28,32,38,25,22,32,34,30,38,39,32,23,34,36,34,21,22,26,30,36,37,25,40,24,37,34,29,35,39,31,24,26,26,28,31,27,27,24,34,35,26,31,13,32,26,22,30,40,28,35,33,18,20;];
% 以上是标准起降时间表
Mgfs = 4.*ones(1,F); % 地面最多等待4个时间段
Mafs = Mgfs./2; % 空中最多等待2个时间段
Qfs = FSt.*100; % 取消费用,大概相当于单位时间损失的10倍
StdTime = Tprfs - Tpdfs; % 标准飞行时间,实际飞行时间不能比这个短
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Generating Process Complete
NIND1=100;
Chrom11 = crtbp(NIND1,T.*ones(1,F));
for ii = 1:NIND1
for jj = 1:F
if Chrom11(ii,jj) <= Tpdfs(jj)
Chrom11(ii,jj) = Tpdfs(jj);
end
end
end % Repair chrom so that all the requirments are satisfied
Chrom12 = ceil(10.*rand(NIND1,F)) + Chrom11;
for ii = 1:NIND1
Chrom12(ii,:) = Chrom12(ii,:) + StdTime;
end
Chrom1 = [Chrom11,Chrom12]
Chromzs = zeros(NIND1,F); % 0 -- 不取消;1 -- 取消;
for ii = 1:NIND1
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; % 取消航班的情况(延时过长)
end
end
end
NIND2=20;
PRECI=10;
FieldD2=[rep([PRECI],[1,1]); rep([0;10],[1,1]);rep([1;0;1;1],[1,1])];
Chrom2=crtbp(NIND2,PRECI);
Chrom1u=Chrom1(5,:);
Chrom2u=Chrom2(1,:);
r=1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MAXGEN=10;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:NIND1
% reqmin(i)=T_P2Lag(Chrom1(i,:),bs2rv(Chrom2u,FieldD2),r);
reqmin(i) = Avi_Lag(FS,FSt,Chromzs(i,:),Chrom11(i,:),Chrom12(i,:),Cgf,Caf,Tpdfs,Tprfs,Qfs,Mgfs,Mafs,FSu,FSd,F,T,bs2rv(Chrom2u,FieldD2),r);
end
[R,S]=size(reqmin);
if R==1
reqmin=reqmin';
end
%disp(reqmin);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%disp('part1 done');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:NIND2
reqmax(j)=Avi_Lag(FS,FSt,Chromzs(5,:),Chrom11(5,:),Chrom12(5,:),Cgf,Caf,Tpdfs,Tprfs,Qfs,Mgfs,Mafs,FSu,FSd,F,T,bs2rv(Chrom2(j,:),FieldD2),r);
end
[M,N]=size(reqmax);
if M==1
reqmax=reqmax';
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%disp('part2 done');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Field = rep([1;40],[1,100]);
FitnVmin=ranking(reqmin);
SelChmin=select('rws',Chrom1,FitnVmin);
SelChmin=recombin('xovsp',SelChmin,0.8);
SelChmin=mutate('mutbga',SelChmin,[Field,Field],[1/4]);
SelChmin = round(SelChmin);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -