目标

目标属性包括 `ShipmentModel` 中的 `objectives` 以及 `objectives` 中的 `type` 和 `weight`

目标是您可用于指定高级别优化目标的参数,而不是提供费用模型中的具体费用参数。

您可以在单个请求中使用多个目标,并为每个目标指定相对权重,以控制其对整体优化的影响程度。目标会影响您的整个请求,从而影响您的所有车辆和货件。最后,您还可以使用目标来开始开发自己的费用模型,如生成费用模型中所述。

您可以使用目标来控制对路线规划的以下影响:

  • 路线的总行程时间或距离。
  • 所有车辆的总工作时间。
  • 使用的车辆总数。

属性

objectives 属性是 ShipmentModel 中的 Objective 消息类型数组。每个 Objective 都定义了一个特定的优化目标,并包含下表中列出的字段:

字段 类型 说明
type 枚举 指定预定义的优化目标。接受的值如下:
  • DEFAULT:使用一组默认费用来确保基准解决方案,这意味着它可以防止解决方案使用极值来实现目标。系统会自动将 DEFAULT 添加到包含目标的请求中,并以 weight 为 1.0 的方式添加。如果您在请求中主动添加此目标,解决方案将使用您指定的 weight。
  • MIN_DISTANCE:最大限度地缩短总行程。
  • MIN_WORKING_TIME:最大限度地缩短所有车辆的总工作时间。
  • MIN_TRAVEL_TIME:尽可能缩短所有车辆的总行程时间。
  • MIN_NUM_VEHICLES:最大限度地减少所用车辆的数量。
weight 双精度 定义相应目标的相对重要性。使用多个目标时,weight 值用于控制此特定目标对整体路线优化的影响程度,与其他目标相比,此值越高,影响程度越大。可以是任何非负数,无需总和为 1。默认值为 1.0。

示例

本部分包含两种类型的示例:

  • 一个代码示例,用于说明 objectives 数组的结构。
  • 包含 objectives 数组的请求示例。

代码示例

以下示例展示了 objectives 的结构:

"objectives": [
  {
    "type": "OBJECTIVE_TYPE",
    "weight": WEIGHT
  }
]

请求示例

以下示例展示了包含多个目标的基本 optimizeTours 请求的结构,其中 MIN_TRAVEL_TIME 的重要性是 MIN_WORKING_TIME 的 3 倍。

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.42506261000996,
              "longitude": -122.09535511930135
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.42421503206021,
              "longitude": -122.09526063135228
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "travelMode": "DRIVING"
      }
    ],
    "objectives": [
      {
        "type": "MIN_TRAVEL_TIME",
        "weight": 3.0
      },
      {
        "type": "MIN_WORKING_TIME"
      }
    ]
  }
}

生成费用模型

目标是一种快速设置优化目标的方式,但在某些情况下,仅靠目标可能不够具体。如需实现确切的路由目标,您可能需要通过费用模型参数进行精细控制。

您可以先在请求中添加目标,然后使用 TRANSFORM_AND_RETURN_REQUEST 求解模式将请求中的目标转换为费用模型参数,从而开始开发自己的费用模型。

当您使用此求解模式发送请求时,会发生以下情况:

  • 该 API 会将您的目标转换为费用模型参数,并以 processedRequest 的形式返回这些参数。然后,您可以根据需要调整费用模型参数,以微调路线规划。
  • 使用多个目标时,API 会合并所有目标的费用,并根据各自的权重进行调整。
  • 由于该 API 不会为您提供优化后的路线,只会将目标转换为费用模型参数,因此您无需为该请求付费。

示例请求

以下示例展示了使用 MIN_TRAVEL_TIME 目标和 TRANSFORM_AND_RETURN_REQUEST 求解模式的请求:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.42506261000996,
              "longitude": -122.09535511930135
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.42421503206021,
              "longitude": -122.09526063135228
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "travelMode": "DRIVING"
      }
    ],
    "objectives": [
      {
        "type": "MIN_TRAVEL_TIME"
      }
    ]
  },
  "solvingMode": "TRANSFORM_AND_RETURN_REQUEST"
}

示例响应

以下是与上一个请求对应的响应。此响应同时包含生成的费用模型参数和原始目标,以供参考。

{
  "processedRequest": {
    "model": {
      "shipments": [
        {
          "pickups": [
            {
              "arrivalLocation": {
                "latitude": 37.425062610009959,
                "longitude": -122.09535511930135
              }
            }
          ],
          "deliveries": [
            {
              "arrivalLocation": {
                "latitude": 37.424215032060211,
                "longitude": -122.09526063135228
              }
            }
          ]
        }
      ],
      "vehicles": [
        {
          "travelMode": "DRIVING",
          "costPerHour": 30,
          "costPerTraveledHour": 330,
          "costPerKilometer": 0.2
        }
      ],
      "objectives": [
        {
          "type": "MIN_TRAVEL_TIME"
        }
      ]
    },
    "solvingMode": "TRANSFORM_AND_RETURN_REQUEST"
  }
}