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

📄 mincost_c.m

📁 遗传算法例程:通过MATLAB
💻 M
字号:
function y = 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);
% 计算最小开销目标的函数

% 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向量

for i = 1:length(zs)
    [A,B] = max(TdfsM(i,:));
    Tdfs(:,i) = B;
    [C,D] = max(TrfsM(i,:));
    Trfs(:,i) = D;
end

Wgf = Tdfs - Tpdfs;            % 航班序列的地面延误时间,只可能延后而不可能超前
Waf = Trfs - Tprfs - Wgf;      % 航班序列的空中延误时间,只可能延后而不可能超前

for i = 1:length(zs)
    if Wgf(i) < 0
        Wgf(i) = 0;
    end
    if Waf(i) < 0
        Waf(i) = 0;
    end
end

%disp(mean(Wgf));
%disp(mean(Waf));

sum = 0;

for i = 1:length(zs)
    if FSt(i) == 2
        serial = 1;            % 大型机的单位时间成本
    else
        serial = 0.7;          % 中型机的单位时间成本
    end

    if zs(i) == 0              % 看对应的航班是否取消,这是不取消的情况
        rec = serial.*(Cgf.*Wgf(i) + Caf.*Waf(i));
    else                       % 这是取消的情况
        rec = Qfs(i);
    end
    %disp(rec);
    sum = sum + rec;
end

%disp(sum);

%Qf1s = 20.*FS1t;
%Qf2s = 20.*FS2t;

Wgf1 = ChromF11 - Tpdf1s;
Waf1 = ChromF12 - Tprf1s - Wgf1;

for i = 1:length(ChromzsF1)
    if FS1t(i) == 2
        serial = 1;
    else
        serial = 0.7;
    end
    
    if ChromzsF1(i) == 0
        first = serial.*(Cgf.*Wgf1(i) + Caf.*Waf1(i));
        if ChromzsF1_con(i) == 0       % 后续航班不取消
            second = 0;
        else
            second = Qf1s(i);
        end
    else
        first = Qf1s(i);
        if ChromzsF1_con(i) == 0
            second = 0;
        else
            second = Qf1s(i);
        end
    end
    
    sum = sum + first + second;
end

%disp(sum)

Wgf2 = ChromF21 - Tpdf2s;
Waf2 = ChromF22 - Tprf2s - Wgf2;
for i = 1:length(ChromzsF2)
    if FS2t(i) == 2
        serial = 1;
    else
        serial = 0.7;
    end
    
    if ChromzsF2(i) == 0          % 前面航班不取消,则后面可能取消也可能不取消
        first = serial.*(Cgf.*Wgf2(i) + Caf.*Waf2(i));
        if ChromzsF2_con(i) == 0
            second = serial.*Cgf.*(ChromF2_con(i) - F2con(i));
        else
            second = Qf2s(i);
        end
    else
        first = Qf2s(i);
        second = Qf2s(i);
    end
    sum = sum + first + second;
end


y = sum;

⌨️ 快捷键说明

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