无法理解 CumulVar 和 SlackVar 与 OR Tools 一起使用的解决方案窗口

问题描述 投票:0回答:1

我遇到一辆车和多个路径点(取货和送货)的路线问题。

我可以使用以下方法成功为每个航路点添加时间窗口:

dimension.CumulVar(index).SetRange(start_window, end_window)

但我也想强制车辆在每个等待点等待以模仿装货或卸货时间。我尝试这样做:

dimension.SlackVar(index).SetValue(loading_time)

我仅使用

CumulVar
得到的解决方案窗口如下所示:

waypoint 1: (10:17, 11:19)
waypoint 2: (11:25, 11:38)
waypoint 3: (11:45, 11:46)
waypoint 4: (11:45, 11:46)
waypoint 5: (11:45, 11:46)
waypoint 6: (11:53, 11:54)
waypoint 7: (12:00, 12:00)

添加

SlackVar
后,看起来像:

waypoint 1: (11:14, 11:14)
waypoint 2: (11:27, 11:27)
waypoint 3: (11:40, 11:40)
waypoint 4: (11:45, 11:45)
waypoint 5: (11:50, 11:50)
waypoint 6: (12:09, 12:09)
waypoint 7: (12:21, 12:21)

为什么解决方案windows不再具有灵活性了?为什么航路点 1 可以在近一个小时内完成,但使用 SlackVar 后就失去了所有灵活性? 我的理解有哪些误区? 我的错误在哪里?

python or-tools vehicle-routing
1个回答
0
投票

公式为

cumulvar(next(i)) == cumulvar(i) + slack(i)

如果你修好了所有宽松的裤子,你就消除了所有的灵活性。只需添加一个下限,而不是修复它们。

dimension.SlackVar(index).SetMin(loading_time)
© www.soinside.com 2019 - 2024. All rights reserved.