索引
- RouteOptimization(介面)
- AggregatedMetrics(訊息)
- BatchOptimizeToursMetadata(訊息)
- BatchOptimizeToursRequest(訊息)
- BatchOptimizeToursRequest.AsyncModelConfig(訊息)
- BatchOptimizeToursResponse(訊息)
- BreakRule(訊息)
- BreakRule.BreakRequest(訊息)
- BreakRule.FrequencyConstraint(訊息)
- DataFormat(列舉)
- DistanceLimit(訊息)
- GcsDestination(訊息)
- GcsSource(訊息)
- InjectedSolutionConstraint(訊息)
- InjectedSolutionConstraint.ConstraintRelaxation(訊息)
- InjectedSolutionConstraint.ConstraintRelaxation.Relaxation(訊息)
- InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level(列舉)
- InputConfig(訊息)
- Location(訊息)
- OptimizeToursRequest(訊息)
- OptimizeToursRequest.SearchMode(列舉)
- OptimizeToursRequest.SolvingMode(列舉)
- OptimizeToursResponse(訊息)
- OptimizeToursResponse.Metrics(訊息)
- OptimizeToursValidationError(訊息)
- OptimizeToursValidationError.FieldReference(訊息)
- OutputConfig(訊息)
- Shipment(訊息)
- Shipment.Load(訊息)
- Shipment.VisitRequest(訊息)
- ShipmentModel(訊息)
- ShipmentModel.DurationDistanceMatrix(訊息)
- ShipmentModel.DurationDistanceMatrix.Row(訊息)
- ShipmentModel.PrecedenceRule(訊息)
- ShipmentRoute(訊息)
- ShipmentRoute.Break(訊息)
- ShipmentRoute.EncodedPolyline(訊息)
- ShipmentRoute.Transition(訊息)
- ShipmentRoute.VehicleLoad(訊息)
- ShipmentRoute.Visit(訊息)
- ShipmentTypeIncompatibility(訊息)
- ShipmentTypeIncompatibility.IncompatibilityMode(列舉)
- ShipmentTypeRequirement(訊息)
- ShipmentTypeRequirement.RequirementMode(列舉)
- SkippedShipment(訊息)
- SkippedShipment.Reason(訊息)
- SkippedShipment.Reason.Code(列舉)
- TimeWindow(訊息)
- TransitionAttributes(訊息)
- Vehicle(訊息)
- Vehicle.DurationLimit(訊息)
- Vehicle.LoadLimit(訊息)
- Vehicle.LoadLimit.Interval(訊息)
- Vehicle.TravelMode(列舉)
- Vehicle.UnloadingPolicy(列舉)
- Waypoint(訊息)
RouteOptimization
用於最佳化車輛導覽的服務。
特定類型的欄位有效性:
- google.protobuf.Timestamp- 時間以 Unix 時間表示:自 1970-01-01T00:00:00+00:00 起算的秒數。
- 秒數必須介於 [0, 253402300799] 之間,也就是 [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00]。
- nanos 必須設為未設定或設為 0。
 
- google.protobuf.Duration- 秒數必須介於 [0, 253402300799] 之間,也就是 [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00]。
- nanos 必須設為未設定或設為 0。
 
- google.type.LatLng- 緯度必須介於 [-90.0, 90.0] 之間。
- 經度必須介於 [-180.0, 180.0] 的範圍之間。
- 經緯度至少須有一個非零值。
 
