论文作者:Alain Chabrier

论文发表日期:2005

摘要

车辆路径问题的列生成模型通常包含一个基本的最短路径子问题。由于该问题已知算法的最坏情况复杂度过高,其基本路径约束通常被松弛。实际上,由于每个客户必须被访问一次,所以有和没有基本路径约束的两个问题都有相同的最优整数解。在这篇文章中,我们提出了一个理论和几个实践改进算法的基本路径。我们获取最好的下界和修建搜索树,这些改进允许我们寻找精确的解决方案。

1 介绍

文本研究VRPTW问题,分为两类,一类是启发式算法,快速寻找可行解,通常基于本地搜索技术有时与约束规划的混合合作。令一方面精确算法聚焦于发现最优解。列生成技术就是精确算法的一部分。通过 Dantzig–Wolfe分解将原始的线性规划问题分解为一个线性RMP和一个定价的子问题。这个主问题变成一个二元变量的分区问题,定价子问题负责生成新的有希望列约束最短路径问题。子问题分解的版本必须可以解决ESPRCTW(资源约束和时间窗的基本最短路径问题)。路径中循环通常被松弛,通过SPRCTW(资源约束和时间窗的最短路径)代替。在这种情况下,可以看出,该列生成模型的最优整数解在放宽循环约束的情况下,只包含基本路径。松弛掉循环约束的最主要的原因是可以使用更强大的算法来解决SPRCTW而不是解决ESPRCTW问题。事实上,伪多项式算法是可用的SPRCTW,而相反,它已表明,ESPRCTW是NP-hard[14]。在本文中,我们提出了ESPRCTW的几个优点,如在放宽限制的主问题下获得了更好的下界质量,并提出了几种技术来降低考虑循环约束对效率的影响。

2 VRP分解模型

车辆k最大载重
客户i的需求
时间窗
弧的集合
节点i到节点j的距离

2.1 MIP模型

弧(i,j)是否在车辆k上
表示在车k到达节点i的到达时间
MIP模型

2.2 Dantzig–Wolfe 分解

对于给定的路线k考虑矩阵

对应于约束(2)-(5)和(7)。约束(6)单独分出来。由
定义的多面体允许车辆k的有效路径的集合
作为极值点。我们可以把其中一个点写成这些路径的线性组合。
=1如果弧
属于极值点
对于每个

提示:车辆k和路线p不是一个概念

定义

为使用车辆k通过路线p的成本。
表示节点i通过车辆k经过路径p访问的次数。

如果我们将这些表达式替换到原始模型,我们将获得分解的模型:

Dantzig–Wolfe 分解后的模型

容量,子消除和时间窗口约束被整体移动到定义极值点路径的有效性的子问题。

我们在这里认识问题包括从仓库到仓库找到基本路径并满足容量约束。

2.3 车辆的类型相同

可以对模型进行进一步的压缩

新的Dantzig–Wolfe 分解模型

该分解模型包含大量可能的路径变量。如果N是节点数,理论路径变量的数量可以增长到N!。对于10个节点的简单情况,这对应于3 628 800个路径。 因此,我们使用列生成技术,其中变量是动态添加的。

3 列生成

在本节中,我们将讨论分解模型可能的各种列生成过程。特别是,我们强调不同类型的子问题是可能的基本事实。

完整性约束条件变量是松弛的,所求解的模型只受限于变量的有限子集。然后,正如修订后的单纯形法一样,我们通过检查它们的检验数来寻找进入RMP模型的新可能变量。此操作称为定价新变量。当没有更多新列可以定价时,松弛的解决方案对于松弛的问题是最佳的。如果这个解不包含分式变量,它也是整数问题的最优解。出于若干实际原因,集合分区约束(11)通常仅改变为集合覆盖约束。对原始问题的任何解决方案也是解决这个新的松弛问题的方法。此外,很容易看出,新问题的最优整数解每个节点只包含一条路线,因此也是原问题的最优解。

3.1 定价方案

分别是关于约束(11)和(12)的对偶变量。检验数为

因此,子问题包括找到关于以下成本的最短基本路径并且遵守容量约束。

3.2 各种可能的子问题

有效路线是从仓库到仓库的基本路径,满足某些资源的约束(路径长度,容量,时间)。

让p是一条路径

资源可以推广到由l索引的L资源。
表示节点i处的资源l的累积量。距离函数
定义i和j之间资源l的累积。
为每对资源和节点定义。我们将使用两个连续节点i和j之间的累积资源的增加必须满足三角不等式的事实。
路径的成本等于资源的累积。检验数的获得通过上节提到的每个集合覆盖模型约束的路径成本和对偶变量
获得。因为只有负的降低成本的路线可以进入受限制的主要问题,所以应该将其最小化或限制为负的。

