【路径规划】基于遗传算法求解多中心带时间窗车辆路径规划问题(VRPTW)matlab代码

138 阅读3分钟

1 简介

现有的区域内多配送中心配送多采用分区域独立配送模式.多个配送中心虽同属于一家企业,但一般情况下,企业会根据行政区划为每个配送中心划分一个业务范围,各配送中心间相对独立.在分区域独立配送模式下,一个客户会固定从属于某一特定配送中心,而不会根据客户的地理分布和需求特性进行调整,易导致各配送中心间任务分配不均.从理论研究 的 角 度 来 看,此 类 求 解 MDVRP 的 方 法 是“先分组后路径”,即分区域规划思想,将各配送中心割裂开来.分区的结果会直接影响区内路径的规划结果,不合理的分区算法常常会导致较差的路径规划.为避免此 类 问 题 的 出 现,本 文 采 用 整 体 配 送 模式,引入一个与所有的实际配送中心相连且距离为0的虚拟配送中心,所有车辆均从该虚拟配送中 心出发,经过实际配送中心对客户进行服务,然后再经实际配送中心返回该虚拟配送中心。

img

img

img

img

img

img

2 部分代码

%%遗传算法求解vrp问题(为选择操作从新设计后程序)

%D是距离矩阵,n为种群个数

%C为停止代数,遗传到第 C代时程序停止,C的具体取值视问题的规模和耗费的时间而定

%交叉概率Pc,变异概率Pm

%R为最短路径,Rlength为路径长度

clc

clear all

close all

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

[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

3 仿真结果

4 参考文献

[1]张露. (2020). 基于改进遗传算法求解带时间窗车辆路径规划问题. 中国物流与采购(14).

**部分理论引用网络文献,若有侵权联系博主删除。**​