首页 > 解决方案 > 容量约束检查仅在 OR-Tools 中的节点级别

问题描述

我们将提货配送模块与容量限制相结合。在这里,我们继续在路线上拾取和放下物品(可以在同一个节点上拾取和放下)。因此,即使他的容量较小,一个人也将能够接受更多订单,因为在下一个节点他将丢弃它。

例如:让我们假设:

Vehicle capacity is 10 kg. 
Total nodes = 11 (0 to 10)
Pickup Nodes: 1, 3, 8, 10
Drop Nodes: 5, 2, 4

我们维护了两个数组“ data['pickup_demand'] ”用于拾取节点的需求,“ data['delivery_demand'] ”用于放置节点的需求。我们还减去它以获得最终数据 (即:“ data['demands'] = data['pickup_demand'] - data['delivery_demand'] ”)

    data['pickup_demand'] = [0, 8, 0, 2, 0, 0, 0, 0, 5, 0, 6]
    data['delivery_demand'] = [0, 0, 6, 10, 0, 5, 0, 0, 0, 0, 0]
    
Expected Routing:-
               0(0) -> 1(8) -> 3(2) -> 5(5) -> 8(5) -> 2(6) -> 10(6) -> 3(10) -> 0(0)
                 |       |       |       |       |       |        |        |       |
                Depot  Pickup  Pickup   Drop   Pickup   Drop    Pickup   Drop    Depot

在这里,如果我们看到,即使它是最大的,同一辆车也能够完成这项总任务。重量为10 公斤

我们不想考虑它承载的所有订单的总重量是多少(即在这里加上所有的皮卡,它是21 公斤)。但是,检查应仅基于节点,其不应大于 10 公斤。通过这种方式,车辆可以完成更多任务。

尽管路由不像上面显示的那样,但是,我们的要求是考虑最大。仅在节点上进行权重检查。

我想,我需要修改这个吗?

routing.AddDimensionWithVehicleCapacity(
        demand_callback_index,
        0,  # null capacity slack
        data['vehicle_capacities'],  # vehicle maximum capacities
        True,  # start cumul to zero
        'Capacity')

标签: python-3.xor-toolsoperations-research

解决方案


推荐阅读