Method: projects.optimizeToursLongRunning

這是 projects.optimizeTours 方法的變體,專為逾時值較大的最佳化作業設計。如果最佳化作業需要幾分鐘以上,建議您使用這個方法,而非 projects.optimizeTours 方法。

傳回的 long-running operation (LRO) 名稱格式為 <parent>/operations/<operation_id>,可用於追蹤運算進度。metadata 欄位類型為 OptimizeToursLongRunningMetadata。如果成功,response 欄位類型為 OptimizeToursResponse。

HTTP 要求

POST https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeToursLongRunning

這個網址使用 gRPC 轉碼語法。

路徑參數

參數
parent

string

必填。要呼叫的目標專案或位置。

格式:

  • projects/{project-id}
  • projects/{project-id}/locations/-

不支援區域 {location-id} 值。

要求主體

要求主體會包含結構如下的資料:

JSON 表示法
{
  "timeout": string,
  "model": {
    object (ShipmentModel)
  },
  "solvingMode": enum (SolvingMode),
  "searchMode": enum (SearchMode),
  "injectedFirstSolutionRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "injectedSolutionConstraint": {
    object (InjectedSolutionConstraint)
  },
  "refreshDetailsRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "interpretInjectedSolutionsUsingLabels": boolean,
  "considerRoadTraffic": boolean,
  "populatePolylines": boolean,
  "populateTransitionPolylines": boolean,
  "allowLargeDeadlineDespiteInterruptionRisk": boolean,
  "useGeodesicDistances": boolean,
  "label": string,
  "geodesicMetersPerSecond": number,
  "maxValidationErrors": integer
}
欄位
timeout

string (Duration format)

如果設定這個逾時時間,伺服器會在逾時時間或同步要求的伺服器期限 (以較早者為準) 之前傳回回應。

對於非同步要求,伺服器會在逾時前產生解決方案 (如果可能)。

model

object (ShipmentModel)

要解決的出貨模型。

solvingMode

enum (SolvingMode)

預設的求解模式為 DEFAULT_SOLVE (0)。

searchMode

enum (SearchMode)

用於解決要求的搜尋模式。

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

引導最佳化演算法,找出與先前解決方案類似的第一個解決方案。

建立第一個解決方案時,模型會受到限制。在第一個解決方案中,任何未在路線上執行的運送作業都會隱含略過,但可能會在後續解決方案中執行。

解決方案必須符合一些基本有效性假設:

  • 所有路徑的 vehicleIndex 都必須在範圍內,且不得重複。
  • 對於所有造訪,shipmentIndex 和 visitRequestIndex 必須在範圍內。
  • 一項運送作業只能在一個路線中參照。
  • 取貨配送貨件的取貨作業必須在配送前完成。
  • 貨件最多只能執行一項替代取件或替代送達服務。
  • 所有路線的時間都會增加 (即vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime)。
  • 運送作業只能在允許的車輛上執行。如果 Shipment.allowed_vehicle_indices 為空白,或 vehicleIndex 包含在 Shipment.allowed_vehicle_indices 中,則允許車輛通行。

如果插入的解決方案不可行,系統不一定會傳回驗證錯誤,而是可能傳回表示不可行的錯誤。

injectedSolutionConstraint

object (InjectedSolutionConstraint)

限制最佳化演算法,找出與先前解決方案類似的最終解決方案。舉例來說,這項功能可用於凍結已完成或即將完成但不得修改的路徑部分。

如果插入的解決方案不可行,系統不一定會傳回驗證錯誤,而是可能傳回表示不可行的錯誤。

refreshDetailsRoutes[]

object (ShipmentRoute)

如果非空白,系統會重新整理指定路線,但不會修改基礎造訪順序或行程時間,只會更新其他詳細資料。這不會求解模型。

自 2020 年 11 月起,這項設定只會填入非空白路線的折線,且 populatePolylines 必須為 true。

傳入路徑的 routePolyline 欄位可能與路徑 transitions 不一致。

這個欄位不得與 injectedFirstSolutionRoutes 或 injectedSolutionConstraint 搭配使用。

Shipment.ignore 和 Vehicle.ignore 對行為沒有影響。無論是否忽略相關運送或車輛,所有非空路線中的所有造訪之間仍會填入折線。

interpretInjectedSolutionsUsingLabels

boolean

如果為 true:

這項解讀適用於 injectedFirstSolutionRoutes、injectedSolutionConstraint 和 refreshDetailsRoutes 欄位。如果要求中的運送或車輛索引在解決方案建立後有所變更 (可能是因為要求中移除或新增了運送或車輛),則可使用這個方法。

如果為 true,下列類別中的標籤在所屬類別中最多只能出現一次:

如果插入解決方案中的 vehicleLabel 與要求車輛不對應,系統會從解決方案中移除對應的路線及其停靠點。如果插入解決方案中的 shipmentLabel 與要求運送不符,系統會從解決方案中移除對應的造訪。如果插入解決方案中的 SkippedShipment.label 與要求運送不對應,系統會從解決方案中移除 SkippedShipment。

從插入的解決方案中移除路線造訪或整條路線,可能會影響隱含限制,導致解決方案變更、驗證錯誤或無法執行。

注意:呼叫端必須確保每個 Vehicle.label (或 Shipment.label) 可不重複識別兩個相關要求中使用的車輛 (或運送) 實體:產生插入解決方案中使用的 OptimizeToursResponse 的過去要求,以及包含插入解決方案的目前要求。上述不重複性檢查不足以保證這項要求。

considerRoadTraffic

boolean

計算 ShipmentRoute 欄位 Transition.travel_duration、Visit.start_time 和 vehicleEndTime、設定 ShipmentRoute.has_traffic_infeasibilities 欄位,以及計算 OptimizeToursResponse.total_cost 欄位時,請考量流量預估值。

populatePolylines

boolean

如果設為 True,系統會在 ShipmentRoute 回應中填入折線。

populateTransitionPolylines

boolean

如果設為 True,系統會在回應 ShipmentRoute.transitions 中填入折線和路線權杖。

allowLargeDeadlineDespiteInterruptionRisk

boolean

如果設定這個值,要求的期限 (請參閱 https://grpc.io/blog/deadlines) 最多可達 60 分鐘。否則,最長期限只有 30 分鐘。請注意,長時間執行的要求中斷風險會大幅提高 (但仍偏低)。

useGeodesicDistances

boolean

如果設為 true,系統會使用測地線距離 (而非 Google 地圖距離) 計算移動距離,並使用測地線距離和 geodesicMetersPerSecond 定義的速度計算移動時間。

label

string

可用來識別這項要求的標籤,會在 OptimizeToursResponse.request_label 中回報。

geodesicMetersPerSecond

number

如果 useGeodesicDistances 為 true,則必須設定這個欄位,並定義用於計算行程時間的速度。值必須至少為 1.0 公尺/秒。

maxValidationErrors

integer

截斷傳回的驗證錯誤數量。除非 solvingMode=VALIDATE_ONLY (請參閱 OptimizeToursResponse.validation_errors 欄位),否則這些錯誤通常會附加至 INVALID_ARGUMENT 錯誤酬載,做為 BadRequest 錯誤詳細資料 (https://cloud.google.com/apis/design/errors#error_details))。預設值為 100,上限為 10,000。

回應主體

如果成功,回應主體會包含 Operation 的執行個體。

授權範圍

需要下列 OAuth 範圍:

  • https://www.googleapis.com/auth/cloud-platform

IAM 權限

需要 parent 資源的下列 IAM 權限:

  • routeoptimization.operations.create

詳情請參閱 IAM 說明文件。