【问题标题】:How to make only some tours return to depot in vehicle routing problem with or-tools?如何使用or-tools在车辆路线问题中仅使部分旅行团返回站点?
【发布时间】:2020-05-06 13:54:40
【问题描述】:

在我尝试解决的使用 Google 的 OR-Tools 的车辆路线问题 (VRP) 的实例中,只有某些路线(旅行)应该在起点(即站点)结束。

我可以编辑从每个位置到仓库的距离。将它们全部设置为 0 将具有设置任意结束位置的效果,并且路线看起来有点像“径向”,中心位于站点。而设置从每个位置到站点的距离将使路线看起来“圆形”。

问题是,如何对问题进行建模,以便只有部分路由(包含特定类型的节点)是“循环的”?

【问题讨论】:

    标签: python or-tools vehicle-routing


    【解决方案1】:

    这里有一些例子:
    “径向”(从中心 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 作业^^))

    【讨论】:

    • 有趣,我不知道您可以在创建 RoutingIndexManager 时设置开始/结束位置。但据我了解,它将开始/结束位置与车辆索引相匹配。在这个问题中,“循环”路线与任何特定车辆无关。只有包含某些节点的路线需要在站点结束
    • 对我来说似乎接近 PickupAndDelivery 约束。您可以为每个需要“返回仓库”约束的节点创建一个虚拟仓库节点
    • 是的。这实际上是我最初的想法,但我试图避免更多的限制。我试试看
    猜你喜欢
    • 2020-07-01
    • 2019-08-01
    • 2021-11-22
    • 1970-01-01
    • 2020-07-25
    • 2021-12-12
    • 1970-01-01
    • 2020-01-02
    • 2021-05-27
    相关资源
    最近更新 更多