根据该模型,路线不应包含循环。然而,文献中提出的大多数算法放宽了这个约束以简化子问题。实际上,即使松弛受限主要问题的解决方案可能包含具有非零小数值的非基本路线,最佳整数解也不包含这样的路线。

定理1 当资源的累积尊重三角不等式并且节点之间的成本累积严格为正时,具有非基本路径的主问题的最优整数解包含仅基本路径。

3.3 标签算法

标记算法将标签与部分路径相关联,并创建扩展路径的新标签。当不再生成标签时,最佳路径由末端节点处的标签给出,并且有最好的检验数。在节点i处,一个部分路径p关联一个标签

。一些路径会在优势规则中被淘汰。我们说部分路径
在节点i结束优于其它的路径
,如果满足下面的条件:

如果

的扩展为
的扩展
一定优于

该优势规则不能直接用于搜索基本最短路径。最后一个问题要复杂得多。本文的核心结果是为基本最短路径提出了该算法的实用,有效的修改。

3.4 分支计划

我们使用基于改编的Ryan-Fosterrules的常用分支方案。我们寻找两个共享同一对节点 i 和 j 的分数路线 其中一个路线使用弧线 (i, j) 而另一个不使用。可以证明,总能找到这样的路线。在每个分支中,可以容易地修改最短路径子问题而不破坏问题的结构(只需从底层图中删除弧即可)。

4 界限比较

提出两种方法增加松弛的质量。一种为添加切割平面松弛;第二个是基于基本的最短路径子问题。使用SPRCTW,主问题表示为MP。使用ESPRCTW,主问题表示为EMP。当我们从MP中删除完整性约束时,我们将其表示为RMP。当我们从EMP中删除完整性约束时,我们将其表示为REMP。

4.1 简单的例子

只有两个客户节点i,j。

而且,让我们假设容量和时间窗口很大。EMP的最佳松弛解决方案显然是由独特的路线构成的
允许循环时,可以生成任何的合法路径
,这里
表示n次。成本为
。可以是主值为1 / n的解决方案的一部分,提供一个界限LB=200/n+2-1/n,n仅仅被车辆的容量所限制。

4.2 使用切割

改进从松弛问题中获得的解决方案的最广泛使用的方法是添加切割平面,例如k路径切割,当k = 1时也称为子切割。让S是一组节点的集合,

是S集合中出弧的集合。
是在
中路径p中弧的数量。可以证明该组的节点不能被少于
车辆覆盖。因此是可能的,对于任意的
添加新的约束,称为k-path 切割。关于变量
对应于包含该集合中至少一个节点的路线。
很明显,
因此,子部分切割(即,k = 1的切割)易于使用,因为不必发现先前的结果来证明其有效性。这个子路径切割应用于我们先前的例子,通过设置
提供1/n的流量。为此集合添加剪切将改善下限。然而,MP加上子路线切割获取的范围不等于EMP获取的范围。让我们用另一个例子说明这个想法。现在我们有3个节点i,j,k。可以使用值1/2来获取以下一组路径。

即使这种解决方案没有违反任何减少的次数,它也包含一个循环,因此不会成为EMP的解决方案。最后,我们必须记住,即使ESP更难解决,当我们使用切割平面时,我们还必须使用其他一些复杂的算法来隔离违规切割以增加松弛。

4.3 使用路径

MP和EMP的约束相同并且列的集合彼此包含在一起,很明显MP是EMP的松弛,并且RMP是REMP的松弛。我们之前看到MP和RMP具有相同的整数解。 对于RMP和REMP来说,这样的好结果是不正确的,但松弛关系意味着用REMP获得的界限至少与用RMP获得的结果相同。因此,我们的想法是将ESPRCTW用于子问题。从理论上讲,这个问题要复杂得多,我们必须使用一种实现,在算法的最差实际效率和更好的边界质量之间提供良好的折衷。

5 基本最短路径

在这个部分,我们提出一些对基本路径问题标签算法的修改

1.部分路线已经存在的节点无法对当前的部分路线进行扩展

2通常的优势规则不能直接删除标签。

第一项意味着只有当部分路径尚未访问j时,以i结尾的部分路径才能延长到j。如果我们将部分路径p的节点集合表示为V(p),如果我们已经有j∈V(p),我们就不能将p延长到j。

第二项是主要困难,即使一些部分路径

优于另外一些部分路径
,某个节点
的延续可能会在以后有用。这里我们必须保留
因为
不能应用与优势规则证明相同的有希望的延长。实际上,一个容易修改的优势规则就是不要删除任何标签并保留所有标签。即使这种策略在理论上会导致最佳的基本路径,但在实践中它是难以处理的。这种实际困难似乎是为什么接受了放松SPRCTW的原因。我们的目标是提高优势规则。新的支配规则应该允许我们尽可能安全地删除部分路径,因为它们不是最优解的一部分,它必须让我们尽可能快地删除它们。

