加载需求和限制

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

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

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

  • 防止车辆超载。
  • 监控车辆载荷在货件取货和送货时的变化情况。
  • 优先将重型车辆与重载货件配对。

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

结构

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

基本要素核对清单

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

属性

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

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

载荷类型

载荷类型是您同样应用于货件和车辆的字符串键。单个载荷类型适用于货件的载荷需求以及车辆的载荷限制。

载荷类型使用协议缓冲区映射类型语法。为载荷类型命名时,请使用描述载荷类型及其单位的标识符。例如:weightKgvolume_gallonspalletcountfrequencyDaily

LoadLoadLimit

`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 上添加 softMaxLoadcostPerUnitAboveSoftMax,将载荷限制设置为软性限制。这样,优化器就可以在付出一定费用的情况下超出车辆的最大载荷,优先完成路线,而不是严格遵守载荷限制。

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

属性

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

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

代码示例

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

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