如何在 Google OR-Tools Route Optimization 中限制每辆车的位置数量

Posted

技术标签:

【中文标题】如何在 Google OR-Tools Route Optimization 中限制每辆车的位置数量【英文标题】:How to limit number of locations for each vehicle in Google OR-Tools Route Optimization 【发布时间】:2020-07-06 12:28:59 【问题描述】:

我已经为路线优化实施了 Or-Tools。它工作正常。只有一件事我想为每辆车实现限制数量的位置。例如,为每辆车定义最多两 (2) 个位置。

我已尝试实施容量约束,但它不起作用。我也尝试实现 SetSpanUpperBoundForVehicle 函数,在这种情况下解决方案对象为空。

这是我的代码

RoutingDimension timeDimension = routing.GetMutableDimension("Time");
            timeDimension.SetSpanUpperBoundForVehicle(2, 0);
            timeDimension.SetSpanUpperBoundForVehicle(2, 1);
            timeDimension.SetSpanUpperBoundForVehicle(2, 2);

如何限制此路线数量?请帮忙。

【问题讨论】:

每辆车只走一条路线。请改写问题。 我有 5 条路线。通过实施VRPTW方案,3条路线分配给2号车和1号车,1条路线分别分配给0号车和1号车。我想将路线数量限制为 2 条,因此任何车辆的路线都不能超过 2 条。 通过路线,您的意思是访问? 对不起,这是我的错误。实际上位置,我有 5 个位置,我想为每辆车限制 2 个位置。 【参考方案1】:

只需创建一个计数器维度,在每个位置加 1,然后将每辆车的容量限制为允许的最大位置数。

例如重复使用vrp.py 示例并添加:

   # Create counter
    def counter_callback(from_index):
        """Returns 1 for any locations except depot."""
        # Convert from routing variable Index to user NodeIndex.
        from_node = manager.IndexToNode(from_index)
        return 1 if (from_node != 0) else 0;

    counter_callback_index = routing.RegisterUnaryTransitCallback(counter_callback)

    routing.AddDimensionWithVehicleCapacity(
        counter_callback_index,
        0,  # null slack
        [4,5,4,6],  # maximum locations per vehicle
        True,  # start cumul to zero
        'Counter')

可能的输出:

%python vrp.py
Objective: 6780
Route for vehicle 0:
 0 -> 7 -> 0
Distance of the route: 388m

Route for vehicle 1:
 0 -> 14 -> 16 -> 15 -> 3 -> 4 -> 0
Distance of the route: 2716m

Route for vehicle 2:
 0 -> 13 -> 12 -> 11 -> 1 -> 0
Distance of the route: 1804m

Route for vehicle 3:
 0 -> 5 -> 8 -> 6 -> 2 -> 10 -> 9 -> 0
Distance of the route: 1872m

Total Distance of all routes: 6780m

如您所见,路线遵循4, 5, 4, 6 位置限制。

注意:对于 C# 语法,几乎不一样,请参阅 https://github.com/google/or-tools/blob/stable/ortools/constraint_solver/samples/VrpCapacity.cs 和https://github.com/google/or-tools/blob/stable/ortools/constraint_solver/samples/VrpCapacity.csproj

【讨论】:

以上是关于如何在 Google OR-Tools Route Optimization 中限制每辆车的位置数量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac 上安装 Google OR-Tools?

如何在 MiniZinc 中安装 Google 的 CP 求解器 OR-Tools?

如何在 google or-tools vrptw 中设置时间窗口?

如何在 AWS Lambda 上安装 Google or-tools?

如何在 macOS 上为 IntelliJ 项目安装 Google OR-Tools

Google 用于 CVRP 的 OR-Tools,同时最小化全局跨度