- JSON 表示法
- Shipment
- VisitRequest
- LatLng
- 路線點
- Location
- TimeWindow
- 車輛
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- 間隔
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- 目標
- 類型
- DurationDistanceMatrix
- 列
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
運送模組包含一組運送作業,必須由一組車輛執行,同時盡可能降低整體成本,也就是下列項目的總和:
- 車輛路線的費用 (所有車輛的總時間費用、每單位時間費用和固定費用總和)。
- 未完成出貨的處罰。
- 運送作業的全球持續時間成本
JSON 表示法 |
---|
{ "shipments": [ { object ( |
欄位 | |
---|---|
shipments[] |
模型中必須執行的運送作業集合。 |
vehicles[] |
可用於執行拜訪的車輛組合。 |
objectives[] |
這個模型的目標集合,我們會將這些目標轉換為費用。如果輸入模型不為空白,則必須是免費的。如要取得經過修改的請求,請使用 實驗功能:詳情請參閱 https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request。 |
globalStartTime |
模型的全球開始和結束時間:系統不會將範圍外的時間視為有效時間。 模型的時間跨度不得超過一年,也就是 使用 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: |
globalEndTime |
如果未設定,系統會使用 1971 年 1 月 1 日 00:00:00 世界標準時間 (即秒數:31536000,奈秒:0) 做為預設值。 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: |
globalDurationCostPerHour |
整體企劃書的「全球時間長度」是所有車輛最早有效開始時間和最晚有效結束時間的差距。使用者可以為該數量指派每小時成本,以便盡早完成工作。此費用必須與 |
durationDistanceMatrices[] |
指定模型中使用的時間和距離矩陣。如果這個欄位空白,系統會根據 使用範例:
|
durationDistanceMatrixSrcTags[] |
定義時間長度和距離矩陣來源的標記; 標記對應至 |
durationDistanceMatrixDstTags[] |
定義時間和距離矩陣目的地的標記; 標記對應至 |
transitionAttributes[] |
新增至模型的轉場屬性。 |
shipmentTypeIncompatibilities[] |
不相容的 shipment_types 組合 (請參閱 |
shipmentTypeRequirements[] |
|
precedenceRules[] |
模型中必須強制執行的優先順序規則集。 重要事項:使用優先順序規則會限制可最佳化的問題大小。使用包含多個出貨的優先順序規則的要求可能會遭到拒絕。 |
maxActiveVehicles |
限制有效車輛數量上限。如果車輛路線至少執行一筆運送作業,就會視為處於運作狀態。在駕駛人數少於車輛數量,且車隊車輛種類不一的情況下,您可以使用這個選項限制路線數量。系統會選取最適合的車輛子集,必須為正值。 |
運送地址
單一商品的運送作業,從其中一個提貨地點到其中一個送達地點。為了讓系統將運送作業視為已完成,一輛專屬車輛必須先前往其中一個取貨地點 (並相應減少其備用容量),然後再前往其中一個送達地點 (並相應重新增加其備用容量)。
JSON 表示法 |
---|
{ "displayName": string, "pickups": [ { object ( |
欄位 | |
---|---|
displayName |
使用者定義的運送作業顯示名稱。長度上限為 63 個半形字元,可以使用 UTF-8 字元。 |
pickups[] |
與運送作業相關的取貨替代方案集合。如果未指定,車輛只需前往與送貨地點相對應的位置即可。 |
deliveries[] |
與運送作業相關的替代運送選項集合。如果未指定,車輛只需前往與接送地點相對應的位置即可。 |
loadDemands |
裝載貨物的負載需求 (例如重量、體積、貨架數量等)。對應檔中的鍵應為描述對應負載類型的 ID,最好也包含單位。例如:"weight_kg"、"volume_gallons"、"pallet_count" 等。如果指定的鍵未顯示在對應的載入中,系統會將該載入視為空值。 |
allowedVehicleIndices[] |
可能執行這項運送作業的車輛組合。如果留空,則所有車輛都可能執行該動作。車輛會依據 |
costsPerVehicle[] |
指定透過每輛車輛運送這項貨物時產生的費用。如果已指定,則必須具備下列其中一種條件:
這些費用必須與 |
costsPerVehicleIndices[] |
|
pickupToDeliveryAbsoluteDetourLimit |
指定相較於從上車地點到送達地點的最短路徑,最多可繞行的絕對時間。如果指定了這項屬性,則該值必須為非負值,且運送作業至少必須包含一個取件和一個送達作業。 舉例來說,假設 t 是從所選取的取貨替代方案直接前往所選取的送貨替代方案所需的最短時間。接著,設定
如果在同一筆訂單上同時指定相對和絕對限制,系統會針對每個可能的接送/取件組合使用較嚴格的限制。自 2017 年 10 月起,系統只會在行程時間不受車輛影響時支援繞道。 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
pickupToDeliveryTimeLimit |
指定從商品開始取件到開始送達的時間長度上限。如果指定了這項屬性,則該值必須為非負值,且運送作業至少必須包含一個取件和一個送達作業。這不取決於你為取件和送件選取的替代方案,也不取決於車輛速度。您可以同時指定這項限制和最大繞行限制:解決方案會遵循這兩項規範。 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
shipmentType |
非空白字串,指定此出貨的「類型」。這項功能可用於定義 與 |
label |
指定此運送單的標籤。這個標籤會在對應 |
ignore |
如果為 True,則略過此運送作業,但不會套用 如果模型中含有任何 系統允許忽略在 |
penaltyCost |
如果無法完成運送,這筆罰款會加到路線的整體費用中。只要有任何一個取貨和送貨選項被造訪,系統就會將該筆訂單視為完成。費用可以使用模型中所有其他費用相關欄位使用的相同單位來表示,且必須為正值。 重要事項:如果未指定這項處罰,系統會視為無限,也就是必須完成出貨。 |
pickupToDeliveryRelativeDetourLimit |
指定相對於從上車地點到送達地點的最短路徑,最多可繞行的相對時間。如果指定了這項屬性,則該值必須為非負值,且運送作業至少必須包含一個取件和一個送達作業。 舉例來說,假設 t 是從所選取的取貨替代方案直接前往所選取的送貨替代方案所需的最短時間。接著,設定
如果在同一筆訂單上同時指定相對和絕對限制,系統會針對每個可能的接送/取件組合使用較嚴格的限制。自 2017 年 10 月起,系統只會在行程時間不受車輛影響時支援繞道。 |
VisitRequest
可透過車輛完成的訪問要求:包含地理位置 (或兩個,請參閱下方說明)、以時間窗口表示的開始和結束時間,以及服務時間長度 (車輛抵達取貨或送貨地點所需的時間)。
JSON 表示法 |
---|
{ "arrivalLocation": { object ( |
欄位 | |
---|---|
arrivalLocation |
車輛執行此 |
arrivalWaypoint |
車輛執行這項 |
departureLocation |
車輛完成這個 |
departureWaypoint |
車輛完成這個 |
tags[] |
指定附加至造訪要求的標記。不得使用空字串或重複的字串。 |
timeWindows[] |
限制造訪時間的到達時間。請注意,車輛可能會在抵達時間回溯期過後離開,也就是說,抵達時間 + 車程時間不一定會在回溯期內。如果車輛在 如果沒有 時段必須不重疊,也就是說,每個時段都不能與其他時段重疊或相鄰,且必須以遞增順序排列。 只有在單一時間範圍內,才能設定 |
duration |
行程時間,也就是車輛從抵達到離開所需的時間 (會加入可能的等候時間;請參閱 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
cost |
在車輛路線上為這項拜訪要求提供服務的費用。你可以使用這項功能,為每個替代取貨或運送服務支付不同的費用。這個成本必須與 |
loadDemands |
載入此造訪要求的需求。這與 |
visitTypes[] |
指定造訪類型。這項資訊可用於分配車輛完成這次拜訪所需的額外時間 (請參閱 一個類型只能出現一次。 |
label |
指定這個 |
avoidUTurns |
指定是否應避免在該位置的駕駛路線上進行 U 形轉彎。系統會盡力避免 U 形迴轉,但無法保證完全避免。這是實驗性功能,行為可能會變更。 實驗功能:詳情請參閱 https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request。 |
LatLng
代表經緯度組合的物件。以一對雙精準數表示經度度數和緯度度數。除非另有指定,否則這個物件必須符合 WGS84 標準。此外,值必須在正規化範圍內。
JSON 表示法 |
---|
{ "latitude": number, "longitude": number } |
欄位 | |
---|---|
latitude |
緯度度數,必須介於 [-90.0, +90.0] 的範圍之間。 |
longitude |
經度度數,必須介於 [-180.0, +180.0] 的範圍之間。 |
途經點
封裝路線點。路標會標示訪客要求的到達和離開地點,以及車輛的起點和終點。
JSON 表示法 |
---|
{ "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field |
欄位 | |
---|---|
sideOfRoad |
(非必要) 表示這個路線控點的位置,是為了讓車輛偏好停靠在道路的特定側邊。設定這個值後,路線會經過該位置,讓車輛停在偏離道路中心的路邊。這個選項不適用於「步行」交通模式。 |
vehicleStopover |
表示路線控點是車輛停靠點,目的是讓乘客上下車。這個選項僅適用於「DRIVING」行駛模式,且「locationType」為「location」時。 實驗性功能:這個欄位的行為或存在情形可能會在日後變更。 |
聯集欄位 location_type 。表示位置的方式有很多種。location_type 只能是下列其中一項: |
|
location |
使用地理座標指定的點,包括選用的標頭。 |
placeId |
與路標相關聯的 POI 地點 ID。 使用地點 ID 指定 VisitRequest 的抵達或出發地點時,請使用足夠明確的地點 ID,以便判斷 LatLng 位置,並導航至該地點。舉例來說,代表建築物的地點 ID 就很適合,但代表道路的地點 ID 則不建議使用。 |
位置
封裝位置 (地理點和選用的標題)。
JSON 表示法 |
---|
{
"latLng": {
object ( |
欄位 | |
---|---|
latLng |
航點的地理座標。 |
heading |
與流量方向相關的指南針方位。這個值用於指定接送和下車的道路側。方向值的範圍為 0 到 360,其中 0 指定正北方向,90 指定正東方向,以此類推。 |
TimeWindow
時間窗可限制事件的時間,例如造訪的抵達時間,或車輛的開始和結束時間。
硬性時間範圍邊界 startTime
和 endTime
會強制執行事件的最早和最晚時間,例如 startTime <= event_time <=
endTime
。軟性時間回溯期下限 softStartTime
表示事件發生時機為 softStartTime
或之後,發生時間與事件發生前軟性開始時間的差距成正比。軟性時間回溯期上限 softEndTime
表示事件發生時機應在 softEndTime
當天或之前,且事件發生時間越晚,所需成本就越高。softEndTime
startTime
、endTime
、softStartTime
和 softEndTime
應在全球時間限制範圍內 (請參閱 ShipmentModel.global_start_time
和 ShipmentModel.global_end_time
),並應遵守下列規定:
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
JSON 表示法 |
---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
欄位 | |
---|---|
startTime |
硬性時間範圍的開始時間。如果未指定,則會設為 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: |
endTime |
硬性時間範圍的結束時間。如果未指定,則會設為 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: |
softStartTime |
時段的軟性開始時間。 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: |
softEndTime |
時間範圍的軟性結束時間。 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: |
costPerHourBeforeSoftStartTime |
如果事件發生時間早於 softStartTime,系統會將每小時費用加進模型中的其他費用,計算方式如下:
這個成本必須為正值,且只有在已設定 softStartTime 時才能設定這個欄位。 |
costPerHourAfterSoftEndTime |
如果事件發生在
這個成本必須為正值,且只有在設定 |
車輛
模擬出貨問題中的車輛。解決運送問題時,系統會為這輛車輛建立從 startLocation
到 endLocation
的路線。路線是指造訪記錄的序列 (請參閱 ShipmentRoute
)。
JSON 表示法 |
---|
{ "displayName": string, "travelMode": enum ( |
欄位 | |
---|---|
displayName |
使用者定義的車輛顯示名稱。長度上限為 63 個半形字元,可以使用 UTF-8 字元。 |
travelMode |
行駛模式會影響車輛可行駛的道路和速度。另請參閱 |
routeModifiers |
一組滿足條件,會影響系統為特定車輛計算路線的方式。 |
startLocation |
車輛開始載運貨物的地理位置。如未指定,車輛會在第一趟上車地點開始行駛。如果運送模型包含時間和距離矩陣,請勿指定 |
startWaypoint |
路標代表車輛在取件前開始的經緯度位置。如果未指定 |
endLocation |
車輛完成最後一次 |
endWaypoint |
路標代表車輛完成最後一次 |
startTags[] |
指定附加至車輛路線起點的標記。 不得使用空字串或重複的字串。 |
endTags[] |
指定附加在車輛路線結尾的標記。 不得使用空字串或重複的字串。 |
startTimeWindows[] |
車輛可能從出發地點出發的時間範圍。必須在全球時間限制範圍內 (請參閱 屬於相同重複欄位的時間範圍必須不重疊,也就是說,任何時間範圍都不能與其他時間範圍重疊或相鄰,且必須按時間順序排列。 只有在單一時間範圍內,才能設定 |
endTimeWindows[] |
車輛抵達終點的時間範圍。必須在全球時間限制範圍內 (請參閱 屬於相同重複欄位的時間範圍必須不重疊,也就是說,任何時間範圍都不能與其他時間範圍重疊或相鄰,且必須按時間順序排列。 只有在單一時間範圍內,才能設定 |
unloadingPolicy |
車輛的卸載政策。 |
loadLimits |
車輛的容量 (例如重量、體積、貨架數量)。對應表中的鍵是負載類型的 ID,與 |
costPerHour |
車輛費用:所有費用加總,且必須與 車輛路線的每小時費用。這筆費用會套用至路線的總用時,包括行程時間、等候時間和拜訪時間。使用 |
costPerTraveledHour |
車輛路線的每小時行駛費用。這項費用只會套用在路線的行程時間 (即 |
costPerKilometer |
車輛行駛路線的每公里費用。這筆費用會套用至 |
fixedCost |
如果這輛車輛用於處理運送作業,就會收取這筆固定費用。 |
usedIfRouteIsEmpty |
這個欄位只會套用至路線未提供任何貨運服務的車輛。指出車輛是否應視為二手車。 如果為 true,即使車輛沒有運送任何貨物,也會從起點前往終點,且會考量起點到終點的時間和距離成本。 否則,車輛不會從起點移動到終點,且系統不會為該車輛安排 |
routeDurationLimit |
限制車輛路線的總時間。在特定 |
travelDurationLimit |
適用於車輛路線的車程時間限制。在特定 |
routeDistanceLimit |
套用至車輛路線總距離的限制。在指定的 |
extraVisitDurationForVisitType |
指定從 visitTypes 字串對應至時間長度的對應表。時間長度是指在指定 如果造訪要求包含多種類型,地圖會為每種類型新增時間長度。 |
breakRule |
說明要對這輛車輛強制執行的休息時間表。如果為空白,則不會為這輛車輛安排休息時間。 |
label |
指定此車輛的標籤。這個標籤會在回應中以對應 |
ignore |
如果為 true, 如果在 如果運送作業是由 |
travelDurationMultiple |
指定可用於增加或減少此車輛行駛時間的乘數。舉例來說,如果將此值設為 2.0,表示這輛車輛的速度較慢,且行駛時間是標準車輛的兩倍。這項係數不會影響造訪時間長度。但如果指定 警告:在套用這個倍數後,但在執行任何數值運算之前,系統會將行程時間四捨五入至最近的秒數,因此倍數過小可能會導致精確度降低。 另請參閱下方的 |
TravelMode
車輛可使用的行駛模式。
這些應為 Google 地圖平台路線 API 的交通模式子集,請參閱:https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
注意:WALKING
路線目前為 Beta 版,有時可能會遺漏明確的人行道或人行道。您必須向使用者顯示這項警告,適用於應用程式中顯示的所有步行路線。
列舉 | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
未指定的交通方式,等同於 DRIVING 。 |
DRIVING |
與駕駛路線相對應的交通模式 (汽車、...)。 |
WALKING |
步行路線對應的交通方式。 |
RouteModifiers
封裝一組可選條件,用於計算車輛路線時必須滿足的條件。這與 Google 地圖平台路線偏好 API 中的 RouteModifiers
類似;請參閱:https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers。
JSON 表示法 |
---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
欄位 | |
---|---|
avoidTolls |
指定是否在合理情況下避開收費道路。系統會優先提供不含收費道路的路線。僅適用於機動運輸模式。 |
avoidHighways |
指定是否在合理情況下避開高速公路。系統會優先選擇不經過高速公路的路線。僅適用於機動運輸模式。 |
avoidFerries |
指定是否在合理情況下避開渡輪。系統會優先提供不含渡輪的路線。僅適用於機動運輸模式。 |
avoidIndoor |
(非必要) 指定是否在合理情況下避免室內導航。系統會優先提供不含室內導航功能的路線。僅適用於 |
UnloadingPolicy
車輛卸貨方式的政策。僅適用於同時包含自取和配送的運送作業。
其他運送作業可在路線上的任何位置執行,不受 unloadingPolicy
影響。
列舉 | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
未指定卸貨政策;必須在相應的接送後才會進行。 |
LAST_IN_FIRST_OUT |
必須以相反的順序進行配送 |
FIRST_IN_FIRST_OUT |
運送作業必須按照取貨順序進行 |
LoadLimit
定義適用於車輛的負載限制,例如「這輛卡車只能載運 3500 公斤以下的貨物」。詳情請參閱《loadLimits
》。
JSON 表示法 |
---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
欄位 | |
---|---|
softMaxLoad |
負載的軟性限制。詳情請參閱《 |
costPerUnitAboveSoftMax |
如果車輛沿途的負載量超過 |
startLoadInterval |
車輛在路線起點的允許載客量間隔。 |
endLoadInterval |
車輛在路線結束時可接受的載客量間隔。 |
maxLoad |
可接受的最大負載量。 |
costPerKilometer |
這輛車輛運送一單位貨物超過一公里的費用。這可做為燃料消耗量的代理值:如果負載是重量 (以牛頓為單位),則負載*公里的維度為能量。 實驗功能:詳情請參閱 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request。 |
costPerTraveledHour |
這輛車在 1 小時內載運 1 個單位貨物的費用。 實驗功能:詳情請參閱 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request。 |
時間間隔
可接受的負載量間隔。
JSON 表示法 |
---|
{ "min": string, "max": string } |
欄位 | |
---|---|
min |
|
max |
可接受的最大負載。必須大於或等於 0。如果未指定,則此訊息不會限制最大負載。如果同時指定這兩個值, |
LoadCost
在 Transition
期間移動一個負載單位的成本。對於特定負載,費用是兩個部分的總和:
- min(load,
loadThreshold
) *costPerUnitBelowThreshold
- max(0, load -
loadThreshold
) *costPerUnitAboveThreshold
在這種成本下,解決方案會優先處理高需求,也就是說,會最後處理高需求。舉例來說,如果車輛有
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
路徑為 start,pickup,pickup,delivery,delivery,end,其中包含轉換:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
則這個 LoadCost
產生的費用為 (cost_below * load_below * kilometers + cost_above * load_above * kms)
- 轉換 0:0.0
- 轉換 1:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 轉換 2:2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
- 轉換 3:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 轉場 4:0.0
因此,路線上的 LoadCost
為 120.0。
不過,如果路線是開始、上車、送達、上車、送達,並以轉換結束:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
則此 LoadCost
產生的費用為
- 轉換 0:0.0
- 轉換 1:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 轉換 2:0.0
- 轉換 3:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 轉場 4:0.0
這裡路線的 LoadCost
為 40.0。
LoadCost
會讓負載量高的轉場解決方案成本更高。
實驗功能:詳情請參閱 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request。
JSON 表示法 |
---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
欄位 | |
---|---|
loadThreshold |
超過此負載量時,負載單位的移動費用會從 costPerUnitBelowThreshold 變更為 costPerUnitAboveThreshold。必須大於或等於 0。 |
costPerUnitBelowThreshold |
移動單位負載的成本,每個單位介於 0 和閾值之間。必須是有限值,且大於等於 0。 |
costPerUnitAboveThreshold |
每個超過門檻的負載單位,移動該負載單位的費用。在特殊情況下,如果閾值 = 0,則這是每個單位的固定成本。必須是有限值,且大於等於 0。 |
DurationLimit
定義車輛路線的時間上限。可以是硬式或軟式。
定義軟性上限欄位時,必須一併定義軟性上限門檻及其相關費用。
JSON 表示法 |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
欄位 | |
---|---|
maxDuration |
硬性限制,限制片段長度不得超過 maxDuration。 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
softMaxDuration |
軟性限制不會強制執行最大時間長度限制,但如果違反限制,路線就會產生費用。這個費用會與模型中定義的其他費用相加,並使用相同的單位。 如果已定義, 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
quadraticSoftMaxDuration |
軟性限制不會強制執行最大時間長度限制,但如果違反限制,路線就會產生費用,且費用會隨著時間呈現平方關係。這項費用會與模型中定義的其他費用相加,並使用相同的單位。 如果已定義,
以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
costPerHourAfterSoftMax |
違反
費用必須為非負值。 |
costPerSquareHourAfterQuadraticSoftMax |
違反 如果時間長度低於門檻,額外費用為 0,否則費用取決於時間長度,如下所示:
費用必須為非負值。 |
DistanceLimit
定義可行駛的最大距離。可以是硬式或軟式。
如果定義軟性限制,softMaxMeters
和 costPerKilometerAboveSoftMax
都必須定義,且不得為負值。
JSON 表示法 |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
欄位 | |
---|---|
maxMeters |
硬性限制,限制距離不得超過 maxMeters。限制值不得為負數。 |
softMaxMeters |
軟性限制不會強制執行最大距離限制,但如果違反限制,則會產生費用,並與模型中定義的其他費用相加,使用相同的單位。 如果已定義,softMaxMeters 必須小於 maxMeters,且必須為非負值。 |
costPerKilometerBelowSoftMax |
每公里費用 (最高
|
costPerKilometerAboveSoftMax |
如果距離超過
費用必須為非負值。 |
BreakRule
產生車輛休息時間的規則 (例如午餐休息時間)。休息時間是指車輛在目前位置處於閒置狀態,無法執行任何拜訪的連續時間。可能會發生中斷的情況如下:
- 在兩次造訪之間的轉換期間 (包括造訪前或造訪後的時間,但不包括造訪期間),延長兩次造訪之間的對應轉換時間,
- 或在車輛發動前 (車輛可能不會在休息期間發動),這不會影響車輛發動時間。
- 或在車輛結束後 (同樣地,請提供車輛結束時間)。
JSON 表示法 |
---|
{ "breakRequests": [ { object ( |
欄位 | |
---|---|
breakRequests[] |
中斷序列。請參閱 |
frequencyConstraints[] |
可能會套用多個 |
BreakRequest
您必須事先知道適用於每輛車的休息時間序列 (即數量和順序)。重複的 BreakRequest
會定義該序列,並按照必須發生的順序排列。兩者的時間範圍 (earliestStartTime
/ latestStartTime
) 可能會重疊,但必須與訂單相容 (系統會檢查這項條件)。
JSON 表示法 |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
欄位 | |
---|---|
earliestStartTime |
必要欄位。休息時間開始時間的下限 (包含在內)。 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: |
latestStartTime |
必要欄位。休息時間開始的上限 (包含在內)。 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: |
minDuration |
必要欄位。插播時間長度下限。必須為正數。 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
FrequencyConstraint
您可以進一步限制上述指定的插播廣告頻率和時間長度,例如強制執行最小插播廣告頻率,例如「每 12 小時至少要插播 1 次廣告」。假設這可解讀為「在任何 12 小時的滑動時間窗格內,至少要有一次至少 1 小時的休息時間」,那麼這個範例會轉譯為下列 FrequencyConstraint
:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { 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
JSON 表示法 |
---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
欄位 | |
---|---|
minBreakDuration |
必要欄位。此限制的插播時間長度下限。非負值。請參閱 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
maxInterBreakDuration |
必要欄位。路徑中不含 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
目標
目標會完全取代成本模型,因此與先前的費用不相容。每個目標都會對應至多項預先定義的成本,例如車輛、出貨或轉換屬性。
實驗功能:詳情請參閱 https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request。
JSON 表示法 |
---|
{
"type": enum ( |
欄位 | |
---|---|
type |
目標的類型。 |
weight |
相對於其他目標,這個目標的計分比重。可以是任何非負數,權重總和不必為 1。權重預設為 1.0。 |
類型
將對應至一組費用的目標類型。
列舉 | |
---|---|
DEFAULT |
系統會使用預設的費用組合,確保提供合理的解決方案。注意:這個目標可單獨使用,但如果使用者未指定目標,系統一律會以權重 1.0 的形式將這個目標加入為基準。 |
MIN_DISTANCE |
「MIN」目標。盡量減少總行經距離。 |
MIN_WORKING_TIME |
盡量縮短所有車輛的總工作時間。 |
MIN_TRAVEL_TIME |
同上,但只著重於行程時間。 |
MIN_NUM_VEHICLES |
盡量減少使用的車輛數量。 |
DurationDistanceMatrix
指定從造訪和車輛起點到造訪和車輛終點的時間和距離矩陣。
JSON 表示法 |
---|
{
"rows": [
{
object ( |
欄位 | |
---|---|
rows[] |
指定時間長度和距離矩陣的資料列。必須與 |
vehicleStartTag |
標記定義這個時間長度和距離矩陣適用於哪些車輛。如果留空,則會套用至所有車輛,且只能有單一矩陣。 每個車輛啟動都必須與單一矩陣相符,也就是說,其中的 所有矩陣都必須有不同的 |
列
指定時間長度和距離矩陣的資料列。
JSON 表示法 |
---|
{ "durations": [ string ], "meters": [ number ] } |
欄位 | |
---|---|
durations[] |
特定資料列的時間長度值。必須與 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
meters[] |
特定資料列的距離值。如果模型中沒有任何成本或限制參照距離,可以將這個屬性設為空白;否則,這個屬性必須包含與 |
TransitionAttributes
指定路徑上兩次連續造訪之間的轉換屬性。同一個轉換可能會套用多個 TransitionAttributes
:在這種情況下,所有額外費用會相加,並套用最嚴格的限制或限制 (遵循自然的「AND」語義)。
JSON 表示法 |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
欄位 | |
---|---|
srcTag |
定義這些屬性適用的 (src->dst) 轉場組合。 來源訪客或車輛啟動活動的資料是否符合條件,取決於 |
excludedSrcTag |
請參閱 |
dstTag |
只有在 |
excludedDstTag |
請參閱 |
cost |
指定執行此轉換作業的費用。此值的單位與模型中的所有其他成本相同,且不得為負數。這筆費用會加上所有現有費用。 |
costPerKilometer |
指定在執行這項轉換作業時,每公里適用的費用。會加總車輛上指定的所有 |
distanceLimit |
指定執行此轉場效果時的移動距離限制。 自 2021 年 6 月起,我們只支援軟性限制。 |
delay |
指定執行這項轉換時的延遲時間。 這項延遲一律會發生在完成來源造訪「後」和開始目的地造訪「前」。 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
ShipmentTypeIncompatibility
根據 shipmentType 指定不同出貨之間的不相容性。系統會根據不相容模式,限制在同一條路線顯示不相容的貨件。
JSON 表示法 |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
欄位 | |
---|---|
types[] |
不相容類型的清單。兩個出貨項目在列出的 |
incompatibilityMode |
套用至不相容項目的模式。 |
IncompatibilityMode
定義在同一條路線上,不相容的運送作業如何顯示。
列舉 | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
未指定不相容模式。請一律不要使用這個值。 |
NOT_PERFORMED_BY_SAME_VEHICLE |
在這種模式下,兩個不相容的貨物無法共用同一輛車輛。 |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
對於兩個使用
|
ShipmentTypeRequirement
根據 shipmentType 指定不同出貨之間的規定。需求的具體內容則由需求模式定義。
JSON 表示法 |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
欄位 | |
---|---|
requiredShipmentTypeAlternatives[] |
|
dependentShipmentTypes[] |
所有貨物 ( 注意:系統不允許要求鏈結,例如 |
requirementMode |
套用至需求的模式。 |
RequirementMode
定義路線上依附運送的顯示方式。
列舉 | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
未指定的規定模式。請一律不要使用這個值。 |
PERFORMED_BY_SAME_VEHICLE |
在這種模式下,所有「依附」運送作業都必須與至少一個「必要」運送作業共用相同的車輛。 |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
在 因此,「依附」貨件取件必須具備下列其中一種條件:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
與先前相同,但「依附」運送作業必須在運送時,與「必要」運送作業一同運送。 |
PrecedenceRule
兩個事件之間的優先順序規則 (每個事件都是提貨或出貨):第二個事件必須在第一個事件開始後至少 offsetDuration
才會開始。
多個優先順序可以參照相同 (或相關) 事件,例如「B 的取件發生在 A 送達後」和「C 的取件發生在 B 取件後」。
此外,優先順序只會在兩次運送作業都執行時才會套用,否則會遭到忽略。
JSON 表示法 |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
欄位 | |
---|---|
firstIsDelivery |
指出「first」事件是否為放送事件。 |
secondIsDelivery |
指出「第二」事件是否為傳送事件。 |
offsetDuration |
「first」和「second」事件之間的偏移量。可以是負值。 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 |
firstIndex |
「first」事件的出貨索引。必須指定這個欄位。 |
secondIndex |
「second」事件的出貨索引。必須指定這個欄位。 |