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

📄 coga2_c.m

📁 遗传算法例程:通过MATLAB
💻 M
📖 第 1 页 / 共 2 页
字号:
        FitnVmin=ranking(reqmin);
        SelCh = select('rws',Chrom,FitnVmin);
        SelCh = recombin('xovsp',SelCh,0.8);
        SelCh = mutate('mutbga',SelCh,[Field,Field],[1/4]);
        SelCh = round(SelCh);
        
        %SelChmin=select('rws',Chrom1,FitnVmin);
        %SelChmin=recombin('xovsp',SelChmin,0.8);
        %SelChmin=mutate('mutbga',SelChmin,[Field1,Field1],[1/4]); 
        %SelChmin = round(SelChmin);
        
        %SelChminF1 = select('rws',ChromF1,FitnVmin);
        %SelChminF1 = recombin('xovsp',SelChminF1,0.8);
        %SelChminF1 = mutate('mutbga',SelChminF1,[FieldF1,FieldF1],[1/4]);
        %SelChminF1 = round(SelChminF1);
        
        %SelChminF2 = select('rws',ChromF2,FitnVmin);
        %SelChminf2 = recombin('xovsp',SelChminF2,0.8);
        %SelChminF2 = mutate('mutbga',SelChminF2,[FieldF2,FieldF2],[1/4]);
        %SelChminF2 = round(SelChminF2);
        
        SelChmin = SelCh(:,1:2*F);
        SelChminF1 = SelCh(:,2*F+1:2*F+2*F1);
        SelChminF2 = SelCh(:,2*F+2*F1+1:2*F+2*F1+2*F2);
        
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
        for mm = 1:NIND1                       % 修补染色体(非连续航班)
            for nn = 1:F
                if SelChmin(mm,nn) < Tpdfs(nn)
                    SelChmin(mm,nn) = Tpdfs(nn);
                end
                if SelChmin(mm,nn+F) - SelChmin(mm,nn) < StdTime(nn)
                    SelChmin(mm,nn+F) = SelChmin(mm,nn) + StdTime(nn);
                end
            end
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 修补连续航班F1染色体
        for mm = 1:NIND1
            for nn = 1:F1
               if SelChminF1(mm,nn) < Tpdf1s(nn)
                    SelChminF1(mm,nn) = Tpdf1s(nn);
                end
                if SelChminF1(mm,nn+F1) - SelChminF1(mm,nn) < StdTime1(nn)
                    SelChminF1(mm,nn+F1) = SelChminF1(mm,nn) + StdTime1(nn);
                end
            end
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 修补连续航班F2的染色体
        for mm = 1:NIND1                 
            for nn = 1:F2
                if SelChminF2(mm,nn) < Tpdf2s(nn)
                    SelChminF2(mm,nn) = Tpdf2s(nn);
                end
                if SelChminF2(mm,nn+F2) - SelChminF2(mm,nn) < StdTime2(nn)
                    SelChminF2(mm,nn+F2) = SelChminF2(mm,nn) + StdTime2(nn);
                end
            end
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        
        SelCh = [SelChmin,SelChminF1,SelChminF2];    % 指定染色体的各个部分功能
        Chrom = reins(Chrom,SelCh);
        Chrom1 = Chrom(:,1:2*F);
        ChromF1 = Chrom(:,2*F+1:2*F+2*F1);
        ChromF2 = Chrom(:,2*F+2*F1+1:2*F+2*F1+2*F2);
       
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 根据非连续航班生成取消情况
        %Chrom1=reins(Chrom1,SelChmin);
        Chrom11 = Chrom1(:,1:F);
        Chrom12 = Chrom1(:,1+F:2*F);

        for ii = 1:NIND1            % 生成新的zs(非连续航班)
            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;                    % 取消航班的情况(延时过长)
                else
                    Chromzs(ii,jj) = 0;
                end
            end
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 根据连续航班F1生成取消情况
        %ChromF1 = reins(ChromF1,SelChminF1);
        ChromF11 = ChromF1(:,1:F1);
        ChromF12 = ChromF1(:,F1+1:2*F1);
        
        ChromzsF1 = zeros(NIND1,F1);
        for ii = 1:NIND1
            for jj = 1:F1
                if (ChromF11(ii,jj) > Tpdf1s(jj) + Mgf1s(jj))|(ChromF12(ii,jj) - ChromF11(ii,jj) > Tprf1s(jj) - Tpdf1s(jj) + Maf1s(jj))
                    ChromzsF1(ii,jj) = 1;                    % 取消航班的情况(延时过长)
                end
            end
        end

        for ii = 1:NIND1
            for jj = 1:F1
                ChromzsF1_con(ii,jj) = 0;
                ChromF1_con(ii,jj) = F1con(jj);
            end
        end
        
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 根据连续航班F2生成取消情况
        %ChromF2 = reins(ChromF2,SelChminF2);
        ChromF21 = ChromF2(:,1:F2);
        ChromF22 = ChromF2(:,1+F2:2*F2);
        
        ChromzsF2 = zeros(NIND1,F2);
        
        for ii = 1:NIND1
            for jj = 1:F2
                if (ChromF21(ii,jj) > Tpdf2s(jj) + Mgf2s(jj))|(ChromF22(ii,jj) - ChromF21(ii,jj) > Tprf2s(jj) - Tpdf2s(jj) + Maf2s(jj))
                    ChromzsF2(ii,jj) = 1;                    % 取消航班的情况(延时过长)
                end
            end
        end
        
        for ii = 1:NIND1
            for jj = 1:F2
                if ChromzsF2(ii,jj) == 1
                    ChromzsF2_con(ii,jj) = 1;
                    ChromF2_con(ii,jj) = F2con(jj);
                else
                    temp = ChromF22(ii,jj) - Tprf2s(jj);    %%%%%%%%%%%%%%%%%%% WRONG,needs modification %%%%%%%%%%%%%%%%%%%%
                    if temp > tfsdash + 4
                        ChromzsF2_con(ii,jj) = 1;
                        ChromF2_con(ii,jj) = F2con(jj);
                    else
                        ChromzsF2_con(ii,jj) = 0;
                        ChromF2_con(ii,jj) = temp + F2con(jj);
                    end
                end
            end
        end   
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Repair complete
                  
        for i=1:NIND1
            reqmin(i)=Avi_Lag2_C(FS,FSt,Chromzs(i,:),Chrom11(i,:),Chrom12(i,:),Cgf,Caf,Tpdfs,Tprfs,Qfs,Mgfs,Mafs,FSu,FSd,F,T,bs2rv(Chrom2u,FieldD2),r,FS1t,ChromF11(i,:),ChromF12(i,:),ChromzsF1(i,:),ChromzsF1_con(i,:),ChromF1_con(i,:),F1con,Tpdf1s,Tprf1s,F1,FS1u,FS1d,FS2t,ChromF21(i,:),ChromF22(i,:),ChromzsF2(i,:),ChromzsF2_con(i,:),ChromF2_con(i,:),F2con,Tpdf2s,Tprf2s,F2,FS2u,FS2d);
        end
        [R,S]=size(reqmin);
        if R==1
           reqmin=reqmin';
        end
        %t1=t1.*0.85; % can adjust 0.85
    end
    
    [dmin,ii]= min(reqmin);
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 选择非连续航班当中的第i个
    Chrom1u=Chrom1(ii,:);
    Chrom11u = Chrom1u(:,1:F);
    Chrom12u = Chrom1u(:,F+1:2*F);    
    Chromzsu = Chromzs(ii,:);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 选择连续航班F1当中的第i个
    ChromF1u = ChromF1(ii,:);
    ChromF11u = ChromF1u(:,1:F1);
    ChromF12u = ChromF1u(:,F1+1:2*F1);
    ChromzsF1u = ChromzsF1(ii,:);
    ChromzsF1_conu = ChromzsF1_con(ii,:);
    ChromF1_conu = ChromF1_con(ii,:);    %后续航班起飞时间
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 选择连续航班F2当中的第i个
    ChromF2u = ChromF2(ii,:);
    ChromF21u = ChromF2u(:,1:F2);
    ChromF22u = ChromF2u(:,1+F2:2*F2);
    ChromzsF2u = ChromzsF2(ii,:);
    ChromzsF2_conu = ChromzsF2_con(ii,:);
    ChromF2_conu = ChromF2_con(ii,:);    % 后续航班起飞时间
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    for gen2=1:10
        FitnVmax=ranking(-reqmax);
        SelChmax=select('rws',Chrom2,FitnVmax);
        SelChmax=recombin('xovsp',SelChmax,0.8);
        SelChmax=mut(SelChmax);

        Chrom2=reins(Chrom2,SelChmax);
        
        for j=1:20
            reqmax(j)=Avi_Lag2_C(FS,FSt,Chromzsu,Chrom11u,Chrom12u,Cgf,Caf,Tpdfs,Tprfs,Qfs,Mgfs,Mafs,FSu,FSd,F,T,bs2rv(Chrom2(j,:),FieldD2),r,FS1t,ChromF11u,ChromF12u,ChromzsF1u,ChromzsF1_conu,ChromF1_conu,F1con,Tpdf1s,Tprf1s,F1,FS1u,FS1d,FS2t,ChromF21u,ChromF22u,ChromzsF2u,ChromzsF2_conu,ChromF2_conu,F2con,Tpdf2s,Tprf2s,F2,FS2u,FS2d);
        end
        
        [M,N]=size(reqmax);
        if M==1
        reqmax=reqmax';
        end
        %t2=t2.*0.85;
    end
    [dmax,jj]=max(reqmax);
    Chrom2u=Chrom2(jj,:);
    
    r=r.*1.1;
    if r>10000
        r=10000;
    end
    
    x=Chrom1u;

    disp(gen);
    
    TdfsMr = zeros(F,T);
    TrfsMr = TdfsMr;
    for mm = 1:F
        for nn = 1:T
            if Chrom11u(mm) == nn
                TdfsMr(mm,nn) = 1;
            end
            if Chrom12u(mm) == nn
                TrfsMr(mm,nn) = 1;
            end
        end
    end
    
    %Obj(gen) = mincost_C(FS,FSt,Chromzsu,Cgf,Caf,Tpdfs,Tprfs,TdfsMr,TrfsMr,Qfs,FS1t,ChromF11u,ChromF12u,ChromzsF1u,ChromzsF1_conu,ChromF1_conu,F1con,Tpdf1s,Tprf1s,FS2t,ChromF21u,ChromF22u,ChromzsF2u,ChromzsF2_conu,ChromF2_conu,F2con,Tpdf2s,Tprf2s);
    Obj(gen) = maxcapacity_C(FS,Chromzsu,TdfsMr,TrfsMr,FSu,FSd,T,ChromF11u,ChromF12u,ChromzsF1u,ChromzsF1_conu,ChromF1_conu,FS1u,FS1d,ChromF21u,ChromF22u,ChromzsF2u,ChromzsF2_conu,ChromF2_conu,FS2u,FS2d);
    %toc;
end

mm=1:MAXGEN;
plot(mm,Obj);

⌨️ 快捷键说明

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