OR-Tools:有资源限制但没有解决方案的 VRPTW
Posted
技术标签:
【中文标题】OR-Tools:有资源限制但没有解决方案的 VRPTW【英文标题】:OR-Tools: VRPTW with resource constraints and without solution 【发布时间】:2019-09-04 11:30:20 【问题描述】:我正在尝试使用仓库使用限制测试 VRPTW 示例 - from here。 如果我将 VehicleNumber 更改为不同的值(例如从 4 到 6),将永远找不到解决方案。此示例仅适用于指定的属性值。为什么?
我检查了 C# 和 Python 示例,结果是一样的。
【问题讨论】:
一般性评论(针对一个非常笼统的问题;没有给出详细信息):NP-hard 问题在本质上就求解器而言非常不稳定。例如,虽然 SAT 求解器通常解决具有 1 亿个变量的问题,但理论向我们保证(如果假设 P != NP),也会有一个只有 100 个变量的实例我们无法解决。这也意味着,对实例的微小更改通常会使问题无法解决(我们无法先验地认识到这一事实;也有理论保证)。路由求解器大量基于启发式。 or-tools 的这个功能不稳定怎么用?在我当前的项目中,这个约束全部放弃了 【参考方案1】:因为问题被 6 辆车过度限制了。
此代码为每辆车创建一个间隔。这些间隔具有固定的持续时间和最大的结束时间。 4 个这样的间隔适合允许的时间,6 个不适合。
【讨论】:
为什么算法可以用 4 辆车给出解决方案,而不能用 6 辆车?它可以使用 6 个中的 4 个,并将 2 个保留为未使用。我该如何解决? 您需要创建固定间隔变量作为可选。为此,您需要传递一个指示车辆是否处于活动状态的布尔变量。您可以使用求解器->MakeIsDifferentCstCt(start_var_of_vehicle_i, index_of_end_route_for_vehicle_i) 我可以看一些例子来理解吗?我找到了间隔的可选标志,当我设置为 true 时,break 停止为解决方案工作。 @LaurentPerron,在 MakeIsDifferentCstCt 中,“CstCt”代表什么?恒定约束?演员表约束? ConstantConstraint: MakeIsDifferentFromConstantConstraint以上是关于OR-Tools:有资源限制但没有解决方案的 VRPTW的主要内容,如果未能解决你的问题,请参考以下文章
OR-Tools - 车辆路线问题 - 防止从初始解决方案中删除节点
如何在 Google OR-Tools Route Optimization 中限制每辆车的位置数量