我遇到一辆车和多个路径点(取货和送货)的路线问题。
我可以使用以下方法成功为每个航路点添加时间窗口:
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 后就失去了所有灵活性? 我的理解有哪些误区? 我的错误在哪里?
公式为
cumulvar(next(i)) == cumulvar(i) + slack(i)
如果你修好了所有宽松的裤子,你就消除了所有的灵活性。只需添加一个下限,而不是修复它们。
dimension.SlackVar(index).SetMin(loading_time)