加载需求和限制

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

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

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

  • 防止车辆超载。
  • 监控车辆负载在取货和送货时的变化情况。
  • 优先考虑将重型车辆与重型货物发货批次配对。

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

  • loadDemands 指定特定发货批次 所需的容量。
  • loadLimits 指定给定车辆 的最大容量。

结构

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

基本知识核对清单

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

属性

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

  • 负载类型 :负载需求和限制之间的共享属性。
  • 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
第二个发货批次:3
指定已定义负载类型的数量。在此示例中,您定义了两个发货批次,第一个发货批次取走一只狗,第二个发货批次取走 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
        }
      }
}