OR-TOOLS RL VRPTW 问题中的移位长度约束?
shift length constraint in OR-TOOLS RL VRPTW problem?
我正在尝试在 OR-TOOLS RL VRPTW 问题中强制执行移位长度约束。
班次时长是车辆在服务中的总时间(运输 + 等待 + 服务),从到达第一个位置到离开最后一个位置。
看起来 Time dimension
是完美的选择,但它累积了第一个位置的 window 开始,这并不好。
所以 re-iterate - 我想要一个累积运输时间、服务时间和等待时间的维度(每个位置的时间 window),但我不希望它累积window 路线中第一个位置的开始时间(因为这正是这个 driver 的转变开始的地方。如果 driver 从节点 i 开始并在节点 j 结束,我希望约束为:time_dimension.CumulVar(j) - time_dimension.CumulVar(i) < shift_length
我是否缺少任何明显的建模技巧?
谢谢@ihadanny 的回答。为了给别人更具体的帮助,我 post 这个答案:
将车辆的最大路线长度设置为例如600你可以做到:
for vehicle_id in range(data['num_vehicles']):
time_dimension.SetSpanUpperBoundForVehicle(600, vehicle_id)
我正在尝试在 OR-TOOLS RL VRPTW 问题中强制执行移位长度约束。 班次时长是车辆在服务中的总时间(运输 + 等待 + 服务),从到达第一个位置到离开最后一个位置。
看起来 Time dimension
是完美的选择,但它累积了第一个位置的 window 开始,这并不好。
所以 re-iterate - 我想要一个累积运输时间、服务时间和等待时间的维度(每个位置的时间 window),但我不希望它累积window 路线中第一个位置的开始时间(因为这正是这个 driver 的转变开始的地方。如果 driver 从节点 i 开始并在节点 j 结束,我希望约束为:time_dimension.CumulVar(j) - time_dimension.CumulVar(i) < shift_length
我是否缺少任何明显的建模技巧?
谢谢@ihadanny 的回答。为了给别人更具体的帮助,我 post 这个答案: 将车辆的最大路线长度设置为例如600你可以做到:
for vehicle_id in range(data['num_vehicles']):
time_dimension.SetSpanUpperBoundForVehicle(600, vehicle_id)