车辆路径规划问题的三个MIP模型。从直观的模型推导出高效的模型。

我们用最最标准的Capacitated VRP为例:

CVRP问题描述:给定一张完全有向图:

,
其中
是客户的集合,
分别是起点和终点,
是弧的集合。 给定一个车队集合
,每辆车的型号完全一样且能够装载货物的容量为
是对应所需要的货物的数量。每个点
有配送需求
,起点和终点的需求为0。目标是:找到一个车辆配送方案,所有客户的货物需求满足,且最小化配送费用。配送费用实际就是车辆经过每条弧所产生的费用

假设:1)图

满足三角形两边之和大于第三边;2) 每个客户只能被一辆车配送;3)每辆车从仓库出发,经过若干客户,回到仓库后不能再被使用。

这个组合优化问题暗含两个决策点:1) 哪辆车配送哪些客户;2)对每辆车而言,以什么顺序配送。所以,我们定义一个决策变量

: 车辆
是否经过弧
,如果经过则为1,否则为0。确定了该决策变量,上述决策也就确定了。下面我们给出整数规划模型:
代表的是所有从点
出发的弧;
代表的是所有进入点
的弧;
(
是一个点的集合)

(1.2)表示每个客户都必须服务到位;(1.3)就是进入的流等于出去的流; (1.4)和(1.5)就是每辆车必须从o出发,回到d,不能停在客户家不走了;(1.6)不能超载;(1.7)子回路消除。也就是避免出现,一辆车在几个客户之间无限打圈; (1.8)整数约束。

这个模型有个很不好的地方就是变量是三个索引,问题规模大了以后,变量瞬间就会变得很多。而且车辆都是相同的,整个搜索空间会有很强的对称性,这会降低B&B分支的效率。最后一点是,子回路约束的数量是指数级,需要用行生成解LP松弛问题。所以我们改一改:

代表弧
被经过的次数,因为前面说的假设1),所以所有的弧最多只会被经过1次。

嗯,这样看起来,干净了一些。其中(2.6)把子回路消除约束和满足容量的约束合并了起来。这个模型的决策变量只有两个index,消除了车辆带来的对称性,唯一不太好的地方就是(2.6)需要引入cut generation。

除了第二个模型以外,还可以对第一个模型做D-W[3]分解得到Set Partitioning模型。因为D-W的精髓就是“挑选合适的约束进入子问题”,所以先说哪些约束应该被选中。

观察(1.3-1.5以及1.7),对于某个

而言即:
四个约束左边的系数矩阵满足Total Unimodular。这意味着这四个约束所构造的凸多面体的任意一个极点就是一个整数解[2],也就是一条出发于o终止于d且没有子回路的路径(如果没有1.7的话,可能会出现一条从o至d的路径加上一条子回路)。我们把这四个约束放入子问题,并且记这四个约束组成的凸多面体为P1。注意到(1.6)没有被放进来,我们现在考虑(1.6)。如果把它加入P1,那么所有超载路径会被去掉,反映在几何上就是有部分极点被“砍去”,这时候我们得到凸多面体P2。按照D-W分解,需要用P2中所有的极点来表示主问题中的变量。然而,因为(1.6)的原因,突然多出了一些“非路径”的极点。这些极点是不需要考虑的。
两条红线代表(1.6)砍去的极点

因为主问题的

是个整数变量,表示它只需要剩下的其余所有路径极点即可。我们对主问题经过如下一顿D-W分解标准操作:

其中:

是一个已知量,代表车
的路径
中是否经过弧
,经过为1,否则为0。
:D-W分解中的常见变量。
:车
的所有路径。

进一步对约束分析:

因为

的值是binary的,然后
也是binary的,所以有:如果 (3.5)不成立,(3.4)肯定也不成立。由于逆否命题与原命题等价,所以如果(3.4)成立,那么(3.5)也一定成立。那么(3.5)可以删去。另外,经过观察得知,即使
依然能被全部表示(因为它本来就代表路径嘛)。而且在此条件下,(3.4)自然而然就成立了。

还有,由于车辆是一致的,所以有

。根据[4]中的"commodity aggregation",我们进一步可以去掉所有的
以及上标
。于是,得到最后的主问题,也就是车辆路径规划的第三种模型了:

其中:

所有合法路径。
如果弧在路径p中被使用则为1,否则为0。
如果点i在路径p中则为1,否则为0。

第三个模型的优势:1)提供了很好的低界 ;2)能够处理路径相关的非线性成本或者约束。3) 减少相同资源带来的对称性问题。第一点和第三点的好处对于分支定界算法不言而喻,而第二点在我看来极大地提升了列生成的工程价值。

但是这个模型也有劣势。子问题中包含了(1.7),所以子问题凸多面体P2是有指数级的极点。那么对主问题来说,我们只能先选择一部分极点,然后慢慢生成剩余的。这也就引入了列生成。列生成和车辆路径规划(Vehicle Routing Problem, VRP)大概自从这篇文章[1]开始,相爱相杀了快30年。这30年里,几乎所有高效的VRP精确算法都离不开列生成技术。子问题自身也是一个NP难问题,属于Elementary shortest path problem with resource constraint (ESPPRC)。

所以在实际问题中,会采用一些启发式算法先产生很多高质量的路径,然后导入第三个模型里求解来从这些高质量的路径中选择出比较好的组合。

References:

[1] Agarwal Y, Mathur K, Salkin HM. A set‐partitioning‐based exact algorithm for the vehicle routing problem. Networks. 1989 Dec;19(7):731-49.

