MATLAB模拟退火算法求解带/不带时间窗和同时取送货的车辆调度问题(VRPSPDTW)代码实例

带时间窗和同时取送货的车辆路径问题(VRPSPDTW)
作者:麦哥

带时间窗和同时取送货的车辆路径问题(Vehicle Routing Problem with Simultaneous Pickup and Delivery and Time Windows,VRPSPDTW)是指一组具有相同类型的车辆从配送中心出发,对其确定的客户集进行服务,完成服务后返回配送中心。每个客户的需求量和希望得到服务的时间窗是已知的,车辆在配送中心装好客户需要的货物在客户允许的时间窗内将货物送达,同时按取货要求从客手中将货物取回配送中心,每个客户仅由一辆车访问一次,问题是如何给每辆车确定其行驶路线,使车辆在行驶过程中满足车辆装载能力和行驶距离等限制条件下,以最少的车辆数、最低的行驶成本满足所有的客户需求。

其示意图如下图所示:
在这里插入图片描述

VRPSPDTW是在VRPTW基础上加上取送货作业,按照取送货时各客户点间的关系可细分为多种类型,如取货作业一定要在所有送货作收完成后才能进行——即先送后取;各个客户点在进行送货服务的时候又可以顺便完成取货任务,但有可能在该客户点取到的货物将送到另一个客户点,即前点取后点送;各个客户点可以在取货的同时也送货,但是取到的货物带回配送中心,即同时取送。
本文研究的问题类型属于同时取送型,车辆装载客户所需要的货物从配送中心出发,沿途进行送货,同时逐个取回客户所提供的货物,所有取回的货物都由车辆带回配送中心,每个客户仅能访问一次且必须访问一次。此外,在添加了时间窗约束的情况下,又可以根据客户对时间要求的严格程度,把VRPSPDTW分为带硬时间窗和同时取送货的车辆路径问题(VRPSPDHTW)和带软时间窗和同时取送货的车辆路径问题(VRPSPDSTW),本文研究在访问客户时允许偏离时间窗,但必须给予相应的惩罚,并以最小的时间窗偏离作为优化目标之一。此外,假设配送的物品都是性质相容,可以一起装载运输。

2 VRPSPDSTW数学模型
在这里插入图片描述在这里插入图片描述在这里插入图片描述

变量解释:
在这里插入图片描述

3 求解vRpsposTW的模拟退火算法设计
一、模拟退火算法的诞生
在众多科学领域,组合优化问题广泛存在,其中不乏 NP 完全问题(Nondeterministic polynomial-time complete problem),典型的如做决定版的旅行商问题(Decision version of the traveling salesman problem, TSP)。目前为止,所有已知的解决 NP 完全问题的算法的时间复杂度皆大于多项式时间。为处理这类问题,人们提出多种折衷的算法,包括近似算法(Approximation algorithm)、随机化算法(Randomized algorithm)、启发式算法(Heuristic algorithm)等,以求在可接受的时间内得到可接受的解。模拟退火算法即是近似算法、随机化算法中的一例。
美国物理学家 N. Metropolis 等人在 1953 年发表的《Equation of State Calculations by Fast Computing Machines》一文中,使用蒙特卡罗模拟法计算多分子系统中分子的能量分布。1983 年,物理学家 S. Kirkpatrick、C. D. Gelatt 和 M. P. Vecchi 在《Science》上发表了《Optimization by Simulated Annealing》。文章摘要中写道:「在统计力学(在有限温度下的热平衡中具有多个自由度的系统的行为)和多变量或组合优化问题(寻找给定多参数函数的最小值)之间,存在深刻且有用的联系。对固体退火的细节类比提供了一个优化复杂庞大系统的框架。这种与统计力学的联系带来了新信息,提供了一个研究传统优化问题和方法的全新视角。」文中指出 Metropolis 的程序可以被用在寻找更优解中,因为物理系统的能量和一些组合优化(Combinatorial optimization)问题中的成本函数相类似,而原子的随机微小移位可类比为优化问题中解的局部变动。由此,Kirkpatrick 等人以 Metropolis 的方法为基础发展出一套随机化算法,是为模拟退火算法。
二、由固体退火到模拟退火:实现形式
模拟退火算法来源于固体退火原理,将固体加温至充分高,再使其以足够慢的速度冷却,用原子或晶格空位的移动来释放内部残留应力,通过这些原子排列重组的过程来消除材料中的差排。加温时,固体内部粒子随温度升高变为无序状,内能增大,而缓慢冷却时粒子趋于有序,在每个温度都达到平衡态,按照物理规律,最终在常温时达到基态,内能减为最小。
常规的模拟退火算法类比这一过程进行实现,包括以下步骤:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

实例问题描述:现有一配送中心向14个客户点配送牛奶,并取回奶桶。配总中心和客户点坐标及每个客户点的服务时间如下所示。每个配送车辆的派遣费用为200元,配送车每公里油费为0.7元,车辆最大容量为70桶,车辆行驶平均速度为100km/h,车辆在早上4点从配送中心统一出发,最晚返回配送中心的时间窗约束为早上4时至9时。请找到合适的配送方案,即求出最佳所用配送车辆数目和对应的配送路线,使得在满足车容量约束和时间窗约束下配送成本最低。
表1 配送中心和客户点信息表
编号 坐标X 坐标Y 服务时间(分钟) 送货量 集货量
0 100 80 0 0 0
1 1 40 15 18 24
2 4 60 20 18 16
3 6 110 15 25 23
4 50 130 25 19 18
5 70 30 15 22 19
6 90 5 20 19 21
7 120 14 15 18 20
8 150 35 20 16 21
9 160 190 15 14 15
10 127 170 20 19 24
11 140 149 20 24 15
12 63 157 15 20 22
13 79 30 15 23 18
14 73 145 20 20 19

0号点为配送中心,其余14个点为客户点
每辆车的车容量:70
车辆行驶平均速度:100km/h
车场时间窗:每天早上4时至9时

在这里插入图片描述

配送中心和客户点坐标位置图

下面进行程序演示!

MATLAB模拟退火算法求解带/不带时间窗和同时取送货的车辆调度问题(VRPSPDTW)代码实例

运行结果:
在这里插入图片描述

优化结束!

优化的车辆使用数目为:5
车辆1的配送路径为:0 ->1 -> 2 -> 3 -> 0
车辆2的配送路径为:0 ->10 -> 9 -> 11 -> 0
车辆3的配送路径为:0 ->14 -> 12 -> 4 -> 0
车辆4的配送路径为:0 ->8 -> 7 -> 6 -> 0
车辆5的配送路径为:0 ->13 -> 5 -> 0
此方案下各项成本计算如下:
车辆派遣成本为:1000
油耗成本为:736.911
车场时间惩罚成本为:0
车辆容量惩罚成本为:0

点击查看麦哥个人简介及代码获取方式

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值