论文作者:Qie He,Stefan Irnich,Yongjia Song
论文发表日期:2018.3
物流和运输服务公司的两个关键但经常相互冲突的目标是提高客户满意度并降低运输成本。特别是考虑到具有优选服务时间的客户请求网络,同时找到符合所有操作限制并最大化减少运输和客户不便成本的车辆路线和服务时间表是非常具有挑战性的。在本文中,我们介绍了车辆的路径选择时间窗和凸节点成本(vrpt - cnc)问题,其中我们将每个客户的不便成本建模为该客户服务启动时间的凸函数。VRPTW-CNC结合并扩展了标准车辆路径问题与时间窗口以及先前关于固定路径上的最佳服务调度问题的结果。我们提出了一种分支切割和价格算法来解决具有一般凸不便成本函数的VRPTW-CNC。为了解决定价问题,我们的标签算法仅生成可能导致路线上的最佳调度时间的标签,这显着提高了定价的有效性。
1.介绍
本文研究了具有时间窗的车辆路径问题的一个扩展,最大限度地减少了路线成本和客户不便成本的总和。后者的不便成本由一般的凸函数定义,每个客户一个凸函数,表示客户对特定访问时间的偏好。我们将这个问题称为具有时间窗和凸节点成本的车辆路径问题(VRPTW-CNC)
VRPTW:让
![]()
是客户集合。每个客户
![]()
有一个给定的需求
![]()
和一个服务时间窗
![]()
。一个由K辆车组成的车队,每辆车的容量为Q,存放在仓库中。分别用0和n+1表示起始和结束。为了简单起见,我们假设
![]()
时间窗
![]()
和
![]()
已经给出。这个VRPTW被定义在有向图
![]()
,节点集
![]()
。弧集A。每一个弧
![]()
有一个相关联的行驶时间
![]()
和路线成本
![]()
。一个可行的路径
![]()
在VRPTW问题中是一个 0到n+1的基本路径。在图G中m>1中并且满足时间窗和容量约束。如果存在调度时间
![]()
这个路径P是时间窗可行的。
这里
![]()
代表整数区间
![]()
对于
![]()
。这个路线P考虑车辆的容量
![]()
。这个路线的成本
![]()
。这个VRPTW要求一组K条路线,这些路线只访问每个客户一次,并最小化路线成本。
扩展VRPTW-CNC问题,现在每个节点
![]()
有一个不方便成本函数
![]()
。这个路线
![]()
的成本成为路径成本
![]()
的总和并且解决以下(m + 1)维优化问题所带来的最小不便成本。
我们将公式(2)作为一个服务调度问题。VRPTW-CNC问题将在VRPTW中的某条路径P的路径成本由
![]()
扩展到
![]()
,这里
![]()
是在对路径P进行优化后客户的不便成本。VRPTW-CNC是一个三级优化问题,具有相互依赖的
聚类,
路线和
调度优化。
BCP(分支切割定价算法)的新颖之处在于列生成算法:我们展示了基于动态规划的标记算法可以同时解决路线和调度优化的两个较低层次,而第一层次的聚类是衡量算法的标准。实际上,聚类依赖于VRPTW-CNC的广泛的基于路径的公式作为一组分区公式。让
![]()
是VRPTW所有可行路径的集合,让
![]()
表明客户
![]()
是否在路线
![]()
被服务。这个集合划分公式使用变量
![]()
表示路径
![]()
是否被选择。
(3a)是最小化总的路线成本和客户的不变成本,(3b)确保所有的客户都被服务一次,(3c)是车辆的限制。
1.1 文献综述
与本文相关的研究有三个方面:(1)路径成本依赖于调度时间;(2)凸节点成本的应用;(3) VRPTW的BCP算法。我们分别回顾这些领域。略
1.2 论文的贡献和结构
略
2 固定路线的服务调度问题
在本节中,我们将简要回顾Dumas(1990)的工作,他们已经展示了如何为固定路径确定最佳服务计划及其成本。为了简单起见,我们假设路径为P =(0,1,2,…,m)。对于任意
![]()
,我们定义从路径P的顶点i到顶点j的(累积的)行进时间为
![]()
。 Dumas(1990)提出的方法首先计算这个函数
![]()
在
![]()
中的最小值,在(2)中松弛掉(1b)。如果
![]()
两个连续的最小值
![]()
和
![]()
是冲突的。然后,通过聚合解决所有冲突。
具体说明,两个任意连续位置i-1和i的聚合通过引入等式来完成
![]()
。对于这个聚合
![]()
,得到的优化问题变为
![]()
这也是一个区间内的一维凸优化问题。假设这个聚合已经生成
![]()
个分离的整数区间
![]()
在
![]()
对于
![]()
使得
![]()
。每一个整数的间隔
![]()
被称为一个块,并且将块串联起来
![]()
被称为在[0:m]的一块结构。
每个块
![]()
降低
![]()
维的子问题,最小化
![]()
在
![]()
通过引入等式
![]()
转化为以下的一维凸优化问题,用单变量表示
最小值在
![]()
处获得。在Dumas(1990)年提出的算法的每次迭代中,一个连续的聚类块
![]()
和
![]()
如果冲突被执行,也就是说,它们的最小值
![]()
和
![]()
满足
![]()
。总之,Dumas(1990)提出的算法从初始的结构块组织开始
![]()
(我们使用速记的方法[i] for [i:i]={i})通过聚合迭代的解决连续块
![]()
和
![]()
之间的冲突,并将两者替换为一个块
![]()
,直到没有更多的冲突。我们称最后的块结构为路径P的最优块结构。由于集合步骤的数量受m的限制,这个过程涉及到求解m+1和2m+1之间的一维凸优化问题。
例子1
我们思考下面的路径P=(0,1,2,3,4,5,6)具有相应的时间窗口和与七个节点
![]()
相关联的不变成本函数
![]()
和行驶时间
Dumas(1990)的算法从块结构开始
![]()
,每个节点的最佳到达时间为
唯一的冲突
![]()
存在在节点i=3和i=6。聚合[2]和[3]到[2:3]产生一个新的不方便成本函数
![]()
,时间窗口为
![]()
。函数
![]()
的最小值在块[2:3]上在
![]()
。节点6和节点3的处理方式一样。两个冲突通过聚合解决后,生成新的图像。
最优的服务开始时间为
一个新的冲突在
![]()
和
![]()
,需要再次处理这个问题。聚合[4]和[5:6]到[4:6],对于路径P生成一个最优的
块结构[0][1][2:3]|[4:6]。最后,对于路径P最优服务时间
再引入三个等式约束
这个最优的调度给出通过
![]()
。
可以轻松显示服务调度问题的以下附加结果:
- 如果冲突是通过按索引递增的顺序逐个经过顶点来解决的,需要处理的冲突时间复杂度为
![]()
。
- 当不便的成本函数是凸函数的时候,在一条路径中这个块结构是唯一的。为了简单期间,论文的剩余部分默认它是凸函数。
- 对于不便成本函数是二次凸函数,这个聚合和优化步骤能在时间复杂度为
![]()
,所以算法最坏情况的运行时间为O(m)。我们对VRPTW-CNC的计算分析将使用二次函数。
3. 固定路径的扩展
在基于动态规划的标记算法中,路径是一个顶点一个顶点地扩展的。假设
![]()
是一条路径并且向节点m+1进行扩展。在路径P上最后一个节点m的最早可能服务时间用
![]()
表示,不受任何扩展的影响。使用尽可能早的计划来计算
![]()
是直截了当的。然而,节点m的最新可能服务时间可能因为扩展而减小(注意是服务时间不是最早服务时间),因为它是的上界通过
![]()
所限制。其他和进一步的扩展可以以不同的方式减少m处最新可能的计划时间。
这个观察的结果如下所示:当涉及不同路径之间的比较时(优势规则),只有当顶点m的调度时间的全时窗口
![]()
可用于路径P =(0,1,...,m)时才知道其最小成本
![]()
是不充分的进行优势规则的比较的。我们还必须能够描述最佳的服务时间并且它的成本对于任何有限制的窗口
![]()
,任何在最后一个节点m的最佳服务时间
![]()
最新可能的调度调度时间,做为一个潜在的扩展结果。我们想要确定怎样的最优块结构,调度,和它的成本取决于x的值。我们表示后来的在路径P不便成本函数为
![]()
。特别的,
![]()
如下定义:
这与标准VRPTW问题的优势度检查有很大的不同,标准的VRPTW问题对于给定路径,成本和计划时间都是固定的。也就是说尽早的服务每位用户(因为成本和时间没有关系,不存在不便成本)
3.1最后一个顶点的最新可能计划时间的变化
本节为一个固定路径提供结果
![]()
并且x的最新调度时间位于最后一个节点m上。我们首先介绍一些与路径的最优块结构相关的符号。让
![]()
表示通过路径
![]()
最优块结构,假设在最后一个节点m的服务时间窗为
![]()
。我们假设对于一些
![]()
。
命题1 给出一条路径
- 对于每个
![]()
,存在一个块
![]()
的下标索引
![]()
使得这个块结构是
- r函数:
![]()
不会随着x的增加而减少。
- 在
![]()
所有可能的最优块结构,
![]()
:
![]()
这里的
![]()
。
- 如果一个块结构
![]()
对于
![]()
是最优解。那么x所在的
![]()
区间中能被如下定义:
- 如果p<q 和k=p,有
- 如果p<q和p<k<q,
- 如果p<q和k=q,
- 如果p=q,
这个时间间隔
![]()
对节点m的时间窗口进行划分,也就是说
![]()
其中
![]()
5.路径不便成本函数的形式如下
函数
![]()
是一个关于x的单调非递增函数
例子2
现在考虑例子1中的一条子路径
![]()
。例子1显示P有最优块结构
![]()
如下图所示。
最优的服务时间是
![]()
,我们现在降低在节点5时间窗
![]()
的上界。只要
![]()
,不可能于节点4产生冲突。 因此
![]()
的结果是将最佳服务时间分配给
![]()
的前4个块并且为节点5
![]()
选择一个最好的值
![]()
,这里是x。前4个块的评估结果为
![]()
补充
![]()
使得
![]()
,
![]()
。
我们现在解决第一个冲突
![]()
。在这种情况下,块
![]()
和块
![]()
必须聚合成[4:5]。由此产生的不便成本函数在此区块为
![]()
最优解在
![]()
在区间
![]()
(这里是考虑
![]()
的情况)。这里,通过考虑下一个(第二个)冲突再次计算间隔的下限。得到的函数
![]()
是
最后,当
![]()
,块
![]()
必须聚合到[3:5]。类似的计算表明,在区间
![]()
路径的不便成本为
![]()
。这里时间窗的下界12不是因为冲突而来,是节点5的最早服务开始时间为
![]()
。这里整个函数
![]()
被了解在所有的可能
![]()
。函数图像如下所示。
总之,每一条路径
![]()
有
![]()
个可能的块结构,其中p和q如命题1中所定义的。每一个块结构有一个时间间隔为
![]()
与之关联。在区间
![]()
中所有可能的调度时间在路径P的最后一个节点m是被分成q-p+1个段,每一个最优的块结构对应其中的一个。
3.2 扩展路径的最优块结构
我们考虑一条路径
![]()
最优块结构
![]()
。我们现在扩展路线P到任意一个节点m+1。我们假设
![]()
成立,否则,
![]()
是不可行的,因为节点m+1存在时间窗口的冲突。不是在
![]()
中从头运行算法,我们描述如何在
![]()
中生成新的时间间隔
![]()
从P中时间间隔
![]()
。这是我们提出的BCP算法有效扩展标签的关键,我们将在第四部分介绍这种方法。
首先,给出的命题2显示了在
![]()
中的第一个时间间隔
![]()
能被获取通过简单的观察
![]()
中的
![]()
之一的区间包含
![]()
。
命题2
给出一个路径
![]()
具有最优的块结构
![]()
和在
![]()
时间间隔
![]()
,假设
![]()
关于时间窗约束时可行的。然后这个索引
![]()
通过下面给出
- 时间段
![]()
中包含
![]()
条件为
![]()
的索引k(在平局的情况下,如果
![]()
对应于共享的边界,这个索引k选择较大的那个)
- q+1的值(在这个例子中,
![]()
仅仅有一个最优的块结构
![]()
)
证明:注意在2中任何可行的服务时间在节点
![]()
不能制造在
![]()
块的冲突,使得
![]()
对于任意的
![]()
。在1中,时间
![]()
最新可能的调度时间在节点m,如果在节点
![]()
的调度时间被固定为
![]()
(我们考虑顶点m处的最新可能的调度时间,因为路径不便成本函数是单调不增加的)。因此,包含
![]()
的时间段意味着块
![]()
将被聚合成一个块
![]()
我们这里有
我们现在描述如何去获得最后的时间段
![]()
并且关联扩展路径
![]()
的最优块结构,也就是说,对应最后一个节点
![]()
最新可能调度时间
![]()
。如果
![]()
块结构
![]()
对于
![]()
和
![]()
,因为不会出现冲突。否则
![]()
在
![]()
和
![]()
必须要聚合。如果
![]()
,这最优的块结构对于
![]()
和
![]()
是简单的
![]()
。如果
![]()
聚合块
![]()
的最优解
![]()
可能会和
![]()
块造成另一种冲突,因此在聚合之后块最小值不增加。也就是说
![]()
在这个例子中,聚合块
![]()
是必需的,并且必须重复该过程。该过程以最佳块
![]()
结构终止,这里k满足下面的条件:
![]()
和
![]()
所有上述观察结果总结在以下命题中
命题3
给出一个路径
![]()
带有最优的块结构
![]()
,假设从
![]()
扩展
![]()
对于时间窗的约束是可行的。然后最优块结构
![]()
通过两种例子中的一个获得:
![]()
条件
例子3
延续例子1和例子2,对于所有P的子路径(0,1,2,3,4,5,6),下图展示了最优的块结构(分别为固定路径部分
![]()
和
![]()
,后一部分可能被聚合)。对于每种可能的聚合部分
![]()
,该图还显示了生成的聚合块
![]()
其中
![]()
,相关的
![]()
的定义和间隔
![]()
。
4 分支切割定价算法
为了求解集合划分公式(3)的线性规划松驰性,我们使用列生成算法(Desaulniers,2005)。从一个可行路径的子集开始
![]()
。公式(3)的线性松弛定义
![]()
作为受限的主问题(RMP)。这个列生成算法在对RMP再优化和解决定价问题之间交替进行。定价就是在RMP中添加负降低成本的变量(如果存在的话),另外需要求解这个线性松弛问题的最优解。为了简单期间,我们假设定价问题中只存在基本的路径,除非另有说明。我们方法的核心是基于动态规划的标签算法,用于解决列生成的定价问题。在4.2节中,我们将解释如何使用有效的不等式和分支规则来强化RMP边界
4.1 列生成
在RMP问题中让
![]()
是(3b)分区问题的对偶变量并且让
![]()
是(3c)车辆数量的对偶变量。为了紧凑,我们定义
![]()
。VRPTW-CNC的基本SPPRC定价问题是在定义实例的有向图(V,A)上定义的。我们定义弧的检验成本
![]()
。回想一下路径的成本
![]()
这里路线P的检验数
![]()
,
![]()
和
![]()
分别表示节点和弧的集合。
4.1.1 定义标签
一个标签是路径
![]()
的表示,最终可能称为一条负检验数的0-(n+1)的路径。一个标签有如下的属性:
![]()
:累计降低的路线成本(路线的检验数?)
![]()
:统计路径上节点需求的总和
![]()
:对于每一个
![]()
的客户,一个指示符标记客户客户n是否能被在P路径的任意扩展中访问。(这里暂且理解为节点集,路径P中存在的)
因此,标签使用下面的标签隐式的存储一条路径的不便成本
![]()
:
![]()
:
![]()
的第一个块的索引,可能是聚集形成的块。
![]()
:
![]()
最后一个块的索引。
![]()
:不便函数
![]()
的常数部分,不依赖于x,
![]()
。
![]()
:对于块
![]()
,
![]()
,最优定义为
![]()
:对于
![]()
时间间隔
![]()
:对于块从
![]()
到
![]()
累计的最优值
![]()
,公式4的第二部分
![]()
:公式4的第三部分
4.1.2资源扩展函数
初始化开始节点0有属性
![]()
,
![]()
的最优解对应于
![]()
,并且聚合不便成本函数
![]()
。下一步,我们将展示怎样从一个条路径
![]()
扩展到另一条路径
![]()
。
通过
![]()
和命题2 我们可以直接计算
以下步骤的先决条件是计算所有新移位的最优值(我们为所有的
![]()
,因为新的范围
![]()
到
![]()
尚不得而知),这是由于添加了
![]()
而得到的。
![]()
值是位于公式(5)左边的值
下面为了评估条件(5),我们计算聚合不便成本函数
![]()
和他们的最优(也就是公式(5)右边的值
![]()
)更确切的说,该过程以
![]()
开始,在每次迭代中,测试命题3各个条件(5),然后不断的缩小k的值。
在开始时,对于
![]()
,这个结果函数时不便成本函数
![]()
的最优值
![]()
.
然后,测试新块的条件。如果可行,我们会获得根据
![]()
获得一个新的块
![]()
。否则的话我们根据条件5的值不断缩小k。也就是命题3的第二部分。如果这么做,最后的块为
![]()
,否则k会一直重复的缩小。关于计算复杂性,回想一下P的标签已经存储了函数
![]()
,以便新的聚合函数
![]()
来自具有两个一维凸函数的单个聚合步骤。汇总下来,我们得出
![]()
然后计算新的聚合不便函数成本
![]()
对于所有的
缺少的部分现在很容易计算。首先让
![]()
关联的范围是
![]()
在(6a)中给出。其次,对于
![]()
。
这里最后一项的值
![]()
借助于存储在P的标签内的函数
![]()
来计算。第三,标准VRPTW属性通过更新
生成的标签是可行的,当且仅当
4.1.3 优势
让
![]()
和
![]()
是两条结束在同一节点m不同的路径。在VRPTW中,
![]()
优于
![]()
如果满足
![]()
(路径的检验数)和下面3个条件(到达时间,路线载重):
通过和VRPTW-CNC的对比,必须考虑在最后一个顶点m处的最新可能的调度时间x与成本之间的折衷。结果是存在三种定义有效优势规则的可能性
1.完全优势
![]()
完全优于
![]()
如果满足
在这个例子中,
![]()
能被删除
2.在任何实数间隔上的优势
![]()
一定程度上优于
![]()
在一个实数区间
![]()
,如果满足(7)的前提下,满足
4.1.4 改进
4.2 切割平面,分支和节点的选择
5 计算结果
5.1
不便成本的变化因素5.2 计算性能
5.3 综合性能
6 结论