python调用edge_优化 | 手把手教你用Python实现动态规划Labeling算法求解SPPRC问题

本文中的课件来自清华大学深圳国际研究生院,物流与交通学部戚铭尧教授《物流地理信息系统》课程。

SPPRC问题

        带资源约束的最短路径问题(shortest path problem with resource constraints)是一个众所周知的NP-Hard问题。除了作为网络问题直接应用外,SPPRC还用作列生成解决方案方法的基础,用于解决车辆路径规划问题和人员排班问题等。  

         考虑一个有向图,表示节点的集合,并且表示弧的集合。对于每一段弧都有一个非负的权重(vrptw问题中可能为负,需要作特殊处理),和,表示通过这段弧的成本和资源消耗。  

         SPPRC问题包括找到从起始节点到结束节点的一条路径,使该路径的总成本最小化,但不超过最大资源消耗。即使只存在一种资源,SPPRC也是一个NP-Hard。

Labeling算法

  直接求解SPPRC问题是比较困难的,故通常采用一种动态规划的算法: correction 算法。通常我们考虑有种资源,可能包括时间、最大装载重量、最大装载体积等。  

对于每一条从起始节点扩展到点的路径都有一个标签与之相关联。是路径使用的第L个资源的数量;是。  

此外,我们还需要设置一些优超规则,称为,以帮助减少不必要的扩展。令和是从扩展到的两条不同的路径,与之关联的标签分别为和。路径可以路径当且仅当:

下面介绍一个简单的小例子:76a3e2a8993303c9b5210f44b2ff9e60.png一个有向图如上图所示,我们可以看到每一段弧上都有一个非负的权重,分别表示通过该弧的与。

首先初始化出发节点的标签,设置为,随后令其向可达节点和进行扩展,则分别设置一个新的标签。再由向和进行扩展,则得到一个新的标签,得到一个新的标签,同理继续扩展到,生成一个新的标签。

然后回过头由扩展到,得到一个新的标签。我们可以发现没有继续向扩展了,因为其生成的标签为,与已有的标签相比满足了的要求,不必再扩展。

算法伪代码

725d1a33acb3f66584afd9d50ae7d50c.png

图片来源:运小筹主编即将出版的《运筹优化常用模型、算法及案例实战》第13章

Python编程实现

628b38396c9f89ce8827170ce3553949.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值