| BatchOptimizeTours | 
|---|
| 
 針對一或多個  這個方法是長時間執行作業 (LRO)。系統會以使用者指定的格式,讀取/寫入/寫出最佳化輸入內容 ( 使用者可以輪詢  如果 LRO 的  如果 LRO 的  
 
 | 
| OptimizeTours | 
|---|
| 
 傳送包含  
 目標是將  
 
 | 
AggregatedMetrics
ShipmentRoute (resp. for OptimizeToursResponse over all Transition and/or Visit (resp. over all ShipmentRoute) 元素的匯總指標。
| 欄位 | |
|---|---|
| performed_shipment_count | 
 已完成的出貨數量。請注意,每組接送和送達作業只會計入一次。 | 
| travel_duration | 路線或解決方案的總行程時間。 | 
| wait_duration | 路線或解決方案的總等待時間長度。 | 
| delay_duration | 路線或解決方案的總延遲時間長度。 | 
| break_duration | 路線或解決方案的總休息時間長度。 | 
| visit_duration | 路線或解決方案的總造訪時間長度。 | 
| total_duration | 總時間應等於上述所有時間的總和。對於路線,也對應到:  | 
| travel_distance_meters | 
 路線或解決方案的總行程距離。 | 
| max_loads | 
 在整個路徑 (或解決方案) 中,針對路徑 (或解決方案) 上的每個數量,達成的最大負載量,計算方式為所有  | 
BatchOptimizeToursMetadata
這個類型沒有任何欄位。
BatchOptimizeToursRequest 呼叫的作業中繼資料。
BatchOptimizeToursRequest
要求以非同步作業的形式批次最佳化行程。每個輸入檔案都應包含一個 OptimizeToursRequest,每個輸出檔案則會包含一個 OptimizeToursResponse。這項要求包含讀取/寫入及剖析檔案的資訊。所有輸入和輸出檔案都必須位於同一個專案中。
| 欄位 | |
|---|---|
| parent | 
 必要欄位。要呼叫的目標專案和位置。 格式:*  如果未指定位置,系統會自動選擇區域。 | 
| model_configs[] | 必要欄位。每個購買模型的輸入/輸出資訊,例如檔案路徑和資料格式。 | 
AsyncModelConfig
非同步解決單一最佳化模型的資訊。
| 欄位 | |
|---|---|
| display_name | 
 選用設定。使用者定義的模型名稱,可做為使用者追蹤模型的別名。 | 
| input_config | 必要欄位。輸入模型的相關資訊。 | 
| output_config | 必要欄位。所需的輸出位置資訊。 | 
BatchOptimizeToursResponse
這個類型沒有任何欄位。
回覆 BatchOptimizeToursRequest。在作業完成後,會在長時間執行作業中傳回此值。
BreakRule
產生車輛休息時間的規則 (例如午餐休息時間)。休息時間是指車輛在目前位置處於閒置狀態,無法執行任何拜訪的連續時間。可能會發生中斷的情況如下:
- 在兩次造訪之間的轉換時間 (包括造訪前或造訪後的時間,但不包括造訪期間),在這種情況下,系統會延長兩次造訪之間的對應轉換時間,
- 或在車輛發動前 (車輛可能不會在休息期間發動),這不會影響車輛發動時間。
- 或在車輛結束後 (同樣地,請提供車輛結束時間)。
| 欄位 | |
|---|---|
| break_requests[] | 中斷序列。請參閱  | 
| frequency_constraints[] | 可能會套用多個  | 
BreakRequest
您必須事先知道適用於每輛車的休息時間序列 (即數量和順序)。重複的 BreakRequest 會定義該序列,並按照必須發生的順序排列。兩者的時間範圍 (earliest_start_time / latest_start_time) 可能會重疊,但必須與訂單相容 (系統會檢查這項條件)。
| 欄位 | |
|---|---|
| earliest_start_time | 必要欄位。休息時間開始時間的下限 (包含在內)。 | 
| latest_start_time | 必要欄位。休息時間開始的上限 (包含在內)。 | 
| min_duration | 必要欄位。插播時間長度下限。必須為正數。 | 
FrequencyConstraint
您可以進一步限制上述指定的插播廣告頻率和時間長度,例如強制設下最小插播廣告頻率,例如「每 12 小時至少要插播 1 次廣告」。假設這可解讀為「在任何 12 小時的滑動時間窗格內,至少須有一次至少 1 小時的休息時間」,那麼這個範例會轉譯為以下 FrequencyConstraint:
{
   min_break_duration { seconds: 3600 }         # 1 hour.
   max_inter_break_duration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}
除了 BreakRequest 中已指定的時間區間和最短時間長度外,解決方案中的中斷時間和時間長度都會遵循所有這類限制。
FrequencyConstraint 實際上可能會套用於非連續的廣告插播。舉例來說,以下時程會遵循「每 12 小時 1 小時」的範例:
  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
| 欄位 | |
|---|---|
| min_break_duration | 必要欄位。此限制的插播時間長度下限。非負值。請參閱  | 
| max_inter_break_duration | 必要欄位。路徑中不含  | 
DataFormat
輸入和輸出檔案的資料格式。
| 列舉 | |
|---|---|
| DATA_FORMAT_UNSPECIFIED | 值無效,格式不得為 UNSPECIFIED。 | 
| JSON | JavaScript 物件標記法。 | 
| PROTO_TEXT | 通訊協定緩衝區文字格式。請參閱 https://protobuf.dev/reference/protobuf/textformat-spec/ | 
DistanceLimit
定義可行駛的最大距離。可以是硬式或軟式。
如果定義軟性限制,soft_max_meters 和 cost_per_kilometer_above_soft_max 都必須定義且為非負值。
| 欄位 | |
|---|---|
| max_meters | 
 硬性限制,限制距離不得超過 max_meters。限制值不得為負數。 | 
| soft_max_meters | 
 軟性限制不會強制執行最大距離限制,但如果違反限制,會產生費用,並與模型中定義的其他費用相加,使用相同的單位。 如果已定義,則 soft_max_meters 必須小於 max_meters,且不得為負數。 | 
| cost_per_kilometer_above_soft_max | 
 如果距離超過  費用必須為非負值。 | 
GcsDestination
輸出檔案的寫入位置(Google Cloud Storage)。
| 欄位 | |
|---|---|
| uri | 
 必要欄位。Google Cloud Storage URI。 | 
GcsSource
系統會從這裡讀取輸入檔案的 Google Cloud Storage 位置。
| 欄位 | |
|---|---|
| uri | 
 必要欄位。Google Cloud Storage 物件的 URI,格式為  | 
InjectedSolutionConstraint
在要求中插入的解決方案,其中包含哪些造訪必須受到限制,以及如何限制的資訊。
| 欄位 | |
|---|---|
| routes[] | 要插入的解決方案路徑。原始解決方案可能會省略部分路線。路線和略過的運送作業必須符合  | 
| skipped_shipments[] | 略過要插入的解決方案出貨作業。部分內容可能會從原始解決方案中省略。請參閱  | 
| constraint_relaxations[] | 針對零或多個車輛群組,指定放寬限制的時機和程度。如果這個欄位為空白,則所有非空白的車輛路線都會受到完全限制。 | 
ConstraintRelaxation
針對一組車輛,指定訪客限制的門檻和鬆綁程度。skipped_shipment 欄位中列出的運送作業會遭到略過,也就是無法執行。
| 欄位 | |
|---|---|
| relaxations[] | 所有造訪限制放寬項目,會套用至  | 
| vehicle_indices[] | 
 指定要套用造訪限制  如果  | 
休閒場所
如果 relaxations 為空白,routes 上所有造訪記錄的開始時間和順序都會受到完全限制,且無法在這些路徑中插入或新增新的造訪記錄。此外,除非車輛為空 (即在模型中沒有造訪,且 used_if_route_is_empty 設為 false),否則 routes 中的車輛開始和結束時間會受到完全限制。
relaxations(i).level 會指定套用至符合下列條件的 #j 次訪問的限制放寬程度:
- route.visits(j).start_time >= relaxations(i).threshold_time和
- j + 1 >= relaxations(i).threshold_visit_count
同樣地,如果車輛啟動符合下列條件,系統會將啟動時間延後至 relaxations(i).level:
- vehicle_start_time >= relaxations(i).threshold_time和
- relaxations(i).threshold_visit_count == 0和車輛端會在滿足下列條件時放寬至- relaxations(i).level:
- vehicle_end_time >= relaxations(i).threshold_time和
- route.visits_size() + 1 >= relaxations(i).threshold_visit_count
如要針對符合 threshold_visit_count 或 threshold_time 的造訪次數套用放寬程度,請新增兩個具有相同 level 的 relaxations:一個只設定 threshold_visit_count,另一個只設定 threshold_time。如果造訪符合多個 relaxations 的條件,系統會套用最寬鬆的層級。因此,從車輛開始行駛到依序造訪路線,再到車輛行程結束,放鬆程度會越來越高,也就是說,放鬆程度不會隨著路線的進行而降低。
路線造訪的時間和順序若不符合任何 relaxations 的門檻條件,就會受到完全限制,且無法在這些序列中插入造訪。此外,如果車輛的起點或終點不符合任何放寬條件,則會固定時間,除非車輛為空車。
| 欄位 | |
|---|---|
| level | 在  | 
| threshold_time | 可套用放寬  | 
| threshold_visit_count | 
 系統可在多少次造訪後套用放寬  如果是  | 
層級
表示不同的限制放寬層級,這些層級會套用至符合門檻條件的單一造訪,以及後續的造訪。
下列列舉的順序是依放鬆程度排序。
| 列舉 | |
|---|---|
| LEVEL_UNSPECIFIED | 隱含的預設放寬程度:不放寬任何限制,也就是所有造訪皆受到完全限制。 此值不得在  | 
| RELAX_VISIT_TIMES_AFTER_THRESHOLD | 系統會放寬造訪開始時間和車輛開始/結束時間,但每個造訪仍會綁定至同一輛車輛,且必須遵循造訪順序:在兩次造訪之間或之前,不得插入其他造訪。 | 
| RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD | 與 RELAX_VISIT_TIMES_AFTER_THRESHOLD相同,但訪問序列也已放寬:訪問只能由此車輛執行,但可能不會執行。 | 
| RELAX_ALL_AFTER_THRESHOLD | 與 RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD相同,但車輛也放寬限制:在門檻時間點或之後,訪客可完全免費,且可能不會執行。 | 
InputConfig
指定 [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours] 的輸入內容。
| 欄位 | |
|---|---|
| data_format | 必要欄位。輸入資料格式。 | 
| 聯集欄位 source。必要欄位。source只能是下列其中一項: | |
| gcs_source | Google Cloud Storage 位置。這必須是單一物件 (檔案)。 | 
位置
封裝位置 (地理點和選用的標頭)。
| 欄位 | |
|---|---|
| lat_lng | 航點的地理座標。 | 
| heading | 
 與流量方向相關的指南針方位。這個值用來指定接送和下車地點的道路兩側。方向值的範圍為 0 到 360,其中 0 指定正北方向,90 指定正東方向,以此類推。 | 
OptimizeToursRequest
要求交給導覽最佳化解決方案,該解決方案會定義要解決的運送模型,以及最佳化參數。
| 欄位 | |
|---|---|
| parent | 
 必要欄位。要呼叫的目標專案或位置。 格式:*  如果未指定位置,系統會自動選擇區域。 | 
| timeout | 如果設定了這個逾時時間,伺服器會在逾時時間到期前或同步要求的伺服器期限到期前 (以先到者為準) 傳回回應。 對於非同步要求,伺服器會在逾時前產生解決方案 (如果可行)。 | 
| model | 解決運送模型。 | 
| solving_mode | 根據預設,解題模式為  | 
| search_mode | 用於解決要求的搜尋模式。 | 
| injected_first_solution_routes[] | 引導最佳化演算法,找出與先前解決方案相似的第一個解決方案。 建立第一個解決方案時,模型會受到限制。在第一個解決方案中,系統會隱含略過任何未在路線上執行的運送作業,但可能會在後續解決方案中執行。 解決方案必須滿足一些基本有效性假設: 
 如果注入的解決方案不可行,系統不一定會傳回驗證錯誤,而是可能傳回表示不可行性的錯誤。 | 
| injected_solution_constraint | 限制最佳化演算法,找出與先前解決方案相似的最終解決方案。舉例來說,您可以使用此方法,將已完成或即將完成但不得修改的路線部分凍結。 如果注入的解決方案不可行,系統不一定會傳回驗證錯誤,而是可能傳回表示不可行性的錯誤。 | 
| refresh_details_routes[] | 如果不為空白,系統會重新整理指定路線,但不會修改其基礎的造訪序列或行程時間:只會更新其他詳細資料。這並無法解決模型問題。 截至 2020 年 11 月,這個方法只會填入非空路線的多邊形,且需要  傳入路徑的  這個欄位不得與  
 | 
| interpret_injected_solutions_using_labels | 
 如果為 true: 
 這項解釋適用於  如果為 true,則下列類別中的標籤在該類別中最多只能出現一次: 
 如果插入的解決方案中的  從已插入的解決方案中移除路徑造訪或整個路徑,可能會影響隱含限制,進而導致解決方案變更、驗證錯誤或無法執行。 注意:呼叫端必須確保每個  | 
| consider_road_traffic | 
 在計算  | 
| populate_polylines | 
 如果為 true,回應  | 
| populate_transition_polylines | 
 如果為 true,回應  | 
| allow_large_deadline_despite_interruption_risk | 
 如果設定了這個值,要求的期限 (請參閱 https://grpc.io/blog/deadlines) 最多可達 60 分鐘。否則,最長期限僅為 30 分鐘。請注意,長時間存在的要求有較高 (但仍很低) 的中斷風險。 | 
| use_geodesic_distances | 
 如果為 true,系統會使用大地測量距離 (而非 Google 地圖距離) 計算行程距離,並使用大地測量距離和  | 
| label | 
 可能用於識別此要求的標籤,會回報至  | 
| geodesic_meters_per_second | 
 如果  | 
| max_validation_errors | 
 截斷傳回的驗證錯誤數量。除非 solving_mode=VALIDATE_ONLY: 請參閱  | 
SearchMode
定義搜尋行為的模式,取捨延遲時間與解決方案品質。在所有模式中,系統都會強制執行全域要求期限。
| 列舉 | |
|---|---|
| SEARCH_MODE_UNSPECIFIED | 未指定搜尋模式,等同於 RETURN_FAST。 | 
| RETURN_FAST | 找到第一個可行解決方案後,請停止搜尋。 | 
| CONSUME_ALL_AVAILABLE_TIME | 盡可能尋找更合適的解決方案。 | 
SolvingMode
定義解算器應如何處理要求。在 VALIDATE_ONLY 以外的所有模式中,如果要求無效,您會收到 INVALID_REQUEST 錯誤。請參閱 max_validation_errors,瞭解如何限制傳回的錯誤數量。
| 列舉 | |
|---|---|
| DEFAULT_SOLVE | 解決模型。警告可能會顯示在 [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors] 中。 | 
| VALIDATE_ONLY | 只驗證模型,但不解決模型:盡可能填入 OptimizeToursResponse.validation_errors。 | 
| DETECT_SOME_INFEASIBLE_SHIPMENTS | 只會填入  重要事項:系統只會傳回在預處理期間偵測為不切實際的出貨,而非所有不切實際的出貨。 | 
OptimizeToursResponse
解決巡迴路線最佳化問題後的回應,其中包含每輛車輛所遵循的路線、已略過的貨件,以及解決方案的總費用。
| 欄位 | |
|---|---|
| routes[] | 為每輛車輛計算的路線;第 i 條路線對應至模型中的第 i 輛車輛。 | 
| request_label | 
 如果要求中指定了標籤,則為  | 
| skipped_shipments[] | 略過所有出貨的清單。 | 
| validation_errors[] | 我們獨立偵測到的所有驗證錯誤清單。請參閱「MULTIPLE ERRORS」一節,瞭解  | 
| metrics | 這項解決方案的時間長度、距離和用量指標。 | 
指標
匯總所有路徑的整體指標。
| 欄位 | |
|---|---|
| aggregated_route_metrics | 匯總路線。每個指標都是所有同名  | 
| skipped_mandatory_shipment_count | 
 略過的強制貨件數量。 | 
| used_vehicle_count | 
 使用的車輛數量。注意:如果車輛路線為空白,且  | 
| earliest_vehicle_start_time | 二手車最早的開始時間,計算方式為所有二手車  | 
| latest_vehicle_end_time | 二手車輛的最新結束時間,計算方式為所有二手車輛的  | 
| costs | 
 解決方案的費用,依費用相關要求欄位細分。鍵是相對於輸入 OptimizeToursRequest 的 proto 路徑,例如「model.shipments.pickups.cost」,而值則是相應費用欄位產生的總費用,並在整個解決方案中匯總。換句話說,costs["model.shipments.pickups.cost"] 是解決方案中所有提貨費用的總和。這裡會詳細列出模型中定義的所有費用,但 TransitionAttributes 相關費用除外,因為這類費用自 2022 年 1 月起只會以匯總方式呈報。 | 
| total_cost | 
 解決方案的總費用。成本對應項目中的所有值總和。 | 
OptimizeToursValidationError
說明驗證 OptimizeToursRequest 時發生的錯誤或警告。
| 欄位 | |
|---|---|
| code | 
 驗證錯誤是由一組一律存在的值 ( 其他欄位 (如下方所示) 會提供更多錯誤相關資訊。 MULTIPLE ERRORS:如果發生多項錯誤,驗證程序會嘗試輸出其中幾項。這項程序與編譯器相似,並非完美無瑕。部分驗證錯誤會導致「致命」錯誤,也就是會停止整個驗證程序。 穩定性: 參考資料:所有 (代碼、名稱) 組合的清單: 
 | 
| display_name | 
 錯誤的顯示名稱。 | 
| fields[] | 錯誤內容可能涉及 0 個、1 個 (大多數情況下) 或更多欄位。舉例來說,如要參照車輛 #4 和貨件 #2 的首次取件,可以執行以下操作: 不過,請注意, | 
| error_message | 
 使用者容易理解的錯誤說明字串。 穩定性:不穩定:與特定  | 
| offending_values | 
 可能包含欄位的值。但不一定適用於所有情況。請務必不要依賴這項功能,並且只用於手動模型偵錯。 | 
FieldReference
指定驗證錯誤的內容。FieldReference 一律會參照此檔案中的特定欄位,並遵循相同的階層結構。舉例來說,我們可以使用以下方式指定車輛 #5 的 start_time_windows 元素 #2:
name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }
不過,我們會省略 OptimizeToursRequest 或 ShipmentModel 等頂層實體,以免訊息過於擁擠。
| 欄位 | |
|---|---|
| name | 
 欄位名稱,例如「vehicles」。 | 
| sub_field | 必要時,可遞迴巢狀子欄位。 | 
| 聯集欄位  
 | |
| index | 
 如果是重複欄位,則為該欄位的索引。 | 
| key | 
 若欄位為對應項,則為索引鍵。 | 
OutputConfig
指定 [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours] 結果的目的地。
| 欄位 | |
|---|---|
| data_format | 必要欄位。輸出資料格式。 | 
| 聯集欄位 destination。必要欄位。destination只能是下列其中一項: | |
| gcs_destination | 要寫入輸出內容的 Google Cloud Storage 位置。 | 
運送地址
單一商品的運送作業,從其中一個提貨地點到其中一個送達地點。運送作業才會視為完成,車輛必須先前往其中一個取貨地點 (並相應減少其備用容量),然後再前往其中一個送貨地點 (並相應增加其備用容量)。
| 欄位 | |
|---|---|
| display_name | 
 使用者定義的運送貨物顯示名稱。長度上限為 63 個半形字元,可以使用 UTF-8 字元。 | 
| pickups[] | 與運送作業相關的取貨替代方案集合。如果未指定,車輛只需前往與送貨地點相對應的位置即可。 | 
| deliveries[] | 與運送作業相關的替代運送選項集合。如果未指定,車輛只需前往與接送地點相對應的位置即可。 | 
| load_demands | 
 裝載貨物的負載需求 (例如重量、體積、貨架數量等)。對應檔中的鍵應為描述對應負載類型的 ID,最好也包含單位。例如:"weight_kg"、"volume_gallons"、"pallet_count" 等。如果指定的鍵未顯示在對應的載入中,系統會將該載入視為空值。 | 
| allowed_vehicle_indices[] | 
 可能執行這項運送作業的車輛組合。如果留空,則所有車輛都可能執行該動作。車輛會依據  | 
| costs_per_vehicle[] | 
 指定透過每輛車輛運送這項貨物時產生的費用。如果已指定,則必須具備下列任一條件: 
 這些費用必須與  | 
| costs_per_vehicle_indices[] | 
 
 | 
| pickup_to_delivery_absolute_detour_limit | 指定相較於從上車地點到送達地點的最短路徑,最大絕對繞路時間。如果指定了這個值,則必須為非負值,且運送作業至少必須包含一個取件和一個送達作業。 舉例來說,假設 t 是從所選取的取貨替代方案直接前往所選取的送貨替代方案所需的最短時間。接著,設定  如果在同一筆訂單上同時指定相對和絕對限制,系統會針對每個可能的接送/取件組合,採用較嚴格的限制。自 2017 年 10 月起,系統只會在行程時間不受車輛影響時支援繞道。 | 
| pickup_to_delivery_time_limit | 指定從商品開始取件到開始送達的時間長度上限。如果指定了這項屬性,則該值必須為非負值,且運送作業至少必須包含一個取件和一個送達作業。這不取決於你選取的取貨和送貨替代方案,也不取決於車輛速度。您可以同時指定這項限制和最大繞行限制:解決方案會遵循這兩項規範。 | 
| shipment_type | 
 非空白字串,指定此出貨的「類型」。這項功能可用於定義  與  | 
| label | 
 指定此運送單的標籤。這個標籤會在對應  | 
| ignore | 
 如果為 True,則略過這項出貨作業,但不會套用  如果模型中含有任何  系統允許忽略在  | 
| penalty_cost | 
 如果無法完成運送,這筆罰款會加到路線的整體費用中。如果運送員前往其中一個提貨和送貨地點,系統就會將該筆訂單視為完成。費用可以使用模型中所有其他費用相關欄位使用的單位來表示,且必須為正值。 重要事項:如果未指定這項處罰,系統會視為無限,也就是必須完成出貨。 | 
| pickup_to_delivery_relative_detour_limit | 
 指定相對於從上車地點到送達地點的最短路徑,相對繞路時間的上限。如果指定了這個值,則必須為非負值,且運送作業至少必須包含一個取件和一個送達作業。 舉例來說,假設 t 是從所選取的取貨替代方案直接前往所選取的送貨替代方案所需的最短時間。接著,設定  如果在同一筆訂單上同時指定相對和絕對限制,系統會針對每個可能的接送/取件組合,採用較嚴格的限制。自 2017 年 10 月起,系統只會在行程時間不受車輛影響時支援繞道。 | 
載入
執行訪問時,如果是接送,系統可能會將預先定義的金額加到車輛負載量;如果是送貨,則會從車輛負載量中扣除該金額。這則訊息會定義這筆金額。詳情請參閱《load_demands》。
| 欄位 | |
|---|---|
| amount | 
 執行相應造訪的車輛載重量會有所不同。由於這是整數,建議使用者選擇適當的單位,以免精確度降低。必須大於或等於 0。 | 
VisitRequest
可透過車輛完成的訪問要求:包含一個或兩個地理位置 (請參閱下方說明)、以時間窗口表示的開始和結束時間,以及服務時間長度 (車輛抵達取貨或送貨地點所需的時間)。
| 欄位 | |
|---|---|
| arrival_location | 車輛執行此  | 
| arrival_waypoint | 車輛執行這項  | 
| departure_location | 車輛完成這個  | 
| departure_waypoint | 車輛完成這個  | 
| tags[] | 
 指定附加至造訪要求的標記。不得使用空字串或重複的字串。 | 
| time_windows[] | 限制造訪時間的時間區間。請注意,車輛可能會在到達時間回溯期過後離開,也就是說,到達時間 + 車程時間不一定會在回溯期內。如果車輛在  如果沒有  時段必須不重疊,也就是說,每個時段都不能與其他時段重疊或相鄰,且必須依遞增順序排列。 只有在單一時間範圍內,才能設定  | 
| duration | 行程時間,也就是車輛從抵達到離開所需的時間 (會加入可能的等候時間;請參閱  | 
| cost | 
 在車輛路線上為這項拜訪要求提供服務的費用。你可以使用這項功能,為每項替代取貨或運送服務支付不同的費用。這個成本必須與  | 
| load_demands | 
 載入此造訪要求的需求。這與  | 
| visit_types[] | 
 指定造訪類型。這項資訊可用於分配車輛完成這次拜訪所需的額外時間 (請參閱  一個類型只能出現一次。 | 
| label | 
 指定這個  | 
| avoid_u_turns | 
 指定是否應避免在該地點的駕駛路線上進行 U 轉。系統會盡力避免 U 形迴轉,但無法保證完全避免。這是實驗性功能,行為可能會變更。 | 
ShipmentModel
運送模型包含一組運送作業,必須由一組車輛執行,同時盡可能降低整體成本,也就是下列項目的總和:
- 車輛路線的費用 (所有車輛的總時間費用、每趟行程費用和固定費用總和)。
- 未完成出貨的處罰。
- 運送作業的全球持續時間成本
| 欄位 | |
|---|---|
| shipments[] | 模型中必須執行的運送作業集合。 | 
| vehicles[] | 可用於執行拜訪的車輛組合。 | 
| global_start_time | 模型的全球開始和結束時間:系統不會將範圍外的時間視為有效時間。 模型的時間跨度不得超過一年,也就是  使用  | 
| global_end_time | 如果未設定,系統會使用 1971 年 1 月 1 日 00:00:00 世界標準時間 (即秒數:31536000,奈秒:0) 做為預設值。 | 
| global_duration_cost_per_hour | 
 整體企劃書的「全球時間長度」是指所有車輛最早有效開始時間和最晚有效結束時間的差異。使用者可以為該數量指派每小時成本,以便盡早完成工作。這個成本必須與  | 
| duration_distance_matrices[] | 指定模型中使用的時間和距離矩陣。如果這個欄位空白,系統會根據  使用範例: 
 
  | 
| duration_distance_matrix_src_tags[] | 
 定義時間長度和距離矩陣來源的標記; 標記對應至  | 
| duration_distance_matrix_dst_tags[] | 
 定義時間和距離矩陣目的地的標記; 標記對應至  | 
| transition_attributes[] | 新增至模型的轉場屬性。 | 
| shipment_type_incompatibilities[] | 不相容的 shipment_types 組合 (請參閱  | 
| shipment_type_requirements[] | 
 | 
| precedence_rules[] | 模型中必須強制執行的優先順序規則集。 | 
| max_active_vehicles | 
 限制有效車輛數量上限。如果車輛的路線至少執行一筆運送作業,就會視為有效。在駕駛人數少於車輛數量,且車隊車輛種類不一的情況下,您可以使用這個選項限制路線數量。系統就會選取最適合的車輛子集。必須為正值。 | 
DurationDistanceMatrix
指定從造訪和車輛起點到造訪和車輛終點的時間和距離矩陣。
| 欄位 | |
|---|---|
| rows[] | 指定時間長度和距離矩陣的資料列。必須與  | 
| vehicle_start_tag | 
 標記定義這個時間長度和距離矩陣適用於哪些車輛。如果留空,則會套用至所有車輛,且只能有單一矩陣。 每個車輛啟動都必須與單一矩陣相符,也就是說,其中的  所有矩陣都必須有不同的  | 
列
指定時間長度和距離矩陣的資料列。
| 欄位 | |
|---|---|
| durations[] | 特定資料列的時間長度值。必須與  | 
| meters[] | 
 特定資料列的距離值。如果模型中沒有任何成本或限制參照距離,可以將這個屬性設為空白;否則,這個屬性必須包含與  | 
PrecedenceRule
兩個事件之間的優先順序規則 (每個事件都是提貨或出貨):第二個事件必須在第一個事件開始後至少 offset_duration 才會開始。
多個優先順序可以參照相同 (或相關) 事件,例如「B 的取件發生在 A 送達後」和「C 的取件發生在 B 取件後」。
此外,優先順序只會在兩次出貨都執行時才會套用,否則會遭到忽略。
| 欄位 | |
|---|---|
| first_is_delivery | 
 指出「first」事件是否為放送事件。 | 
| second_is_delivery | 
 指出「第二」事件是否為傳送事件。 | 
| offset_duration | 「first」和「second」事件之間的偏移量。可以是負值。 | 
| first_index | 
 「first」事件的出貨索引。必須指定這個欄位。 | 
| second_index | 
 「second」事件的出貨索引。必須指定這個欄位。 | 
ShipmentRoute
車輛路線可沿著時間軸分解,如下所示 (假設有 n 次造訪):
  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end
請注意,我們會區分以下兩種情況:
- 「準時事件」,例如車輛的開始和結束時間,以及每次拜訪的開始和結束時間 (即到達和離開)。這些事件會在特定秒數發生。
- 「時間間隔」,例如造訪本身和造訪之間的轉換。雖然時間間隔有時可能會是零持續時間 (也就是開始和結束時間相同),但通常會是正值。
不變量:
- 如果有 n 次造訪,就會有 n+1 次轉換。
- 每次造訪都會在前後各加上一個轉換 (同一個索引),並在後方加上一個轉換 (索引 + 1)。
- 車輛啟動一律會接著轉換 #0。
- 車輛結束時,一律會先執行轉場 #n。
放大來看,以下是 Transition 和 Visit 的運作方式:
---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end
最後,我們來看看如何在轉場期間安排 TRAVEL、BREAKS、DELAY 和 WAIT。
- 不會重疊。
- 延遲時間是唯一值,且必須在下次造訪 (或車輛結束) 之前,連續一段時間。因此,只要知道延遲時間長度,就能瞭解其開始和結束時間。
- BREAKS 是連續且不重疊的時間段落。回應會指定每個插播廣告的開始時間和時間長度。
- TRAVEL 和 WAIT 是「可搶先」的狀態:在這個轉換期間,可以多次中斷這兩種狀態。用戶端可以假設行程會「盡快」發生,且「等待」會填滿剩餘時間。
複雜的範例:
                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
| 欄位 | |
|---|---|
| vehicle_index | 
 執行路線的車輛,可透過來源  | 
| vehicle_label | 
 執行此路線的車輛標籤,等於  | 
| vehicle_start_time | 車輛開始行駛的時間。 | 
| vehicle_end_time | 車輛完成路線的時間。 | 
| visits[] | 代表路線的排序造訪序列。visits[i] 是路線的第 i 次造訪。如果這個欄位為空白,系統會將車輛視為未使用。 | 
| transitions[] | 路線的轉場效果排序清單。 | 
| has_traffic_infeasibilities | 
 如果  由於交通狀況,預估的到達時間  | 
| route_polyline | 路線的編碼折線表示法。只有在  | 
| breaks[] | 這條路線的車輛預定休息時間。 | 
| metrics | 此路線的時間長度、距離和載入指標。 | 
| route_costs | 
 路線的費用,依費用相關要求欄位細分。鍵是相對於輸入 OptimizeToursRequest 的 proto 路徑,例如「model.shipments.pickups.cost」,而值則是相應費用欄位產生的總費用,並在整個路線上進行匯總。換句話說,costs["model.shipments.pickups.cost"] 是路線上所有提貨費用的總和。這裡會詳細列出模型中定義的所有費用,但 TransitionAttributes 相關費用除外,因為這類費用自 2022 年 1 月起只會以匯總方式呈報。 | 
| route_total_cost | 
 路線的總費用。費用圖表中所有費用的總和。 | 
休息時間
代表執行中斷點的資料。
| 欄位 | |
|---|---|
| start_time | 廣告插播的開始時間。 | 
| duration | 休息時間長度。 | 
EncodedPolyline
折線的編碼表示法。如要進一步瞭解多邊形編碼,請參閱以下網頁:https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding。
| 欄位 | |
|---|---|
| points | 
 代表折線編碼點的字串。 | 
轉移
在路徑上兩個事件之間的轉換。請參閱 ShipmentRoute 的說明。
如果車輛沒有 start_location 和/或 end_location,則對應的移動指標為 0。
| 欄位 | |
|---|---|
| travel_duration | 這段期間的旅遊時間。 | 
| travel_distance_meters | 
 轉換期間移動的距離。 | 
| traffic_info_unavailable | 
 當透過  | 
| delay_duration | 套用至此轉場效果的延遲時間總和。如果有延遲時間,則會在下一個事件 (造訪或車輛結束) 之前的  | 
| break_duration | 在這個轉換期間發生的片段持續時間總和 (如有)。每個廣告插播的開始時間和持續時間詳細資料會儲存在  | 
| wait_duration | 在轉換期間等待的時間。等待時間長度與閒置時間相對應,不包含休息時間。另請注意,這段等待時間可能會分為數個不連續的間隔。 | 
| total_duration | 轉場效果的總時間長度 (僅供參考)。等於: 
 | 
| start_time | 此轉場效果的開始時間。 | 
| route_polyline | 轉換期間所遵循路線的編碼折線表示法。只有在  | 
| vehicle_loads | 
 在這個轉換期間載入的車輛,每個類型都會顯示在該車輛的  在第一次轉換期間的負載,是車輛路線的起始負載。接著,在每次造訪後,系統會根據造訪是取件或送件,增加或減少造訪的  | 
VehicleLoad
針對特定類型,回報車輛在路線某處的實際負載量 (請參閱 Transition.vehicle_loads)。
| 欄位 | |
|---|---|
| amount | 
 車輛的負載量 (以指定類型為準)。負載單位通常會以類型表示。詳情請參閱《 | 
前往
在路線中執行的造訪。這項拜訪對應至 Shipment 的取貨或送貨。
| 欄位 | |
|---|---|
| shipment_index | 
 來源  | 
| is_pickup | 
 如果為 true,則表示該造訪對應至  | 
| visit_request_index | 
 
 | 
| start_time | 訪客開始造訪的時間。請注意,車輛可能會提早抵達造訪地點。時間與  | 
| load_demands | 
 總訪客負載需求是出貨和訪客要求  | 
| detour | 由於在造訪前路線上有其他貨件,以及由於時間窗口導致的潛在等待時間,因此產生額外的繞路時間。如果是送貨行程,系統會從對應的接送行程計算繞路距離,計算方式如下: 否則,系統會根據車輛   | 
| shipment_label | 
 如果  | 
| visit_label | 
 如果  | 
| injected_solution_location_token | 
 代表造訪地點資訊的不透明權杖。 如果  | 
ShipmentTypeIncompatibility
根據 shipment_type 指定不同出貨之間的不相容性。系統會根據不相容模式,限制在同一條路線顯示不相容的貨件。
| 欄位 | |
|---|---|
| types[] | 
 不相容類型的清單。兩個出貨項目在列出的  | 
| incompatibility_mode | 套用至不相容項目的模式。 | 
IncompatibilityMode
定義在同一條路線上,不相容的運送作業如何顯示。
| 列舉 | |
|---|---|
| INCOMPATIBILITY_MODE_UNSPECIFIED | 未指定不相容模式。請一律不要使用這個值。 | 
| NOT_PERFORMED_BY_SAME_VEHICLE | 在這種模式下,兩個不相容的貨物無法共用同一輛車輛。 | 
| NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY | 對於兩個使用  
 | 
ShipmentTypeRequirement
根據 shipment_type 指定不同出貨之間的規定。需求的具體內容則由需求模式定義。
| 欄位 | |
|---|---|
| required_shipment_type_alternatives[] | 
 
 | 
| dependent_shipment_types[] | 
 所有貨物類型在  注意:系統不允許要求鏈結,例如  | 
| requirement_mode | 套用至需求的模式。 | 
RequirementMode
定義路線上依附運送的顯示方式。
| 列舉 | |
|---|---|
| REQUIREMENT_MODE_UNSPECIFIED | 未指定的規定模式。請一律不要使用這個值。 | 
| PERFORMED_BY_SAME_VEHICLE | 在這種模式下,所有「依附」運送作業都必須與至少一個「必要」運送作業共用相同的車輛。 | 
| IN_SAME_VEHICLE_AT_PICKUP_TIME | 在  因此,「依附」貨件取件必須具備下列其中一種條件: 
 | 
| IN_SAME_VEHICLE_AT_DELIVERY_TIME | 與先前相同,但「依附」運送作業必須在送達時,與「必要」運送作業一同運送。 | 
SkippedShipment
指定解決方案中未執行的出貨作業詳細資料。對於簡單的情況和/或我們能夠找出略過的原因,我們會在此處回報原因。
| 欄位 | |
|---|---|
| index | 
 該索引會對應至來源  | 
| label | 
 如果  | 
| reasons[] | 列出略過運送的原因。請參閱  | 
原因
如果我們可以說明出貨作業未完成的原因,會列在這個頁面。如果所有車輛的原因不同,reason 就會有多個元素。跳過的出貨單不得有重複的原因,也就是說,除了 example_vehicle_index 以外,所有欄位都必須相同。範例:
reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 1
  example_exceeded_capacity_type: "Apples"
}
reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 3
  example_exceeded_capacity_type: "Pears"
}
reasons {
  code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
  example_vehicle_index: 1
}
跳過的運送作業與所有車輛都不相容。每輛車輛的原因可能不同,但至少有一輛車輛的「蘋果」容量會超出 (包括車輛 1)、至少有一輛車輛的「梨」容量會超出 (包括車輛 3),且至少有一輛車輛的距離限制會超出 (包括車輛 1)。
| 欄位 | |
|---|---|
| code | 請參閱程式碼的註解。 | 
| example_exceeded_capacity_type | 
 如果原因代碼為  | 
| example_vehicle_index | 
 如果原因與貨物與車輛不相容有關,這個欄位會提供相關車輛的索引。 | 
程式碼
用來識別原因類型的代碼。這裡的順序沒有意義。特別是,如果兩者都適用,它不會指出在解決方案中,某個原因會出現在另一個原因之前。
| 列舉 | |
|---|---|
| CODE_UNSPECIFIED | 請勿使用此值。 | 
| NO_VEHICLE | 模型中沒有車輛,因此無法運送所有貨物。 | 
| DEMAND_EXCEEDS_VEHICLE_CAPACITY | 出貨需求超過某些容量類型的車輛容量,其中之一是 example_exceeded_capacity_type。 | 
| CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT | 執行這項運送作業所需的最短距離 (即從車輛的  請注意,我們會使用大地測量距離進行這項計算。 | 
| CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT | 執行這項運送作業所需的最短時間 (包括行車時間、等待時間和服務時間) 超過車輛的  注意:系統會以最佳情況計算行程時間,也就是以測地線距離 x 36 公尺/秒 (約 130 公里/小時) 計算。 | 
| CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT | 與上述相同,但我們只會比較最短行程時間和車輛的 travel_duration_limit。 | 
| CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS | 如果車輛在最早的開始時間開始運送,則在最佳情況下 (請參閱 CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT瞭解時間計算方式),車輛將無法執行這項運送作業:總時間會使車輛在最晚的結束時間過後才結束。 | 
| VEHICLE_NOT_ALLOWED | 貨運的 allowed_vehicle_indices欄位並未留空,且這輛車輛不屬於該貨運。 | 
TimeWindow
時間窗可限制事件的時間,例如造訪的到達時間,或車輛的開始和結束時間。
硬性時間範圍邊界 start_time 和 end_time 會強制執行事件的最早和最晚時間,例如 start_time <= event_time <=
          end_time。軟性時間回溯期下限 soft_start_time 表示事件發生時機為 soft_start_time 或之後,發生時間與事件發生前 soft_start_time 的時間間隔成正比,軟性時間回溯期上限 soft_end_time 表示偏好在 soft_end_time 當天或之前發生事件,發生事件的時間越晚,所需成本就越高。soft_end_timestart_time、end_time、soft_start_time 和 soft_end_time 應在全球時間限制內 (請參閱 ShipmentModel.global_start_time 和 ShipmentModel.global_end_time),並應遵守下列規定:
  0 <= `start_time` <= `end_time` and
  0 <= `start_time` <= `soft_start_time` and
  0 <= `soft_end_time` <= `end_time`.
| 欄位 | |
|---|---|
| start_time | 硬性時段開始時間。如果未指定,則會設為  | 
| end_time | 硬性時間範圍的結束時間。如果未指定,則會設為  | 
| soft_start_time | 時間範圍的軟性開始時間。 | 
| soft_end_time | 時間範圍的軟性結束時間。 | 
| cost_per_hour_before_soft_start_time | 
 如果事件發生時間在 soft_start_time 之前,系統會將每小時費用加進模型中的其他費用,計算方式如下: 這個費用必須為正值,且只有在已設定 soft_start_time 時才能設定這個欄位。 | 
| cost_per_hour_after_soft_end_time | 
 如果事件發生在  這個費用必須為正值,且只有在設定  | 
TransitionAttributes
指定路徑上兩次連續造訪之間的轉換屬性。同一個轉換可能會套用多個 TransitionAttributes:在這種情況下,所有額外費用會加總,並套用最嚴格的限制或限制 (遵循自然的「AND」語意)。
| 欄位 | |
|---|---|
| src_tag | 
 定義這些屬性套用至 (src->dst) 轉場的組合。 來源訪客或車輛啟動活動的資料是否符合條件,取決於  | 
| excluded_src_tag | 
 請參閱  | 
| dst_tag | 
 只有在  | 
| excluded_dst_tag | 
 請參閱  | 
| cost | 
 指定執行此轉換作業的費用。此值的單位與模型中的所有其他成本相同,且不得為負數。這筆費用會加上所有現有費用。 | 
| cost_per_kilometer | 
 指定在執行這項轉換作業時,以每公里為單位的費用套用於行駛的距離。會加總車輛上指定的所有  | 
| distance_limit | 指定執行此轉場效果時的移動距離限制。 自 2021 年 6 月起,我們只支援軟性上限。 | 
| delay | 指定執行這項轉換時的延遲時間。 這項延遲一律會發生在完成來源造訪「後」和開始目的地造訪「前」。 | 
車輛
模擬出貨問題中的車輛。解決運送問題時,系統會為這輛車輛建立從 start_location 到 end_location 的路線。路線是指造訪記錄的序列 (請參閱 ShipmentRoute)。
| 欄位 | |
|---|---|
| display_name | 
 使用者定義的車輛顯示名稱。長度上限為 63 個半形字元,可以使用 UTF-8 字元。 | 
| travel_mode | 行駛模式會影響車輛可行駛的道路和速度。另請參閱  | 
| start_location | 車輛開始載運貨物的地理位置。如未指定,車輛會在第一趟上車地點開始行駛。如果運送模型含有時間和距離矩陣,請勿指定  | 
| start_waypoint | 路徑點代表車輛在取件前所在的地理位置。如果未指定  | 
| end_location | 車輛完成最後一次  | 
| end_waypoint | 路標代表車輛完成最後一次  | 
| start_tags[] | 
 指定附加至車輛路線起點的標記。 不得使用空字串或重複的字串。 | 
| end_tags[] | 
 指定附加在車輛路線結尾的標記。 不得使用空字串或重複的字串。 | 
| start_time_windows[] | 車輛可能從出發地點出發的時間範圍。必須在全球時間限制範圍內 (請參閱  屬於相同重複欄位的時間範圍必須不重疊,也就是說,每個時間範圍都不能與其他時間範圍重疊或相鄰,且必須按時間順序排列。 只有在單一時間範圍內,才能設定  | 
| end_time_windows[] | 車輛抵達目的地所需的時間範圍。必須在全球時間限制範圍內 (請參閱  屬於相同重複欄位的時間範圍必須不重疊,也就是說,每個時間範圍都不能與其他時間範圍重疊或相鄰,且必須按時間順序排列。 只有在單一時間範圍內,才能設定  | 
| unloading_policy | 車輛的卸載政策。 | 
| load_limits | 
 車輛的容量 (例如重量、體積、貨架數量)。對應表中的鍵是負載類型的 ID,與  | 
| cost_per_hour | 
 車輛費用:所有費用加總,且必須與  車輛路線的每小時費用。這筆費用會套用到路線的總用時,包括行程時間、等候時間和拜訪時間。使用  | 
| cost_per_traveled_hour | 
 車輛路線的每小時行駛費用。這項費用只會套用在路線的行程時間 (即  | 
| cost_per_kilometer | 
 車輛行駛路線的每公里費用。這筆費用會套用至  | 
| fixed_cost | 
 如果這輛車輛用於處理運送作業,就會收取固定費用。 | 
| used_if_route_is_empty | 
 這個欄位只會套用至路線未提供任何貨運服務的車輛。指出在這種情況下,是否應將車輛視為二手車。 如果為 true,即使車輛沒有運送任何貨物,也會從起點前往終點,且會考量從起點到終點的時間和距離成本。 否則,車輛不會從起點移動到終點,且系統不會為該車輛排定  | 
| route_duration_limit | 限制會套用至車輛路線的總時間。在特定  | 
| travel_duration_limit | 套用至車輛路線行駛時間的限制。在特定  | 
| route_distance_limit | 套用至車輛路線總距離的限制。在指定的  | 
| extra_visit_duration_for_visit_type | 
 指定從 visit_types 字串到持續時間的對應項目。時間長度是指在指定  如果造訪要求包含多種類型,地圖會為每種類型新增時間長度。 | 
| break_rule | 說明要對這輛車輛強制執行的休息時間表。如果為空白,則不會為這輛車輛安排休息時間。 | 
| label | 
 指定此車輛的標籤。這個標籤會在回應中以對應  | 
| ignore | 
 如果為 true, 如果在  如果運送作業是由  | 
| travel_duration_multiple | 
 指定可用於增加或減少此車輛行駛時間的乘數。舉例來說,如果將此值設為 2.0,表示這輛車輛的速度較慢,且行駛時間是標準車輛的兩倍。這個係數不會影響造訪時間長度。但如果指定  警告:在套用這個倍數後,但在執行任何數值運算之前,系統會將行程時間四捨五入至最近的秒數,因此倍數過小可能會導致精確度降低。 另請參閱下方的  | 
DurationLimit
定義車輛路線的時間上限。可以是硬式或軟式。
定義軟性上限欄位時,必須一併定義軟性上限門檻及其相關費用。
| 欄位 | |
|---|---|
| max_duration | 硬性限制,限制片段長度不得超過 max_duration。 | 
| soft_max_duration | 軟性限制不會強制執行時間長度上限,但違反規定時會導致路線產生費用。這項費用會與模型中定義的其他費用相加,並使用相同的單位。 如果已定義, | 
| quadratic_soft_max_duration | 軟性限制不會強制執行最大時間長度限制,但如果違反限制,路線就會產生費用,且費用會隨著時間呈現平方關係。這項費用會與模型中定義的其他費用相加,並使用相同的單位。 如果已定義, 
 | 
| cost_per_hour_after_soft_max | 
 違反  費用必須為非負值。 | 
| cost_per_square_hour_after_quadratic_soft_max | 
 違反  如果時間長度低於門檻,額外費用為 0,否則費用取決於時間長度,如下所示: 費用必須為非負值。 | 
LoadLimit
定義適用於車輛的負載限制,例如「這輛貨車只能載運 3500 公斤」。詳情請參閱《load_limits》。
| 欄位 | |
|---|---|
| soft_max_load | 
 負載的軟性限制。詳情請參閱《 | 
| cost_per_unit_above_soft_max | 
 如果載重量超過這輛車輛路線的  | 
| start_load_interval | 車輛在路線起點的允許載客量間隔。 | 
| end_load_interval | 車輛在路線結束時可接受的載客量間隔。 | 
| max_load | 
 可接受的最大負載量。 | 
時間間隔
可接受的負載量間隔。
| 欄位 | |
|---|---|
| min | 
 | 
| max | 
 可接受的最大負載。必須大於或等於 0。如果未指定,則此訊息不會限制最大負載。如果同時指定這兩個值, | 
TravelMode
車輛可使用的行駛模式。
這些應為 Google 地圖平台路線偏好 API 的部分交通模式,請參閱:https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode。
| 列舉 | |
|---|---|
| TRAVEL_MODE_UNSPECIFIED | 未指定的交通方式,等同於 DRIVING。 | 
| DRIVING | 與駕駛路線相對應的交通模式 (汽車、...)。 | 
| WALKING | 步行路線對應的交通方式。 | 
UnloadingPolicy
車輛卸貨方式的政策。僅適用於同時包含自取和運送的貨件。
其他運送作業可在路線上的任何位置執行,不受 unloading_policy 影響。
| 列舉 | |
|---|---|
| UNLOADING_POLICY_UNSPECIFIED | 未指定卸貨政策;必須在相應的接送後才可送達。 | 
| LAST_IN_FIRST_OUT | 必須以相反的順序進行配送 | 
| FIRST_IN_FIRST_OUT | 運送作業必須按照取貨順序進行 | 
途經點
封裝路線點。路標會標示 VisitRequest 的到達和離開位置,以及車輛的起點和終點。
| 欄位 | |
|---|---|
| side_of_road | 
 選用設定。表示這個路線控點的位置,是為了讓車輛偏好停靠在道路的特定側邊。設定這個值後,路線會經過該位置,讓車輛停在偏離道路中心的路邊。這個選項不適用於「步行」交通模式。 | 
| 聯集欄位 location_type。表示位置的方式有很多種。location_type只能是下列其中一項: | |
| location | 使用地理座標指定的點,包括選用的標頭。 | 
| place_id | 
 與路標相關聯的 POI 地點 ID。 |