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

​1 简介

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

2 部分代码

%

%
clear
clc
close all
tic
%% 用importdata这个函数来读取文件
c101=importdata('c101.txt');
c102=importdata('c102.txt');
c103=importdata('c103.txt');
cap=200;                                                        %车辆最大装载量
v_num=4;                                                        %车辆最多使用数目

%% 提取配送中心1数据信息
E1=c101(1,5);                                                    %配送中心时间窗开始时间
L1=c101(1,6);                                                    %配送中心时间窗结束时间
vertexs1=c101(:,2:3);                                            %所有点的坐标x和y
customer1=vertexs1(2:end,:);                                       %顾客坐标
cusnum1=size(customer1,1);                                         %顾客数
demands1=c101(2:end,4);                                          %需求量
a1=c101(2:end,5);                                                %顾客时间窗开始时间[a[i],b[i]]
b1=c101(2:end,6);                                                %顾客时间窗结束时间[a[i],b[i]]
s1=c101(2:end,7);                                                %客户点的服务时间
h1=pdist(vertexs1);
dist1=squareform(h1);                                             %距离矩阵,满足三角关系,暂用距离表示花费c[i][j]=dist[i][j]
%% 提取配送中心2数据信息
E2=c102(1,5);                                                    %配送中心时间窗开始时间
L2=c102(1,6);                                                    %配送中心时间窗结束时间
vertexs2=c102(:,2:3);                                            %所有点的坐标x和y
customer2=vertexs2(2:end,:);                                       %顾客坐标
cusnum2=size(customer2,1);                                         %顾客数
demands2=c102(2:end,4);                                          %需求量
a2=c102(2:end,5);                                                %顾客时间窗开始时间[a[i],b[i]]
b2=c102(2:end,6);                                                %顾客时间窗结束时间[a[i],b[i]]
s2=c102(2:end,7);                                                %客户点的服务时间
h2=pdist(vertexs2);
dist2=squareform(h2);                                             %距离矩阵,满足三角关系,暂用距离表示花费c[i][j]=dist[i][j]
%% 提取配送中心3数据信息
E3=c103(1,5);                                                    %配送中心时间窗开始时间
L3=c103(1,6);                                                    %配送中心时间窗结束时间
vertexs3=c103(:,2:3);                                            %所有点的坐标x和y
customer3=vertexs3(2:end,:);                                       %顾客坐标
cusnum3=size(customer3,1);                                         %顾客数
demands3=c103(2:end,4);                                          %需求量
a3=c103(2:end,5);                                                %顾客时间窗开始时间[a[i],b[i]]
b3=c103(2:end,6);                                                %顾客时间窗结束时间[a[i],b[i]]
s3=c103(2:end,7);                                                %客户点的服务时间
h3=pdist(vertexs3);
dist3=squareform(h3);                                             %距离矩阵,满足三角关系,暂用距离表示花费c[i][j]=dist[i][j]

%% 遗传算法参数设置
alpha=5;                                                       %违反的容量约束的惩罚函数系数
belta=5;                                                      %违反时间窗约束的惩罚函数系数
NIND=30;                                                       %种群大小
MAXGEN=100;                                                     %迭代次数
Pc=0.7;                                                         %交叉概率
Pm=0.1;                                                        %变异概率
GGAP=0.9;                                                       %代沟(Generation gap)
N1=cusnum1+v_num-1;                                               %染色体长度=顾客数目+车辆最多使用数目-1
N2=cusnum2+v_num-1;                                               %染色体长度=顾客数目+车辆最多使用数目-1
N3=cusnum3+v_num-1;                                               %染色体长度=顾客数目+车辆最多使用数目-1
%% 初始化种群
init_vc1=init(cusnum1,a1,demands1,cap);                             %构造初始解
Chrom1=InitPopCW(NIND,N1,cusnum1,init_vc1);

init_vc2=init(cusnum2,a2,demands2,cap);                             %构造初始解
Chrom2=InitPopCW(NIND,N2,cusnum2,init_vc2);

init_vc3=init(cusnum3,a3,demands3,cap);                             %构造初始解
Chrom3=InitPopCW(NIND,N3,cusnum3,init_vc3);
% disp(['总距离:',num2str(TD)]);
% disp(['车辆使用数目:',num2str(NV),',车辆行驶总距离:',num2str(TD),',违反约束路径数目:',num2str(violate_num),',违反约束顾客数目:',num2str(violate_cus)]);
% disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
%% 优化
gen=1;

   gen=gen+1 
end
% %% 画出最优解的路线图
% ObjV=calObj(Chrom,cusnum,cap,demands,a,b,L,s,dist,alpha,belta);             %计算种群目标函数值
% [minObjV,minInd]=min(ObjV);
% %% 输出最优解的路线和总距离
% disp('最优解:')
% bestChrom=Chrom(minInd(1),:);
% [bestVC,bestNV,bestTD,best_vionum,best_viocus]=decode(bestChrom,cusnum,cap,demands,a,b,L,s,dist);
% disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD),',违反约束路径数目:',num2str(best_vionum),',违反约束顾客数目:',num2str(best_viocus)]);
% disp('-------------------------------------------------------------')
% %% 判断最优解是否满足时间窗约束和载重量约束,0表示违反约束,1表示满足全部约束
% flag=Judge(bestVC,cap,demands,a,b,L,s,dist);
% %% 检查最优解中是否存在元素丢失的情况,丢失元素,如果没有则为空
% DEL=Judge_Del(bestVC);
%% 画出最终路线图
figure
hold on;box on
title('最优配送方案路线图')
draw_Best(bestVC1,vertexs1,'A');
draw_Best(bestVC2,vertexs2,'B');
draw_Best(bestVC3,vertexs3,'C');
xlabel('横坐标')
ylabel('纵坐标')
% save c101.mat
img =gcf;  %获取当前画图的句柄
print(img, '-dpng', '-r600', './运行结果1.png')         %即可得到对应格式和期望dpi的图像
figure
plot(y)
xlabel('代数')
ylabel('适应度值')
title('适应度曲线')
toc
img =gcf;  %获取当前画图的句柄
print(img, '-dpng', '-r600', './运行结果.png')         %即可得到对应格式和期望dpi的图像

3 仿真结果

​4 参考文献

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值