?? avi_lag_c.m
字號:
function [y yc] = Avi_Lag_C(FS,FSt,zs,ChromT,ChromL,Cgf,Caf,Tpdfs,Tprfs,Qfs,Mgfs,Mafs,FSu,FSd,F,T,LagY,r,FS1t,ChromF11,ChromF12,ChromzsF1,ChromzsF1_con,ChromF1_con,F1con,Tpdf1s,Tprf1s,F1,FS1u,FS1d,Qf1s,FS2t,ChromF21,ChromF22,ChromzsF2,ChromzsF2_con,ChromF2_con,F2con,Tpdf2s,Tprf2s,F2,FS2u,FS2d,Qf2s)
% 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
% 任意航班降落的時間總是落后于起飛的時間
% 實際飛行時間不得小于預定飛行時間
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
NAP = max([max(FSu),max(FSd),max(FS1u),max(FS1d),max(FS2u),max(FS2d)]) - 1;
% 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
yobj = mincost_C(FS,FSt,zs,Cgf,Caf,Tpdfs,Tprfs,TdfsM,TrfsM,Qfs,FS1t,ChromF11,ChromF12,ChromzsF1,ChromzsF1_con,ChromF1_con,F1con,Tpdf1s,Tprf1s,Qf1s,FS2t,ChromF21,ChromF22,ChromzsF2,ChromzsF2_con,ChromF2_con,F2con,Tpdf2s,Tprf2s,Qf2s);
%disp(yobj);
ylagrangian = 0;
%for f = 1:F
for f = 1:NAP
for t = 1:T
reco(f,t) = OffCon_C(FS,zs,TdfsM,FSu,f,t,ChromF11,ChromzsF1,ChromzsF1_con,ChromF1_con,FS1u,FS1d,ChromF21,ChromzsF2,ChromzsF2_con,ChromF2_con,FS2u,FS2d);
yc(f,t) = 9 - reco(t); % 拉格朗日乘子 -- 起飛容量約束,任意機場任意時刻都要加上,yc >= 0;
ylagrangian = ylagrangian + r.*(min(0,yc(f,t)+LagY./r).^2-(LagY./r));
%ylagrangian = ylagrangian + r.*(min(0,yc+LagY./r).^2);
end
end
for f = 1:NAP
for t = 1:T
recl(f,t) = LandCon_C(FS,zs,TrfsM,FSd,f,t,ChromF12,ChromzsF1,ChromzsF1_con,ChromF1_con,FS1u,FS1d,ChromF22,ChromzsF2,ChromzsF2_con,ChromF2_con,FS2u,FS2d);
yc(f,t+T) = 10 - recl(t); % 拉格朗日乘子 -- 降落容量約束,任意機場任意時刻都要加上,yc >= 0;
ylagrangian = ylagrangian + r.*(min(0,yc(f,t+T)+LagY./r).^2 - (LagY./r));
%ylagrangian = ylagrangian + r.*(min(0,yc+LagY./r).^2);
end
end
for f = 1:NAP
for t = 1:T
if reco(f,t) < 4
yc(f,t+2*T) = 10 - recl(f,t);
end
if reco(f,t) >= 4 & reco(f,t) <7
yc(f,t+2*T) = 49 - 3.*recl(f,t) - 4.*reco(f,t);
end
if reco(f,t) == 7 | reco(f,t) == 8
yc(f,t+2*T) = 21 - recl(f,t) - 2.*reco(f,t);
end
if reco(f,t) >= 9
yc(f,t+2*T) = 9 - reco(f,t);
end
ylagrangian = ylagrangian + r.*(min(0,yc(f,t+2*T)+LagY./r).^2 - (LagY./r));
%ylagrangian = ylagrangian + r.*(min(0,yc+LagY./r).^2);
end
end
%disp(ylagrangian);
y = yobj + 0.5.*ylagrangian;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -