负载需求和限制是一种约束,可用于管理容量 。此约束指定了发货批次的所需容量和 车辆的 最大容量,让您可以根据这些约束优化路线分配 。
负载需求和限制可以支持以下目标:
- 防止车辆超载。
- 监控车辆负载在取货和送货时的变化情况。
- 优先考虑将重型车辆与重型货物发货批次配对。
负载需求和限制在以下属性中指定:
loadDemands指定特定发货批次 所需的容量。loadLimits指定给定车辆 的最大容量。
结构
如图所示,负载需求和限制的结构如下:
loadDemands是Shipment的属性。一个Shipment可以有多个负载需求。loadLimits是Vehicle的属性。一个Vehicle可以 有多个负载限制。
基本知识核对清单
以下核对清单介绍了可防止潜在负载相关错误的必要知识。此列表可帮助您验证请求并排查响应问题。
属性
本部分介绍了负载需求和限制的属性,具体如下:
负载类型
负载类型是您同样应用于发货批次和车辆的字符串键。单个负载类型适用于发货批次的负载需求以及车辆的负载限制。
负载类型使用 协议缓冲区映射类型语法。为负载类型命名时,请使用描述负载类型及其单位的标识符。例如:weightKg、volume_gallons、palletcount 或 frequencyDaily。
Load 和 LoadLimit
`Load` 和 `LoadLimit` 对象包含用于
定义发货批次和车辆容量要求的特定属性,下表
介绍了这些属性:
| 对象 | 父级 | 属性 | 物业类型 | 属性说明 |
|---|---|---|---|---|
Load |
loadDemands |
amount |
字符串(int64 格式) | 以指定类型定义发货批次的容量要求。 |
LoadLimit |
loadLimits |
maxLoad |
字符串(int64 格式) | 以指定类型定义车辆的最大负载容量。 |
示例
本部分涵盖三种类型的示例:
代码示例
以下示例展示了负载需求的结构,您可以在其中将
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 只狗,而您只取走 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 } } }