加载需求和限制

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

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

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

  • 防止车辆超载。
  • 监控车辆载重在货物装载和交付过程中的变化。
  • 优先将重型车辆与重型货物配对。

负载需求和限制在以下属性中指定:

结构

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

基本功能版核对清单

以下核对清单介绍了可避免潜在负载相关错误的基本知识。此列表可帮助您验证请求并排查响应问题。

属性

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

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

负载类型

负载类型是一个字符串键,可同时应用于配送和车辆。单一负载类型适用于运单的负载需求以及车辆的负载限制。

负载类型使用协议缓冲区映射类型语法。在为负载类型命名时,请使用描述负载类型及其单位的标识符。例如:weightKg、volume_gallons、palletcount 或 frequencyDaily。

Load和LoadLimit

Load 和 LoadLimit 对象包含用于定义配送和车辆容量要求的特定属性,下表介绍了这些属性:

对象 父级 属性 物业类型 属性说明
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,这也意味着这辆车只能再载两只狗。

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

请注意,没有一组预定义的类型。在此示例中,您可以将负载类型从狗单位更改为重量单位,以限制狗的重量,也可以将其更改为线性测量值,以限制狗的宽度或高度。这种灵活性使您可以根据自己的特定需求定制负载需求和限制。

请求示例

以下示例展示了包含示例场景值的基本 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 上添加 softMaxLoad 和 costPerUnitAboveSoftMax,将负载限制设置为软约束条件。这样一来,优化器就可以在付出一定代价的情况下超出车辆的最大载重,从而优先完成路线,而不是严格遵守载重限制。

您可以同时使用 maxLoad 和 softMaxLoad 来设置硬性负载限制和软性负载限制。在这种情况下,softMaxLoad 设置可以超出的负载,而 maxLoad 设置无法超出的硬性限制。如果两者都使用,则 maxLoad 必须大于 softMaxLoad。

属性

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

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

代码示例

以下示例展示了 loadLimits 的软限制条件属性的结构:

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