⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aviation_lag.asv

📁 遗传算法例程:通过MATLAB
💻 ASV
字号:
%function y = Aviation_Lag(FS,FSt,zs,Cgf,Caf,Tpdfs,Tprfs,Qfs,Mgfs,Mafs,F,T,LagY,r)

LagY = 10;
r = 1.1;

FS = [];

F = 100;
T = 40;

FSu = ;
FSd = 

for i = 1:F
    z = rand(1);
    if z > 0.7
        FSt(i) = 2;
    else
        FSt(i) = 1;
    end
end

Fdashs = [];

for i = 1:F
    z = rand(1);
    if z > 0.8
        zs(i) = 1;
    else
        zs(i) = 0;
    end
end

Cgf = 7;
Caf = 10;

for i = 1:F
Tpdfs(i) = ceil(rand(1).*10);
Tprfs(i) = ceil(T - 10.*rand(1));
end

Mgfs = T.*ones(1,F);
Mafs = Mgfs;

Qfs = FSt.*100;



% 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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Create TdfsM/TrfsM Matrix Using standard GA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
alpha = 1/3;   % Set a threshold for GA process
Cthres = sum(Qfs).*alpha;   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

StdTime = Tprfs - Tpdfs;
% Inner GA starts

NIND = 20;            % num of individuals
GGAP=1;               % generation gap
XOVR=0.7;               % rate of recombine
MUTR=1/4;          % rate of mutation
MAXGEN=10;           % Max number of generation
INSR=0.8;             % probabily of insertion
SUBPOP=1;             % number of subpop
MIGR=0.2;             % rate of migration
MIGGEN=20; % every 20 gen miggration
kk=1;

BaseVT = (T-StdTime-1).*ones(1,F);   % 计时时间段数从1开始,最大到T - StdTime,因航班而异,而这是起飞的时间段向量范围;
ChromT = crtbp(NIND,BaseVT); % 随机构造标准的起飞/降落时间表,严格满足要求:先起飞后降落,且都在预定的整个时间段内完成飞行任务;
ChromT1 = ChromT + 1;
BaseVL = StdTime + Mgfs + Mafs;       % 这是降落的时间段向量范围,要叠加在起飞时间段的基础上
BX = max(ChromT);
TempB = T.*ones(1,F) - BX;
for i = 1:F
    if BaseVL(i) > TempB(i)
        BaseVL(i) = TempB(i);
    end
end
ChromL = crtbp(NIND,BaseVL);
ChromL = ChromL + ChromT;
ChromStd = [ChromT,ChromL];

gen = 0;

TdfsM = zeros(F,T);
TrfsM = zeros(F,T);

for i = 1:NIND
    
% TdfsM/TrfsM--计划航班序列的实际起飞/降落时间(为两个矩阵,大小都为F行T列,每一行代表一个航班的起(降)情况,且每行只有一个1,代表航班在该时刻位置起(降));
    for mm = 1:F
        for nn = 1:T
            if ChromT(i,mm) == nn
                TdfsM(mm,nn) = 1;
            end
            if ChromL(i,mm) == nn
                TrfsM(mm,nn) = 1;
            end
        end
    end
    ObjV(i,:) = mincost(FS,FSt,zs,Cgf,Caf,Tpdfs,Tprfs,TdfsM,TrfsM,Qfs);
end

cnt = 1;

while gen < MAXGEN
    [YYY,MN] = min(ObjV);
    rec(cnt) = YYY;
    cnt = cnt + 1;
    
    FitnV = ranking(ObjV,[2,1],SUBPOP);
    SelCh=select('sus',ChromStd,FitnV,GGAP,SUBPOP); % select
    SelCh=recombin('recdis',SelCh,XOVR,SUBPOP);  % recombin
    SelCh=mut(SelCh); % mutate, next generation is exist
    
    for ii = 1:NIND
        REC = SelCh(ii,1:F);
        for jj = 1:F
            if REC(jj) > T - StdTime(jj) - 1
                REC(jj) = T - StdTime(jj) - 1;
            end
        end
        SelCh(ii,1:F) = REC;
        REC = SelCh(ii,F+1:2*F);
        for jj = 1:F
            if REC(jj) > T
                REC(jj) = T;
            end
        end
        
        for mm = 1:F
            for nn = 1:T
                if SelCh(i,mm) == nn
                    TdfsM(mm,nn) = 1;
                end
                if SelCh(i,mm+F) == nn
                    TrfsM(mm,nn) = 1;
                end
            end
        end
        
        ObjVOff(i,:) = feval('mincost',FS,FSt,zs,Cgf,Caf,Tpdfs,Tprfs,TdfsM,TrfsM,Qfs);
    end
    
    [ChromStd, ObjV]=reins(ChromStd, SelCh, SUBPOP, [1,INSR],ObjV,ObjVOff); 
    
    gen = gen + 1;
end
        
%    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

    

% 任意航班降落的时间总是落后于起飞的时间
% 实际飞行时间不得小于预定飞行时间

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

yobj = min(rec);

ylagrangian = 0;

% The Taking-off-Capacity Constraint

% serial_to = 10;

for f = 1:F
    for t = 1:T
        rec = OffCon(FS,zs,TdfsM,FSu,f,t);
        yc = TdfsM(f,t) - rec;                       % 拉格朗日乘子 -- 起飞容量约束,任意机场任意时刻都要加上,yc >= 0;
        ylagrangian = ylagrangian + r.*(min(0,yc+LagY./r).^2-(LagY./r).^2);
    end
end

for f = 1:F
    for t = 1:T
        rec = LandCon(FS,zs,TrfsM,FSd,f,t);
        yc = TrfsM(f,t) - rec;                       % 拉格朗日乘子 -- 降落容量约束,任意机场任意时刻都要加上,yc >= 0;
        ylagrangian = ylagrangian + r.*(min(0,yc+LagY./r).^2 - (LagY./r).^2); 
    end
end

for f = 1:F
    rec = TimeCon(zs,TdfsM,TrfsM,Tpdfs,Tprfs,f);     % 拉格朗日乘子 -- 飞行时间约束,所有航班都要加上,
    ylagrangian = ylagrangian + r.*(min(0,rec+LagY./r).^2 - (LagY./r).^2);
end
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -