如何在不更改时间窗口的情况下强制下一个节点访问 VRPTW
Posted
技术标签:
【中文标题】如何在不更改时间窗口的情况下强制下一个节点访问 VRPTW【英文标题】:How to force the next node to visit in VRPTWs without changing time window 【发布时间】:2021-11-03 14:38:04 【问题描述】:假设我有 3 对取件和交付(6 个节点),以及它们自己的时间窗口。
0-Node_start #Index(0)
1-Pickup, 2-Delivery #Index(1,2)
3-Pickup, 4-Delivery #Index(3,4)
5-Pickup, 6-Delivery #Index(5,6)
7-Node_end #Index(7)
如何强制我的车辆从节点起点到 index_3,然后直接继续其余路线,而不更改 index_3 中节点的时间窗口,或将行驶时间从 node_0 更改为 0 到 node_3?只要时间窗口允许,无论从 index_0 到 index_3 花费多少时间,这都应该是可能的。
另外,不确定这在这种情况下是否重要,但我使用 FirstSolutionStrategy.GLOBAL_CHEAPEST_ARC
【问题讨论】:
【参考方案1】:我找到了适合我的情况的解决方案,希望它也适用于其他人。我用NextVar
consecutive_locations = [[1,3], [7,9]]
for location_index in consecutive_locations:
routing.solver().Add(routing.NextVar(location_index[0]) == location_index[1])
我使用了循环,因为我有多辆车,每辆车都有一个特定的起点,以及我希望它在起点后接下来要访问的位置。
虽然解决方案需要更长的时间,但我认为 firstSolutionStrategy 可能是问题(不确定)
【讨论】:
以上是关于如何在不更改时间窗口的情况下强制下一个节点访问 VRPTW的主要内容,如果未能解决你的问题,请参考以下文章
iOS 9:如何在不显示系统条形音箱弹出窗口的情况下以编程方式更改音量?