5.1 初步修改的优势规则

最初的优势规则不能确保

继续优于
,因为
会继续使用已经在
中访问过的节点,但是却不能添加到
。修改后的优势规则是部分路径
优于
前提是遵守先前条件(13)和(14),并且
的集合包括在集合
。显然,这个基本的新优势规则将允许创建许多标签。实际上,当两个部分路径使得它们的节点集合不包含在另一个中时,那么它们的扩展之间不会有任何优势。因此,我们对此规则进行了不同的改进,包括完整修改和启发式修改.

5.2 优势规则的确切改进

如果部分路径

不包含另一条路径
的某些节点,新的优势规则将始终保留其标签,与资源积累,成本和降低成本的价值无关。原因很简单,当通过
中的一个节点时,
的某些扩展的检验数可能变得有利。这个保留标签的充分规则显然不是必需的。通过估计可以通过考虑
的某些节点可以获得的检验数的预期改进,可以改进优势规则。

是两个在m节点结束部分路径。
是部分路径p访问的节点集。
(两者的节点集完全相同)原来的优势规则是可以处理这种情况的。

另请注意,在无法以任何方式将其附加到p2的情况下,我们可能不会考虑某些元素

。如果有一些资源l使得
,不可能扩展到n。

我们在这里使用三角不等式的性质。现在让我们考虑

时的不同近似值
(表示所有属于A但不属于B的元素的集合)

1.与

的改善有关:
的扩展,可能通过相同的方式创建一个扩展
(除了扩展n,因为
已经存在无法扩展)。i和j分别为n节点的上一个和下一个节点在
中。

(本人理解为需要将n插入到

中合适的位置(相当于
的节点集合暂时相同了),然后计算下面的c(i,n)+c(n,j)-c(i,j),如果不能不予进行考虑)

这里

是优于
当且仅当

通过删除成本部分(三角定理),消除

的充分条件是(
优于

2.与

的改善有关-最小化添加弧成本:这里,我们使用更好的近似成本部分并低估它使用
分别为可能的前驱和后置节点集合关于n。可以在每个节点n的算法初始化时计算这些量。因此充分条件为
可以使用(16),(17)来删除更多的标签。这个条件可以扩展到
。但是,在实践中,很难找到好的界限。我们将算法限制在以下情况

5.3算法的启发式改进(简单的启发式减少算法)

5.4 面向实施的改进

前一小节介绍了对基本最短路径的全球定价过程的一些算法改进。我们在这里介绍一些我们过去以高效的方式实现它的想法。

5.4.1 存放标签

当我们使用算法的略微修改和有限版本的许多连续运行时,可以在算法的预热中使用很多时间,即,在先前运行结束时已经存在的许多标签的重新创建中。 因此,我们使用标签存储作为增量工具。

此存储可以使用来自任何算法的标签填充,然后用于在运行之前使用实际标签填充新算法

5.5 其他改进

之前已经提出过几项其他改进措施:

  • 基于时间窗口的图缩减:我们从可能的弧线中删除那些由于时间窗口而无法实现的弧线。

  • 最少的路径数:正如[12]中提出的那样,当生成固定的最小数量的路径和标签时,我们停止执行算法。这种减少特别有趣,因为当没有找到路径时,我们知道这样的路径不存在,我们不必重新运行该算法的另一个版本。
  • 基于降低成本的图表缩减:我们还会根据检验数的原因减少初始图表。

6.2 分支

当没有更多新列可以定价时,松弛RMP是当前Branch-and-Price分支的下限。在分支定价根节点的情况下,我们获得完整问题的全局下界。当处理仅具有基本路径的子问题时,我们解决了更受约束的问题,并且获得的界限在理论上更好。在表1中,我们将系列R1和RC1上获得的界限与[11]中给出的界限进行了比较。 给出的两个比较是

在我们的下界LB和来自[11]的LB(1)之间,对应于仅禁止具有形式i-j-i的循环的子问题。

来自[11]的LB(2)和LB(1)之间。 LB(2)对应于LB(1),加上在Branch-and-Price根节点处添加了子路径和2路径切割。我们可以在这个表中看到,我们的下界确实比用非基本路径获得的下限更好。 平均而言,我们的下限与最优解之间的差距比LB(1)与最优解之间的差距小17%。 相同的计算将得到47%的LB(2)并且表明可以将切割平面的使用添加到我们的算法中。

白盒测试基本路径生成工具_基于基本最短路径列生成的车辆路径问题相关推荐

  1. html自动生成工具_关于STM32代码自动生成的工具的进度....

    前情提要:STM32代码自动生成工具_本想...但是...可是...所以 首先说一下那几天大家的反应,有的持观望态度,毕竟STM32CUBE很香:有的很激动,期待我快点出东西:还有的很淡定,知道我在挖 ...

  2. java生成iso9660工具_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...

    TableGo_20210212 v7.0.0 正式版发布,此次版本更新如下: 1.新增对DB2数据库的支持 2.新增按字段生成文件,支持把字段.JSON.XML数据转换成任何代码 3.新增大量新的自 ...

  3. mysql javabean 工具_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.9.0版)...

    TableGo_20200520 v6.9.0 正式版发布,此次版本更新如下: 1.新增对JDK9及以上版本Java环境的支持 2.生成JavaBean更名为生成数据模型并且提供了C#.C++.Gol ...

  4. c mysql实体类生成工具_【干货分享】C# 实体类生成工具

    前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...

  5. pandas基于日期信息(time or date)生成季度信息(quarter)实战:pandas基于日期信息列生成季度信息列、dt.quarter生成季度信息、dt.to_period生成季度信息

    pandas基于日期信息(time or date)生成季度信息(quarter)实战:pandas基于日期信息列生成季度信息列.dt.quarter生成季度信息.dt.to_period生成季度信息 ...

  6. 启动图一键生成工具_一键即运行!清华团队推出图深度学习工具包CogDL v0.1

    一行代码命令可以做什么? "一行命令可以实现'一条龙'运行实验." 访问 http://github.com/THUDM/cogdl 一键体验! 近年来,结构化数据的表示学习备受业 ...

  7. ubuntu生成密钥和证书_基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互...

    ubuntu生成密钥和证书 想象以下情况: 您需要从访问您的网站的用户那里获取一个密钥(在非对称情况下为用户的公共密钥 ),并希望浏览器记住私有部分,而不会因冗长的导入过程而困扰用户. 老实说,实际上 ...

  8. html自动生成工具_「写论文神器」一个好用的论文自动生成工具,内含30w 文献数据...

    最近这不是快到考试周了嘛,毕竟其他东西分量再重,也重不过考试.但是文章发出去才发现事情好像不是那么简单,好像和考试相比,眼下更紧迫的应该是作业才对.比如,你们亲爱的小编我已经连续五天凌晨三点睡了,说实 ...

  9. xml工具生成工具_研究当前的XML工具

    xml工具生成工具 常用缩略语 API:应用程序编程接口 DITA:达尔文信息键入体系结构 DTD:文档类型定义 HTML:超文本标记语言 IDE:集成开发环境 URL:统一资源定位符 W3C:万维网 ...

