车辆路径问题 - 当访问某些位置时如何 finish/determine?

Vehicle Routing Problem - How to finish/determine when certain locations are visited?

我有 VRP 问题。我有车辆的起始位置和距离矩阵。当访问某些位置时,我希望解决方案是 terminated/finished。

所以我不希望它实际访问 location_matrix 的每个索引,但是如果访问“必须访问”旁边的不同索引可以提供更好的解决方案,那么我没有问题。因为你知道有时候直接从 1 到 3 比 1-2-3 慢。 (访问 2 不是必需的,但可以走捷径)

我定义了一个成本为 0 的虚拟仓库,我将其用于结束,因为如果您使用开始,则必须定义结束。我把 ends 000 放在基本上结束的位置。您可能会问为什么不放置“工作”位置。但这意味着他们必须到此为止。所以它似乎不是最佳选择,因为例如一辆车可能真的靠近两个“工作”位置,但如果它终止/结束,因为它有 END 定义的车辆将停止。

我不知道该怎么做。基本上我想要的是,如果某些位置被访问一次就终止——这就是解决方案。因此,如果工作是 (1,3,5) 并且车辆 1 访问了 1,3 并且车辆 2 刚刚访问了 2 它应该完成。

如果我在 ortools 中使用求解器,它将类似于 TSP 问题,它将尝试访问 distance_matrix 中的每个位置。我不完全想要这个。如果结果更好,它可以访问解决方案(它有意义吗?)但它应该关注“工作”位置以及如何更快地进行

可能的方法:计算一个仅包含“必游”位置的新距离矩阵,运行一个包含该矩阵的 VRP。

  • 计算仅包含“必游”地点的距离矩阵。
  • 每个单元格包含两个“必须访问”位置之间的最短路径。
  • 存储找到的所有成对最短路径。
  • 运行 此距离矩阵上的常规 VRP。
  • 使用之前找到的最短路径重建完整路径。