[2] Schrijver, A. (1998). Theory of linear and integer programming. John Wiley & Sons.

[3] Bertsimas, D., & Tsitsiklis, J. N. (1997). Introduction to linear optimization (Vol. 6, pp. 479-530). Belmont, MA: Athena Scientific.

[4] Desaulniers, G., Desrosiers, J., Solomon, M. M., Soumis, F., & Villeneuve, D. (1998). A unified framework for deterministic time constrained vehicle routing and crew scheduling problems. In Fleet management and logistics (pp. 57-93). Springer, Boston, MA.

未能找到路径的一部分_车辆路径规划三种MIP模型相关推荐

  1. python 鱼骨图_数据分析必备的三种思考模型

    原标题:数据分析必备的三种思考模型 新人学习数据分析有个误区,认为Excel很Low,SQL做久了又是表哥表姐,学习python又陷入无尽的工具包中不能自拔,迷茫到找项目学习,结果是分析又不得要领,说 ...

  2. java绝对路径和相对路径的区别_相对路径和绝对路径的区别

    1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://ww ...

  3. 数据分布策略_有效数据项目的三种策略

    数据分布策略 Many data science projects do not go into production, why is that? There is no doubt in my mi ...

  4. 网络资产管理系统_固定资产管理系统的三种网络架构方式

    随着互联网技术的发展和信息技术的广泛使用,固定资产管理系统在各行业的应用越来越普及,固定资产管理系统作为当今主流的企业固定资产信息化管理模式,能够对企业固定资产进行有效管理并提升企业的管理水平.对于固 ...

  5. python编程剪刀石头布思路_剪刀石头布小习题三种语言python2、php、go代码

    剪刀石头布小习题三种语言python2.php.go代码 # coding:utf-8 """ python核心编程6-14习题的解题思路 设计一个"石头,剪子 ...

  6. python车辆路径优化_车辆路径问题中距离维的设置

    我正在尝试解决一个有5个司机送货的车辆路线问题.我用haversine和lat long来计算距离矩阵.我是新的或工具,所以遵循vrp的例子.在 问题是,对于5个驱动程序,只为2个驱动程序生成路由,并 ...

  7. 中相对路径与绝对路径的写法_相对路径和绝对路径?简洁易懂解释+实例

    欢迎评论和指正,希望我的学习经验可以帮助到你. 绝对路径:目标文件在硬盘上的真实路径(最精确路径) 举个栗子:找到文件,右键点击后打开属性,可以看到我把喜欢的封面'cover1.jpg'储存在了路径_ ...

  8. openwrt打印机支持列表_共享打印机的三种安装连接方法

    打印机共享是办公中常用到的方法,可以多人共享一台打印机,节省设备资源,减少费用支出.如何在局域网中添加共享打印机或者网络打印机呢? 共享打印一般有两种方式: 第一种是打印机自带网络接口,具备网络打印能 ...

  9. win10连接共享打印机_共享打印机的三种安装连接方法

    打印机共享是办公中常用到的方法,可以多人共享一台打印机,节省设备资源,减少费用支出.如何在局域网中添加共享打印机或者网络打印机呢? 共享打印一般有两种方式: 第一种是打印机自带网络接口,具备网络打印能 ...

最新文章

  1. 网站优化不仅仅只为排名而在!
  2. python之sys模块详解_(转)python之os,sys模块详解
  3. 使用JProfiler查看GC Roots
  4. Android开发面试题之Android四大组件
  5. 交换网络中的sniffer讨论-基于交换网络的ARP spoofing sniffer
  6. C++中指针和引用的区别与联系
  7. HBase流量限制和表负载均衡剖析
  8. java服务端 json接口_java以json格式向后台服务器接口发送请求的实例
  9. gre计算机考试成绩查询,2016年GRE考试成绩查询方法及出分时间最全介绍
  10. ST25读FeliCa卡记录
  11. redis的hscan替换hgetall的疑问,redis返回列表获取数据示例
  12. 小米手机浏览器部分图片显示异常
  13. MFC控件-Spin控件和编辑框控件Edit Control绑定使用
  14. Pocket PC C#
  15. 嫁给年薪百万的程序员,结婚 6 年后的我竟然还是处女
  16. Tensorflow中的masking和padding
  17. 我为Bill Gates熬夜加班的那个晚上
  18. excel2007计算机试题,巧用excel2007/2003进行拍照
  19. 严格别名规则“-fstrict-aliasing”和“-fno-strict-aliasing”及类型双关
  20. 放大器的传递函数_谁惧怕电容负载变化?斩波放大器吗?

热门文章

  1. ffmpeg库编译加文字_ffmpeg第三方库编译记录
  2. 支持的sql语法_PostgreSQL 12 新特性解读之一|支持 SQL/JSON path
  3. 传输预编码matlab,基于MATLAB的MIMO系统预编码性能仿真教程.doc
  4. Python zipfile 文件名称编码 file_name.encode(‘cp437‘).decode(‘gbk‘)
  5. 本科学计算机研究生读哲学,计算机专业本科生创新思维培养及其哲学思考
  6. python中dict的fromkeys用法
  7. python中常见的一些题目汇总
  8. Python 全局变量和局部变量迷惑人的小示例
  9. 计算机组成与结构实验箱,HQFC-B1计算机组成和数字电路实验箱
  10. python 四舍五入 round( x [, n] )函数 int()函数