加载需求和限制

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
      }
    ]
  }
}

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

软性负载限制

您可以通过在车辆的 loadLimits 上添加 softMaxLoadcostPerUnitAboveSoftMax 来将负载限制设置为软约束。这样一来,优化器就可以在付出一定代价的情况下超出车辆的最大载重,从而优先完成路线,而不是严格遵守载重限制。

您可以同时使用 maxLoadsoftMaxLoad 来设置硬性和软性负载限制。在这种情况下,softMaxLoad 设置的是可以超出但最好不要超出的负载,而 maxLoad 设置的是不得超出的硬性限制。如果同时使用这两个参数,则 maxLoad 必须大于 softMaxLoad

属性

下表介绍了负载需求和限制的软约束属性。

有子女 属性名称 物业类型 属性说明
loadLimits softMaxLoad 字符串(int64 格式) 车辆的首选最大载重。如果车辆的载重超过此值,则会产生费用。
loadLimits costPerUnitAboveSoftMax 数值 超出 softMaxLoad 的每单位负荷的费用。使用 softMaxLoad 时,必须填写此字段。如需详细了解费用,请参阅费用模型这一关键概念。

代码示例

以下示例展示了 loadLimits 的软约束属性的结构:

{
   "loadLimits": {
        "LOAD_TYPE": {
          "softMaxLoad": "LOAD_AMOUNT",
          "costPerUnitAboveSoftMax": COST_PER_UNIT
        }
      }
}