解讀回應

Route Optimization API 會在相應的要求中傳回車輛的路線。視要求的屬性而定,系統可能會將出貨作業指派給車輛,或是略過這些商品。

OptimizeToursResponse 訊息 (RESTgRPC) 有兩個主要的頂層屬性:

  • routes[] 是每輛車的出貨路線。每個 Route 都包含反映個別路線屬性的指標。
  • metrics 是針對所有車輛和路線計畫的完整回應匯總指標。頂層指標包含與每路徑指標相同的屬性,而且匯總所有路徑的值。

視最佳化結果而定,部分房源可能不會一律填入:

  1. skippedShipments[] 會列出尚未進行任何車輛的出貨作業。如果無法在指定限制內執行,或是出貨費用超過罰款,可以略過出貨。舉例來說,如果商品的上車或到貨的 timeWindow 範圍很小,車輛可能無法在指定的時間範圍內,執行拜訪作業且成本低廉。
  2. validationErrors[] 會指定當要求的 solvingMode 設為 VALIDATE_ONLY 時,要求無效或無法解決的錯誤。在一般的 DEFAULT_SOLVE 模式中,驗證錯誤會顯示錯誤訊息,而非回應主體。請注意,VALIDATE_ONLY 解決模式可一次回報多個錯誤,這對於快速偵錯要求非常實用。

路徑屬性

每個 routes[] 項目都是 ShipmentRoute 訊息 (RESTgRPC)。每個 ShipmentRoute 都代表在要求中為特定車輛指派的路線。與對應 Vehicle 相關的重要 ShipmentRoute 屬性包括:

  • vehicleIndex 是對應要求訊息中 Vehicle 的索引 (從零開始)。當值為零時,REST 回應會省略這個屬性。
  • vehicleStartTime 是車輛必須開始行駛路線的時間。
  • vehicleEndTime 是車輛預計完成路線的時間。

routes 的回應會如下所示:

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

每個 ShipmentRoute 都包含一個由車輛完成的 visits 已排序清單。每個 Visit (RESTgRPC) 都代表來自相應要求的 VisitRequest (RESTgRPC)。重要的 Visit 屬性包括:

  • shipmentIndex 是這次造訪在相應要求中所屬的運送索引 (從零開始)。
  • 如果造訪是到上車地點,isPickup 為 true,若造訪的是外送服務,則為 false。如果值為 false,REST 回應會略過這個屬性。
  • visitRequestIndex 是在 Visit 代表的相應要求中,來自 Shipment.pickupsShipment.deliveriesVisitRequest 索引 (從零開始)。當值為零時,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 前,等待的閒置時間。這可能是由於下列 Visitstart_time 所致。
  • totalDuration 是轉場效果的總時間長度,包括旅行、等待、中斷和延遲時間。
  • vehicleLoads 地圖載入類型,用於載入車輛在這段過渡期間的載入量。

Transition 的範例如下:

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

如需 viststransitions 之間的關係說明,請參閱「Pickup 和 Delivery Stop Order Optimization」,以及 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,將 VisitRequest 的所有 VisitRequest.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
    }
  }
}