解读响应

Route Optimization API 会返回相应区域内车辆的路线 请求。配送会分配给车辆,也可能会跳过,具体取决于 请求的属性。

OptimizeToursResponse 消息(RESTgRPC)有两个主要顶层 属性:

  • routes[] 是具有指定运单的每辆车的路线。每个 Route 包含反映该单个路由属性的指标。
  • metrics是整个响应的汇总指标, 车辆和路线规划顶级指标包含的属性 路由指标(具有针对所有路由的汇总值)。

某些属性可能不会始终填充,具体取决于优化结果:

  1. skippedShipments[] 会列出非任何车辆的运单。 如果无法在指定的期限内配送,则可以跳过运送 或者执行发货的费用超过其罚款费用。 例如,如果某件货品的自取或送货上门服务范围很小, timeWindow让车辆无法实现或具有成本效益 在要求的时间范围内执行访问。
  2. validationErrors[] 可指定导致请求无效的错误,或 在请求的 solvingMode 设置为 VALIDATE_ONLY。在常规 DEFAULT_SOLVE 模式下,验证错误将 出现在错误消息中,而不是响应正文中。请注意, VALIDATE_ONLY解析模式可以一次报告多个错误, 有助于快速调试请求。

路线属性

每个 routes[] 条目都是一条 ShipmentRoute 消息(RESTgRPC)。每个 ShipmentRoute 表示特定车辆的路线分配: 请求。与其对应项相关的重要 ShipmentRoute 属性 “Vehicle”包括:

  • vehicleIndex 是相应值中 Vehicle 从零开始的索引 请求消息。如果值为零,REST 响应会忽略此属性。
  • vehicleStartTime 是车辆必须开始其路线的时间。
  • vehicleEndTime 是预计车辆完成其下车时间 。

在响应中,routes 将如下所示:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        ...
      ],
      "transitions": [
        ...
      ],
      "metrics": {
        ...
      },
      ...
    }
  ],
  ...
}

每个 ShipmentRoute 都包含一个有序的 visits 列表,车辆将 。每个 VisitRESTgRPC)代表一个 VisitRequestRESTgRPC)。重要的Visit 属性包括:

  • shipmentIndex 是此访问所属运单的索引(从零开始) 。
  • 如果访问为上车点,isPickup 为 true;如果访问为 false,则为 false 。当值为 false 时,REST 响应会忽略此属性。
  • visitRequestIndexVisitRequest 中从零开始的索引 相应请求中的 Shipment.pickupsShipment.deliveries Visit 所代表的对象。如果存在以下情况,则 REST 响应会忽略此属性: 值为零。
  • startTime 是访问的预计开始时间。
  • loadDemands 映射加载类型,用于完成 Visit。加载金额为负数,表示加载访问次数 正在从车上移除

Visit 示例如下所示:

{
  "routes": [
    {
      ...
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        ...
      ],
    },
    ...
  ],
  ...
}

每个 ShipmentRoute 都包含一个有序的 transitions 列表,这些表示 指定车辆在 visits之间的行程。重要的 Transition 消息 (RESTgRPC)属性包括:

  • startTime 是车辆开始执行 过渡效果。
  • travelDuration 是车辆必须行驶的时长 以完成转换。
  • travelDistanceMeters 是车辆必须达到的距离(以米为单位) 以完成转换。
  • trafficInfoUnavailable 表示流量数据是否适用于 过渡效果。
  • waitDuration 表示车辆等待前等待的空闲时间 开始下一个 Visit。这可能是由于start_time 正在关注Visit
  • totalDuration 是转换的总时长(包括旅行) 等待时间、广告插播时间点和延迟时间
  • vehicleLoads 映射加载类型,以加载车辆期间承载的量 转换。

Transition 示例如下所示:

{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}

viststransitions 之间的关系如 取货和递送停止订单优化,以及 ShipmentRoute 参考文档(RESTgRPC)。

指标属性

Metrics 消息(RESTgRPC)总结了整个解决方案。 一些重要的 Metrics 属性包括:

  • totalCost 是完成路线所产生的总费用。了解详情 费用模型参数中的费用。
  • usedVehicleCount 是该解决方案中使用的车辆总数。 如果优化器确定车辆的使用,路线可能为空 没有必要。
  • skippedMandatoryShipmentCount 是系统跳过的 “必需”强制发货未指定penaltyCost, 所产生的费用。强制邮寄商品 如果其性能在指定限制条件下不可行,则会跳过。 如需详细了解费用,请参阅费用模型参数

其他指标会以 AggregatedMetrics 消息 (RESTgRPC)。AggregatedMetrics 消息类型用于 Metrics.aggregatedRouteMetrics 属性,以及用于 ShipmentRoute.metrics 的属性 媒体资源“Metrics.aggregatedRouteMetrics”包含针对所有媒体资源的汇总指标 OptimizeToursResponse 中的 ShipmentRoute。每ShipmentRoute.metrics 属性包含该特定 ShipmentRoute 的指标。

重要的 AggregatedMetrics 属性包括:

  • performedShipmentCount 是车辆完成的装运次数 全程覆盖整条航线
  • travelDuration 是车辆在这段时间内行驶的总时间 完成路线
  • waitDuration 是车辆等待任务的总时间 和路线。
  • delayDuration 是车辆的总延迟时间。这通常是 零,除非在请求中使用 TransitionAttributes
  • breakDuration:车辆在休息期间花费的总时间 完成路线
  • visitDuration 是以下时段的车辆在上门服务期间的 完成路线这实际上是 与 Visit 对应的 VisitRequestVisitRequest.duration 值 分配给相应车辆。
  • totalDuration 是完成车辆行驶所需的总时长 路由。
  • travelDistanceMeters 是车辆在这段时间内行驶的总距离 完成路线
  • maxLoads 将加载类型映射到 沿途任意时间点的交通工具。

Metrics 消息示例如下所示:

{
  "routes": [
    ...
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}

完整示例

构建请求中请求的完整响应示例如下所示: 例如:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        {
          "startTime": "2024-02-13T00:19:31Z",
          "detour": "0s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1151s",
          "travelDistanceMeters": 9599,
          "waitDuration": "0s",
          "totalDuration": "1151s",
          "startTime": "2024-02-13T00:19:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 1,
        "travelDuration": "2322s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "0s",
        "totalDuration": "2322s",
        "travelDistanceMeters": 18603
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 18.603
      },
      "routeTotalCost": 18.603
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}