📄 avi_lag2.m
字号:
function [y yc] = Avi_Lag(FS,FSt,zs,ChromT,ChromL,Cgf,Caf,Tpdfs,Tprfs,Qfs,Mgfs,Mafs,FSu,FSd,F,T,LagY,r)
% FS--计划航班编号序列,大小1*F(函数中没有出现,可以不用),FSt--计划航班类型序列,大小1*F(2表示大型机,1表示中型机,没有小型机);
% Fdashs--连续飞行的航班序列(为F的一个子集,表示为一个2进制串(大小1*F'),第i个位置为1表示连续航班序列包括第i个航班); --本函数没有用到
% FSu--计划航班序列的各个起飞机场,;FSd--计划航班序列的各个降落机场; --本函数没有用到,二者大小都是1*F;
% zs--各个航班是否取消的向量,为一个二进制串,大小1*F,第i个位置为1表示第i个航班取消,为0表示第i个航班不取消(这是一个决策向量);
% Cgf--地面延误的单位时间成本(对大型机); Caf--空中延误的单位时间成本(对大型机),这两个都是单一数字
% Tpdfs/Tprfs--这是计划航班序列的计划起飞和降落的时间段(都是1*F向量);
% Mgfs/Mafs--计划航班序列的依次最大地面/空中的等待时间数(都是1*F向量);--本函数没有用到
% TdfsM/TrfsM--计划航班序列的实际起飞/降落时间(为两个矩阵,大小都为F行T列,每一行代表一个航班的起(降)情况,且每行只有一个1,代表航班在该时刻位置起(降));
% Qfs--计划航班序列的取消成本,为1*F向量
% Only zs plays the role of j_v in this function
% F -- Num of total flights
% T -- Num of total time periods
% LagY & r -- Lagrangian Multiplexer
StdTime = Tprfs - Tpdfs;
% Chromm1(jj,:)=Chrom(MN,:);
% R0(jj,:)=YYY;
% Chrommin=[Chromm1,R0];
% jj=jj+1;
% FitnV=ranking(ObjV,[2,1],SUBPOP);% assign fitness values
% SelCh=select('sus',Chrom,FitnV,GGAP,SUBPOP); % select
% SelCh=recombin('recdis',SelCh,XOVR,SUBPOP); % recombin
% SelCh=mutate('mutbga',SelCh, FieldDD,[MUTR],SUBPOP); % mutate, next generation is exist
% ObjVOff=feval('findcal2forGA_Accurate_withAR_CRTRP_examine',SelCh(:,1),SelCh(:,2),SelCh(:,3),SelCh(:,4),SelCh(:,5),gen); % object function value of next generation
% [Chrom, ObjV]=reins(Chrom, SelCh, SUBPOP, [1,INSR],ObjV,ObjVOff); % replace
% if (rem(gen, MIGGEN)==0)
% [Chrom,ObjV]=migrate(Chrom, SUBPOP, [MIGR,1,1],ObjV); % every 20 generations, migrate
% end
% 任意航班降落的时间总是落后于起飞的时间
% 实际飞行时间不得小于预定飞行时间
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% TdfsM/TrfsM--计划航班序列的实际起飞/降落时间(为两个矩阵,大小都为F行T列,每一行代表一个航班的起(降)情况,且每行只有一个1,代表航班在该时刻位置起(降));
TdfsM = zeros(F,T);
TrfsM = TdfsM;
for mm = 1:F
for nn = 1:T
if ChromT(mm) == nn
TdfsM(mm,nn) = 1;
end
if ChromL(mm) == nn
TrfsM(mm,nn) = 1;
end
end
end
ycost = mincost(FS,FSt,zs,Cgf,Caf,Tpdfs,Tprfs,TdfsM,TrfsM,Qfs);
%disp(yobj);
ylagrangian = 0;
%for f = 1:F
for t = 1:T
reco(t) = OffCon(FS,zs,TdfsM,FSu,1,t);
yc(t) = 9 - reco(t); % 拉格朗日乘子 -- 起飞容量约束,任意机场任意时刻都要加上,yc >= 0;
ylagrangian = ylagrangian + r.*(min(0,yc(t)+LagY./r).^2-(LagY./r));
%ylagrangian = ylagrangian + r.*(min(0,yc+LagY./r).^2);
end
%end
%for f = 1:F
for t = 1:T
recl(t) = LandCon(FS,zs,TrfsM,FSd,1,t);
yc(t+T) = 10 - recl(t); % 拉格朗日乘子 -- 降落容量约束,任意机场任意时刻都要加上,yc >= 0;
ylagrangian = ylagrangian + r.*(min(0,yc(t+T)+LagY./r).^2 - (LagY./r));
%ylagrangian = ylagrangian + r.*(min(0,yc+LagY./r).^2);
end
%end
for t = 1:T
if reco(t) < 4
yc(t+2*T) = 10 - recl(t);
end
if reco(t) >= 4 & reco(t) <7
yc(t+2*T) = 49 - 3.*recl(t) - 4.*reco(t);
end
if reco(t) == 7 | reco(t) == 8
yc(t+2*T) = 21 - recl(t) - 2.*reco(t);
end
if reco(t) >= 9
yc(t+2*T) = 9 - reco(t);
end
ylagrangian = ylagrangian + r.*(min(0,yc(t+2*T)+LagY./r).^2 - (LagY./r));
%ylagrangian = ylagrangian + r.*(min(0,yc+LagY./r).^2);
end
ycc = 926 - ycost;
ylagrangian = ylagrangian + r.*(min(0,ycc+LagY./r).^2 - (LagY./r));
yobj = 0;
alpha = 0.3;
recc = alpha.*reco + (1 - alpha).*recl;
yobj = - sum(recc); % We need to maximize the capacity and a neg.sign is used here
%disp(ylagrangian);
y = yobj + 0.5.*ylagrangian;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -