【路径规划】遗传算法之多中心VRP求解【Matlab 024期】

一、简介

约束条件:
拥有多个物流中心。
车辆从某一个物流中心出发,完成配送任务后,可以不回到原来出发的物流中心,返回距离最近的物流中心,即开放式车辆路径。当然,根据车辆服务最后一个客户与所有物流中心的距离,如果与原来出发的物流中心是最短距离,也可以返回原来出发的物流中心。
优化目标:车辆固定使用成本(200元/辆)、车辆行驶时间成本(0.3元/分钟)、车辆等待时间成本(0.3元/分钟)、车辆服务时间(0.3元/分钟)成本之和最小。
约束条件:(1)不超过车辆容量限制(车辆容量为1000单位),(2)服务必须在客户时间窗内进行,(3)车辆可以提前到达客户,产生等待时间。(4)设定车辆从物流中心的出发时间为0时刻,即第0分钟。

二、源代码

%%遗传算法求解vrp问题(为选择操作从新设计后程序)
%D是距离矩阵,n为种群个数
%C为停止代数,遗传到第 C代时程序停止,C的具体取值视问题的规模和耗费的时间而定
%交叉概率Pc,变异概率Pm 
%R为最短路径,Rlength为路径长度
function VRP
 
        volume_shangyuan=30;                       %一架飞机对伤员的载量约束
        volume_wuzi=200;                           %一架飞机对物资的载量约束
        sudu_feiji=200;                            %一架飞机的速度
        base_num1=5;                               %各个仓库的飞机数量
        base_num2=5;
        base_num3=5;
        n=100;                                      %个体数
        C=100;                                     %迭代次数
        Pc=0.8;
        Pm=0.3;
        
%主程序入口        
tab=2         ; %tab=1,则程序跑的是所有点
                  %tab=2,则程序跑的是有缺失的点
 
if tab==1
        %初始化
        load('h.mat');
        demand_shangyuan(1,:)=a(:,4);
        demand_wuzi(1,:)=a(:,6);
        zuobiao(1,:)=a(:,2);zuobiao(2,:)=a(:,3);
        timewindow(1,:)=a(:,8);timewindow(2,:)=a(:,9);
        D = linjiejuzhen( zuobiao );    
        [N,NN]=size(D);
        %初始化点的出发仓库和回归仓库
        for i=1:N;
                dis(1,i)=sqrt((zuobiao(1,i)-22)^2+(zuobiao(2,i)-75)^2);
                dis(2,i)=sqrt((zuobiao(1,i)-75.8)^2+(zuobiao(2,i)-80.1)^2);
                dis(3,i)=sqrt((zuobiao(1,i)-53.4)^2+(zuobiao(2,i)-59.9)^2);
                if (dis(1,i)<=dis(2,i))
                    if (dis(1,i)<=dis(3,i))
                        dis(4,i)=1;
                    else
                        dis(4,i)=3;
                    end
                else
                    if (dis(2,i)<=dis(3,i))
                        dis(4,i)=2;
                    else
                        dis(4,i)=3;
                    end
                end    
        end
        clear i;
        [R,minlen]=geneticVRP(D,dis,timewindow,demand_shangyuan,demand_wuzi,volume_shangyuan,volume_wuzi,sudu_feiji,base_num1,base_num2,base_num3,n,C,Pc,Pm,zuobiao);%运算返回最优路径R和其总距离Rlength
else
        %初始化
        delete=[49 34 9 10 58];%要删除的点
        delete=sort(delete,'descend');
        [M,MM]=size(delete);
        load('h.mat');
        demand_shangyuan(1,:)=a(:,4);
        demand_wuzi(1,:)=a(:,6);
        zuobiao(1,:)=a(:,2);zuobiao(2,:)=a(:,3);
        timewindow(1,:)=a(:,8);timewindow(2,:)=a(:,9);
        xiba=0;
        for i=1:MM
            xiba=xiba+demand_shangyuan(1,delete(i))+demand_wuzi(1,delete(i));
        end
        [B,BB]=size(demand_shangyuan);
        old=(1:BB);
        for new=1:MM
            old(delete(new))=[];
            demand_shangyuan(delete(new))=[ ];
            demand_wuzi(delete(new))=[];
            zuobiao(:,delete(new))=[];
            timewindow(:,delete(new))=[];
        end
        D = linjiejuzhen( zuobiao );    
        [N,NN]=size(D);
        %初始化点的出发仓库和回归仓库
        for i=1:N;
                dis(1,i)=sqrt((zuobiao(1,i)-22)^2+(zuobiao(2,i)-75)^2);
                dis(2,i)=sqrt((zuobiao(1,i)-75.8)^2+(zuobiao(2,i)-80.1)^2);
                dis(3,i)=sqrt((zuobiao(1,i)-53.4)^2+(zuobiao(2,i)-59.9)^2);
                if (dis(1,i)<=dis(2,i))
                    if (dis(1,i)<=dis(3,i))
                        dis(4,i)=1;
                    else
                        dis(4,i)=3;
                    end
                else
                    if (dis(2,i)<=dis(3,i))
                        dis(4,i)=2;
                    else
                        dis(4,i)=3;
                    end
                end    
        end
        clear i;
       [R,minlen]=geneticVRP_delete(old,xiba,D,dis,timewindow,demand_shangyuan,demand_wuzi,volume_shangyuan,volume_wuzi,sudu_feiji,base_num1,base_num2,base_num3,n,C,Pc,Pm,zuobiao);%运算返回最优路径R和其总距离Rlength
end

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ912100926
往期回顾>>>>>>
【路径规划】粒子群优化算法之三维无人机路径规划【Matlab 012期】
【路径规划】遗传算法之多物流中心的开放式车辆路径规划【Matlab 013期】
【路径规划】粒子群算法之机器人栅格路径规划【Matlab 014期】
【路径规划】蚁群算法之求解最短路径【Matlab 015期】
【路径规划】免疫算法之物流中心选址【Matlab 016期】
【路径规划】人工蜂群之无人机三维路径规划【Matlab 017期】
【路径规划】遗传算法之基于栅格地图机器人路径规划【Matlab 018期】
【路径规划】蚁群算法之多无人机攻击调度【Matlab 019期】
【路径规划】遗传算法之基于栅格地图的机器人最优路径规划【Matlab 020期】
【路径规划】遗传算法之考虑分配次序的多无人机协同目标分配建模【Matlab 021期】
【路径规划】蚁群算法之多中心vrp问题【Matlab 022期】
【路径规划】蚁群算法之求解带时间窗的多中心VRP【Matlab 023期】

猜你喜欢

转载自blog.csdn.net/m0_54742769/article/details/113041427