解讀回應

歐洲經濟區 (EEA) 開發人員

Route Optimization API 會傳回相應要求中車輛的路線。系統會將貨件指派給車輛,或視要求的屬性而定,也可能略過這項步驟。

OptimizeToursResponse 訊息 (REST、gRPC) 有兩個主要頂層屬性:

  • routes[] 是每輛車的路線,以及分配給該車的貨物。每個 Route 都包含反映該路線屬性的指標。
  • metrics 是整個回應的匯總指標,涵蓋所有車輛和路線規劃。頂層指標與每條路線的指標包含相同屬性,但值是匯總所有路線的資料。

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

  1. skippedShipments[] 列出未由任何車輛執行的出貨作業。 如果無法在指定限制內執行出貨,或出貨成本超過違規費用,則可以略過出貨。舉例來說,如果出貨商品的取貨或送達時間範圍非常狹窄 timeWindow,車輛可能無法在指定時間範圍內完成拜訪,或不符合成本效益。
  2. validationErrors[] 會指定導致要求無效或無法解決的錯誤,前提是要求的 solvingMode 設為 VALIDATE_ONLY。在一般 DEFAULT_SOLVE 模式中,驗證錯誤會顯示在錯誤訊息中,而不是回應主體。請注意,VALIDATE_ONLY解決模式可一次回報多個錯誤,有助於快速偵錯要求。

路徑屬性

每個 routes[] 項目都是 ShipmentRoute 訊息 (REST、gRPC)。每個 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 (REST、gRPC) 代表對應要求的 VisitRequest (REST、gRPC)。重要 Visit 屬性包括:

  • shipmentIndex 是相應要求中,這個造訪所屬貨運的從零開始計算的索引。
  • 如果拜訪是取貨,則 isPickup 為 true;如果拜訪是送貨,則為 false。如果值為 false,REST 回應會省略這項屬性。
  • visitRequestIndex 是 VisitRequest 的從零開始計算的索引,來自相應要求中的 Shipment.pickups 或 Shipment.deliveries,Visit 代表該索引。如果值為零,REST 回應會省略這項屬性。
  • startTime 是預計開始時間。
  • loadDemands 地圖載入類型,可載入完成 Visit 所需的量。送貨行程的裝載量為負值,表示已從車輛卸下裝載量。

Visit 範例如下:

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

每個 ShipmentRoute 都包含 transitions 的排序清單,代表特定車輛在 visits 之間的行程。重要的 Transition 訊息 (REST、gRPC) 屬性包括:

  • startTime 是車輛開始執行轉換的時間。
  • travelDuration 是車輛完成轉換所需的時間。
  • travelDistanceMeters 是車輛必須行駛的距離 (以公尺為單位),才能完成轉換。
  • trafficInfoUnavailable:指出轉換是否有可用的流量資料。
  • waitDuration 代表車輛閒置等待的時間,之後才能開始下一個 Visit。這可能是因為 下列Visit的start_time
  • totalDuration 是指轉換的總時間長度,包括交通、等待、休息和延誤時間。
  • vehicleLoads 將地圖載重類型對應至車輛在這次轉場期間的載重金額。

Transition 範例如下:

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

如要進一步瞭解 vists 和 transitions 之間的關係,請參閱「取貨和送貨停靠點順序最佳化」和ShipmentRoute參考說明文件 (REST、gRPC)。如要進一步瞭解 Transition 訊息的 routePolyline 和 routeToken 和 Transition 屬性,請參閱「轉換折線和路線權杖」。

指標屬性

Metrics 訊息 (REST、gRPC) 總結了整個解決方案。 部分重要 Metrics 屬性包括:

  • totalCost 是完成路線所產生的總費用。如要進一步瞭解費用,請參閱「費用模型參數」。
  • usedVehicleCount 是解決方案中使用的車輛總數。 如果最佳化工具判斷車輛不需要使用路線,車輛可能會沒有路線。
  • skippedMandatoryShipmentCount 是略過的「必要」出貨次數。強制出貨不會指定如果略過出貨會產生的 penaltyCost。如果無法在指定限制條件下完成強制出貨,仍可略過。如要進一步瞭解費用,請參閱「費用模型參數」。

其他指標會以 AggregatedMetrics 訊息 (REST、gRPC) 形式回報。AggregatedMetrics 訊息類型用於 Metrics.aggregatedRouteMetrics 屬性和 ShipmentRoute.metrics 屬性,Metrics.aggregatedRouteMetrics 包含 OptimizeToursResponse 中所有 ShipmentRoute 匯總的指標。每個 ShipmentRoute.metrics 屬性都包含特定 ShipmentRoute 的指標。

重要 AggregatedMetrics 屬性包括:

  • performedShipmentCount 是指車輛在整個路線上執行的出貨次數。
  • travelDuration 是車輛完成路線時的總行車時間。
  • waitDuration 是車輛完成路線時的總等待時間。
  • delayDuration 是車輛的總延誤時間。除非請求中使用 TransitionAttributes,否則這通常為零。
  • breakDuration 是車輛完成路線時的休息總時數。
  • visitDuration 是指車輛在完成路線期間,執行拜訪作業所花費的總時間。這實際上是適用車輛所指派 Visits 對應 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
    }
  }
}