负载需求和限制是一种可用于管理容量的限制条件。此限制条件指定了运单的所需容量和车辆的最大容量,让您可以根据这些限制条件优化路线分配。
负载需求和限制可支持以下目标:
- 防止车辆超载。
- 监控车辆载重在货物装载和交付过程中的变化。
- 优先将重型车辆与重型货物配对。
负载需求和限制在以下属性中指定:
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 次发货:1第 2 次发货: 3 |
指定所定义负载类型的数量。在此示例中,您定义了两个配送,第一个配送中您要接 1 只狗,第二个配送中您要接 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 } } }