Branch-price-and-cut for the MCGRPTW文章阅读 →

1. 文章总览

本文是第一篇将MCGRP问题与时间窗问题统一建模的文章,作者通过将原问题 转化为在有向图上的VRPTW问题,之后使用了Branch-price-and-cut方法来求解。

2. 问题建模

2.1 原问题建模

给定$G(V,A,E)$

为简便起见,我们使用$link(i,j)$表示图中的连接元素,即$link = E \cup A$, 对每一条link,我们有两类特征

  1. 成本特征, 遍历成本$c_{i,j}$
  2. 时间特征,遍历时间$t_{i,j}$, 服务时间$s_{i,j}$

对于每一个任务,我们有两个特征

  1. 需求$d_{i,j}$
  2. 时间窗$[a_{i,j},b_{i,j}]$,必须要在该时间窗内抵达该任务

假设我们有一个路径序列$[0,w_1,…w_n,0], w_{i} \in V_R \cup A_R \cup E_R$, 我们定义,

2.2 问题转化

可以看到原问题在服务类别与服务约束上都有比较复杂,为此,考虑将问题进行转化,等价的建模为传统的VRPTW问题 基本思路就是将不同的服务类型抽象为节点,同时要保证对这些节点的有序访问等价于原问题的服务顺序。 为此,文中借鉴Baldacci, R. et al1的想法,进行问题的转化

$G(V,A,E) \Rightarrow \hat{G}(\hat{V},\hat{A})$,其中$V_R,A_R$对应一个点, $E_R$对应两个点,仓库点对应两个点$0_1,0_2$,其中$0_1$入度为$0$, $0_2$出度为$0$, $\hat{A}$保证了图的连通性。对于边任务$(i_1,i_2)$,我们使用两个点来表示,$i=i_1,i_2$; $i^{\prime}=i_2,i_1$, 因此$|\hat{V}|=|V_R|+|A_R|+2|E_R|+2$,因为我们将一个边任务分为了两个点, 所以我们要将边任务的相关服务特征信息平分在两个点上

2.2.1 cost的转化建模

一个trivial的弧构造方法就是在完全图的基础上删去不满足载重约束与时间窗约束的弧

弧构造规则


原始图


辅助图


原问题中的每一条路径(route)对应辅助图中的一条从$0_1 \rightarrow 0_2$的路径(path)

原问题中如果服务一个边任务,对应辅助图中连续的两个相关点的遍历, 其中第一个点表示边服务的顺序。


以figure. 1b为例,考虑原图上路径$[0,1,3,2,4,3,0]$,其中点$1$,边$(2,3)$,弧$(4,3)$ 为服务,对应辅助图上的服务序列$[0_1,1,(3,2),(2,3),(4,3),0_2]$,整个的服务成本为$24$

作者其实在这里并没有讲清楚这么设计的理由,为此做一下说明, 一个很朴素的想法是将边任务分解为两个点,每个点表示一种服务方式,但基于这种方式 构建的辅助图并不能保证连通性,这两个分解点之间是不连通的。 为此在要保证辅助图连通性的要求下,对分解出的两个点之间的关系进行建模, 这也是为什么文中采用了上述看起来比较奇怪的方式建模。

2.2.2 travel time的转化建模

travel time的建模方式与cost的建模方式是一致的,这里就不做过多的赘述, 但这里需要注意的是,在辅助图的场景下,相应点的时间窗大小需要做调整, 核心思路是在辅助图上的遍历过程所产生的相关信息能够与原图上的遍历过程匹配

边任务时间窗转化


弧任务时间窗转化(1)


弧任务时间窗转化(2)


这里作者并没有讲清楚时间窗的转换思路,为此这里需要进一步阐述一下

3. 求解思路

这里作者使用了整数规划的技术来求解问题,这一部分并不是很熟悉,所以暂时不阐述, 待以后补充

4. 算例说明

文章使用了三类测试算例

  1. BHW, 大规模MCGRP算例
  2. CARPTW,有时间窗约束的CARP算例
  3. MCGRPTW,基于前两类算例生成

具体的生成规则在文章中有介绍,生成规则比较简单,这里就不赘述。 第2类和第3类测试算例作者并没有公开,如果有需要,可以邮件联系作者


5. 文章思考

  1. Exact methods based on node-routing formulations for undirected arc-routing problems. Networks, 47 (1), 52–60 .