如何在不更改时间窗口的情况下强制下一个节点访问 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:如何在不显示系统条形音箱弹出窗口的情况下以编程方式更改音量?

如何在不使用 v-for 的情况下使用 Vue.js 访问 JSON 值

Kivy:如何在不关闭弹出窗口的情况下更新弹出标签文本

是否可以在不刷新定制器编辑窗口的情况下更改值?

如何在不更改颜色的情况下禁用 Vuetify 按钮