1 简介
某企业负责城市内餐饮外卖配送业务,企业将一定时间内产生的一组外卖订单分配给某一个配送人员去完成,现考虑为其规划一条最佳路径 . 在一组外卖订单中,餐饮商家和客户具 有一一对应的关系,他们的地图位置也是已知的 . 配送人员需要从企业特定的配送中心出发,配送的基本规则是同一订单必须先取餐再送餐,即先到指定商家处取得某客户的餐饮外卖食 品,再送到该客户处,期间不考虑取餐和送餐时的交接时间 . 由于外卖餐饮的时效性,取餐和送餐均有时间范围要求,称为时间窗限制,即从订单成立开始计时要尽量在给定的时间范围内 取到外卖餐饮或送到客户处,否则配送人员和企业将遭受信用或经济损失 . 配送过程中不考虑车辆的载重限制,配送人员可以先到多个商家取得多份外卖餐饮,再陆续配送到多个客户手 中 . 配送期间不再接受新的订单,完成全部订单后,配送人员需要回到企业的配送中心,以接 受下一批订单 。
2 部分代码
%% 将被移出的顾客重新插回所得到的新的车辆顾客分配方案
%%输入removed 被移出的顾客集合
%输入rfvc 移出removed中的顾客后的final_vehicles_customer
%输入L 集配中心时间窗
%输入a 顾客时间窗
%输入b 顾客时间窗
%输入s 服务每个顾客的时间
%输入dist 距离矩阵
%输入demands 需求量
%输入cap 最大载重量
%输出ReIfvc 将被移出的顾客重新插回所得到的新的车辆顾客分配方案
%输出RTD 新分配方案的总距离
function [ ReIfvc,RTD ] = Re_inserting(removed,rfvc,L,a,b,s,dist,demands,cap,chesu,bl)
while ~isempty(removed)
%% 最远插入启发式:将最小插入目标距离增量最大的元素找出来
% [fv,fviv,fvip,fvC]=farthestINS(removed,rfvc,L,a,b,s,dist,demands,cap );
[fv,fviv,fvip,fvC]=farthestINS(removed,rfvc,L,a,b,s,dist,demands,cap,chesu,bl );
removed(removed==fv)=[];
%% 根据插入点将元素插回到原始解中
[rfvc,iTD]=insert(fv,fviv,fvip,fvC,rfvc,dist);
end
[ rfvc,~ ] = deal_vehicles_customer( rfvc );
ReIfvc=rfvc;
[ RTD,~ ] = travel_distance( ReIfvc,dist );
end
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
3 仿真结果
![【VRP问题】基于遗传算法求解带时间窗的外卖配送车辆路径规划问题含Matlab源码_移出_02](https://s2.51cto.com/images/202205/542775438298ed8771232787b3b965ec298dd6.gif)
![【VRP问题】基于遗传算法求解带时间窗的外卖配送车辆路径规划问题含Matlab源码_移出_04](https://s2.51cto.com/images/202205/a125b2f056ca485a9be6355e3b0c6b91ec6397.gif)
4 参考文献
[1]赵家儒, 谭代伦. 改进遗传算法求解带时间窗的外卖配送车辆路径规划[J]. 绵阳师范学院学报, 2022, 41(2):9.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。