最新文章

  1. spark-submit --files 动态加载外部资源文件
  2. c语言编写弹窗提示是否确认退出_世人觉得C语言和C++太难?没前途?过来人告诉你真相...
  3. linux操作系统上课,Linux操作系统使用的文件系统是
  4. arduino 土壤温湿度传感器_智慧农业温室大棚环境监测传感器
  5. Run-time Settings--General--Run Logic
  6. 240多个jQuery常用到的插件
  7. 时间计算题100道_2019四校及分校自招开放日情况汇总(含时间安排、考试内容难度、到场人数等)...
  8. Windows Workflow Foundation 4.0
  9. 微软云架构服务器,微软云存储架构(Azure Cloud Storage)
  10. 信息安全工程师考试大纲(含pdf)
  11. 运营Tumblr的几个建议-教你成为tumblr达人
  12. php中斜杠是什么,php加斜杠的转义方法
  13. 继续谈下脑残的NODE_MODULE_VERSION,全世界冷眼看着electron
  14. FIR 线性相位系统 最小相位系统 滤波器延迟
  15. c++编程拼图小游戏
  16. 力天创见区域客流人数统计
  17. Python调用高德地图API实现经纬度换算、地图可视化
  18. 快速提升认知,你必须知道四种底层思维(系列一)
  19. 给定一个整数,判断它能否被3,5,7整除,并输出以下信息:
  20. OllyDBG 破解入门教程

热门文章

  1. c#中的Form.Show和Form.ShowDialog的区别
  2. linux 运行cmd文件,cmd文件如何在虚拟linux下运行
  3. java 文件下载漏洞,文件上传和下载漏洞
  4. android数据回传多个页面_Android Day06四大组件之Activity多页面跳转和数据传递
  5. cesium 获取圆形边界位置_Cesium中级教程4 – 空间数据可视化(二)
  6. SQL注入-SQL注入的WAF绕过(十六)
  7. 暴力破解(初级)以及弱口令工具的使用
  8. checkbox设置颜色,style样式等
  9. css钢铁侠视角,CSS3 Iron Man 钢铁侠肖像
  10. 安卓-04-实例01-XML布局UI界面