在我尝试使用 Google OR-Tools 解决车辆路径问题 (VRP) 的实例中,只有某些路线(游览)应在起点(即车站)结束。
我可以编辑从每个位置到车站的距离。将它们全部设置为 0 将具有设置任意结束位置的效果,并且路线看起来有点“放射状”,以车站为中心。而设置从每个位置到车站的距离将使路线看起来“循环”。
问题是,如何对问题进行建模,以便只有某些路由(包含特定类型的节点)才是“循环的”?
最佳答案
这里有一些例子:
“径向”(从中心 0 开始)。
例如:https://github.com/google/or-tools/raw/stable/ortools/constraint_solver/doc/vrp_starts_ends_solution.svg?sanitize=true
来源:https://github.com/google/or-tools/blob/stable/ortools/constraint_solver/doc/VRP.md#multiple-starts-ends
注意:在此示例中,每辆车都有不同的起始节点,并且都使用相同的仓库结束节点,即 0
循环:(从仓库出发并返回)。
例如:https://github.com/google/or-tools/raw/stable/ortools/constraint_solver/doc/vrp_global_span_solution.svg?sanitize=true
来源:https://github.com/google/or-tools/blob/stable/ortools/constraint_solver/doc/VRP.md#global-span-constraints
只需创建一个虚拟节点,与您所说的任何节点的距离为零但也保留您的仓库。
构建 RoutingIndexManager 时,您可以传递开始/结束列表,以便在结束列表中在虚拟节点或真实站点之间进行选择,以便车辆是否返回站点。
在“打印/显示”方法中,您可以检查结束节点索引并相应地绘制/打印...
注意:您可以在源代码树中找到用于生成这些 svg 的 python 脚本(我已经几个月没有运行它了,所以它可能会损坏(TODO:在其上添加 CI 作业 ^^))
关于python - 车辆路径问题如何用or-tools只让部分团回车场?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59825269/