加载需求和限制

loadDemands 属性定义在 ShipmentModel.shipments.Shipment 下,loadLimits 属性定义在 ShipmentModel.vehicles.Vehicle 下。

负载需求和限制是一种可用于管理容量的限制。此限制条件用于指定货件所需容量车辆最大容量,以便您根据这些限制条件优化路线分配。

负载需求和限制可以支持以下目标:

  • 防止车辆超载。
  • 监控车辆负荷在取货和送货期间的变化情况。
  • 优先安排重型车辆运输重型货物。

以下属性用于指定负载需求和限制:

  • loadDemands 用于指定特定货件所需的容量。
  • loadLimits 用于指定给定车辆的最大容量。

结构

如图所示,负载需求和限制的结构如下:

基本功能核对清单

以下核对清单介绍了可防止潜在负载相关错误的必备知识。此列表可帮助您验证请求并排查响应方面的问题。

属性

本部分介绍了负载需求和限制的属性,如下所示:

  • 负载类型:负载需求和限制之间的共享属性。
  • LoadLoadLimit:分别存在于负载需求和负载限制中的唯一属性。

负载类型

载荷类型是一个字符串键,可同时应用于货件和车辆。单一的装载类型适用于货件的装载需求以及车辆的装载限制。

负载类型使用 Protocol Buffers map 类型语法。在命名负载类型时,请使用描述负载类型及其单位的标识符。例如:weightKgvolume_gallonspalletcountfrequencyDaily

LoadLoadLimit

LoadLoadLimit 对象包含用于定义货件和车辆运力要求的特定属性,下表描述了这些属性:

对象 有子女 属性 物业类型 房源描述
Load loadDemands amount 字符串(int64 格式) 以指定类型定义货件的运力要求。
LoadLimit loadLimits maxLoad 字符串(int64 格式) 定义车辆在指定类型中的最大载重能力。

示例

本部分涵盖了三种类型的示例:

  • 代码示例,用于说明负载需求和限制属性的结构。
  • 示例场景:展示了在 API 请求中使用负载需求和限制的一种方式。
  • 一个请求示例,其中包含在示例场景中设置的值。

代码示例

以下示例展示了负载需求的结构,您可以在其中将 loadDemands 类型设置为字符串,并将 amount 属性设置为 int64 格式的字符串:

{
  "model": {
    "shipments": [ ...
      {
        "loadDemands": {
          "MATCHING_LOAD_TYPE": {
            "amount": "YOUR_LOAD_AMOUNT"
          }
        }
      }
    ],
    "vehicles": [ ...
    ]
  }
}

以下示例展示了负载限制的最基本结构,其中您可以将 loadLimits 类型设置为字符串,并将 maxLoad 属性设置为 int64 格式的字符串:

{
  "model": {
    "shipments": [ ...
    ],
    "vehicles": [ ...
      {
        "loadLimits": {
          "MATCHING_LOAD_TYPE": {
            "maxLoad": "YOUR_MAX_LOAD"
          }
        }
      }
    ]
  }
}

示例场景

本部分介绍了一个场景:您经营一家狗狗日托中心,现在要优化一条路线,以便使用装有少量笼子的车辆运送几只狗狗。

每次运送都表示您在某个地点接送一定数量的狗狗。在此示例中,每批货件的取货地点都不同,即您照看的狗狗的家,但所有货件的送货地点都相同,即您的狗狗日托中心所在的建筑物。

在此示例中,请求中的属性值如下所示:

有子女 属性 类型 场景
loadDemands 负载类型 字符串 dogUnit 定义货件的装载类型。此示例使用 dogUnit,其中每个 dogUnit 代表一只狗。
loadDemands amount 数值 第 1 次发货:1
第 2 次发货:3
指定所定义负载类型的数量。在此示例中,您要定义两批货物,第一批货物要提取 1 只狗,第二批货物要提取 3 只狗。
loadLimits 负载类型 字符串 dogUnit 定义应用于车辆的载重限制类型。此值必须与相应货件的装载类型一致,相应限额才有效。
loadLimits maxLoad 数值 6 指定车辆可载运的最大负载类型数量。在此示例中,您只有一辆车辆,最大容量为 6 dogUnit,其中每个 dogUnit 代表一个狗笼。

下图展示了车辆的载重限制、每批货物的载重需求,以及每批货物如何消耗车辆的载重限制:

车辆开始行驶时,有 6 个空位,表示车辆的载重限制。第一批货物需要一个狗笼空间,第二批货物需要三个狗笼空间。车辆的最终状态是 6 个空间中有 4 个被占用,还剩下 2 个空位。

在此示例中,每批货物的装载需求和车辆的装载限制具有以下影响:

  • 优化器不会有问题,因为车辆最多可搭载 6 只狗,而您只需接送 4 只狗,因此可以为车辆生成接送狗的路线。

  • 车辆的载重限制为 6 dogUnit,这意味着您只能在这辆特定车辆上再载 2 只狗

  • 如果狗的数量超过了载重限制,优化器会跳过一次接送,或者将其分配给合适的车辆。

请注意,没有预定义类型集。在此示例中,您可以将负荷类型从“狗单位”更改为“重量单位”,以限制狗的重量;也可以将其更改为“线性测量单位”,以限制狗的宽度或高度。这种灵活性可让您根据自己的具体需求调整负载需求和限制。

请求示例

以下示例展示了包含示例场景值的基本 optimizeTours 请求的结构:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ],
        "label": "One bernese mountain dog",
        "loadDemands": {
          "dogUnit": {
            "amount": "1"
          }
        }
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ],
        "label": "Three chihuahuas",
        "loadDemands": {
          "dogUnit": {
            "amount": "3"
          }
        }
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "loadLimits": {
          "dogUnit": {
            "maxLoad": "6"
          }
        },
        "costPerKilometer": 1.0
      }
    ]
  }
}

请注意,与此示例不同,一次装货可能有多项装货需求,一辆车可能有多项载重限制,因此您可以提供复杂的限制条件,以便在优化车队路线时加以考虑。