我正在尝试在 OR-TOOLS RL VRPTW 问题中强制执行移位长度约束。班次长度是车辆从到达第一个位置到离开最后一个位置的服务(运输 + 等待 + 服务)的总时间。
看起来 aTime dimension是完美的选择,但是它累积了第一个位置的窗口开始,这并不好。
所以重新迭代 - 我想要一个累积运输时间、服务时间和等待时间的维度(对于每个位置的时间窗口),但我不希望它累积路线中第一个位置的窗口开始时间(因为这正是司机班次开始的地方。如果司机从节点 i 开始并在节点 j 结束,我希望约束为: time_dimension.CumulVar(j) - time_dimension.CumulVar(i) < shift_length
我缺少任何明显的建模技巧吗?
谢谢@ihadanny 的回答。为了给其他人更具体的帮助,我发布了这个答案:要将车辆的最大路线长度设置为例如 600,您可以执行以下操作:
for vehicle_id in range(data['num_vehicles']):
time_dimension.SetSpanUpperBoundForVehicle(600, vehicle_id)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |