OR-TOOLS RL VRPTW 问题中的移位长度约束?

Posted

技术标签:

【中文标题】OR-TOOLS RL VRPTW 问题中的移位长度约束?【英文标题】:shift length constraint in OR-TOOLS RL VRPTW problem? 【发布时间】:2019-06-05 19:31:45 【问题描述】:

我正在尝试在 OR-TOOLS RL VRPTW 问题中强制执行移位长度约束。 班次长度是车辆服务的总时间(运输 + 等待 + 服务),从到达第一个位置到离开最后一个位置

看起来Time dimension 是完美的选择,但它会累积第一个位置的窗口开始,这并不好。

所以重新迭代 - 我想要一个累积运输时间、服务时间和等待时间的维度(每个位置的时间窗口),但我不希望它累积第一个位置的窗口开始时间在路线中(因为这正是该驾驶员轮班开始的地方。如果驾驶员从节点 i 开始并在节点 j 结束,我希望约束为:time_dimension.CumulVar(j) - time_dimension.CumulVar(i) < shift_length

我是否缺少任何明显的建模技巧?

【问题讨论】:

哎呀。有一个功能正是这样做的。 SetSpanUpperBoundForVehicle,RTFM。 如果您找到了解决方案,您可以将其发布为答案,以便其他人更容易看到。可以出于任何原因随时删除评论,答案有修订历史。 【参考方案1】:

感谢@ihadanny 的回答。为了给其他人提供更具体的帮助,我发布了这个答案: 将车辆的最大路线长度设置为例如600 你可以做到:

for vehicle_id in range(data['num_vehicles']):
        time_dimension.SetSpanUpperBoundForVehicle(600, vehicle_id) 

【讨论】:

以上是关于OR-TOOLS RL VRPTW 问题中的移位长度约束?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 google or-tools vrptw 中设置时间窗口?

如何获取 Google OR-Tools 的进度日志?

Google Or-Tools 路由 - 解决方案为空

Google OR-Tools:最小化总时间

or-tools python中的变量除法

路径规划基于粒子群算法求解VRPTW模型