谷歌 ortools 旅行推销员按顺序访问

问题描述

我在 python 中使用谷歌的 ortools 库来找到一组点之间的最佳路径。点集被分解为子集。例如,集合 A 可能包含 10 个点,集合 B 包含 6 个点,集合 C 包含 48 个点。必须按顺序访问点集,即必须在移动到集合 B 中的点之前访问 A 中的所有点,并且必须在访问 C 中的点之前访问 B 中的所有点。我通过运行算法有一个可行的解决方案在集合 A 上,注意结束位置(通过使用虚拟节点并将任何点到该节点的距离设置为零来任意选择)。然后从A的最后一点开始,作为B的起点。

有没有办法让算法优化所有集合并应用顺序约束?

解决方法

只禁止任何弧 B->A、C->B 或 C->A。

您可以通过返回大于车辆容量的值或直接从 NextVar() 列表中删除节点来实现。 routing.NextVar(index).RemoveValues([...])