- JSON 表示法
- 運送
- VisitRequest
- LatLng
- Waypoint
- 位置
- TimeWindow
- 車輛
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- 間隔
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- 目標
- 類型
- DurationDistanceMatrix
- Row
- 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 月起,只有在行程時間不取決於車輛時,才支援繞道。 |
pickupToDeliveryTimeLimit |
指定從開始取貨到開始運送貨物的最長持續時間。如要指定,必須為非負值,且運送作業必須至少包含一次取貨和一次送貨。這與取貨和送貨時選用的替代方案無關,也與車輛速度無關。這項設定可與繞道上限限制一併指定,解決方案會同時遵循這兩項規格。 |
shipmentType |
指定這筆運送訂單「類型」的非空白字串。這項功能可用於定義 與針對單次造訪指定的 |
label |
指定這筆運送訂單的標籤。系統會在回應中,於對應 |
ignore |
如果為 true,則略過這項運送作業,但不套用 如果模型中有任何 系統允許忽略在 |
penaltyCost |
如果未完成運送,這項罰則會加到路線的整體費用中。只要造訪其中一個取貨和送貨替代方案,系統就會將運送視為完成。費用可使用與模型中所有其他費用相關欄位相同的單位表示,且必須為正數。 重要事項:如未指定這項罰則,系統會視為無限,也就是必須完成運送。 |
pickupToDeliveryRelativeDetourLimit |
指定相較於從取貨到送貨的最短路徑,相對繞道時間上限。如要指定,必須為非負值,且運送作業必須至少包含一次取貨和一次送貨。 舉例來說,假設 t 是從所選替代取貨點直接前往所選替代送貨點所需的最短時間。接著, 如果同一筆運送作業同時指定相對和絕對限制,系統會針對每個可能的取貨/送貨組合,採用限制較嚴格的限制。自 2017 年 10 月起,只有在行程時間不取決於車輛時,才支援繞道。 |
VisitRequest
要求車輛造訪:具有地理位置 (或兩個,請參閱下文)、以時間範圍表示的開放和關閉時間,以及服務持續時間 (車輛抵達後取貨或送貨所花費的時間)。
| JSON 表示法 |
|---|
{ "arrivalLocation": { object ( |
| 欄位 | |
|---|---|
arrivalLocation |
執行這項 |
arrivalWaypoint |
車輛執行這項 |
departureLocation |
車輛完成這項 |
departureWaypoint |
車輛完成這項 |
tags[] |
指定附加至造訪要求的標記。不得輸入空白或重複的字串。 |
timeWindows[] |
限制造訪抵達時間的時間範圍。請注意,車輛可能會在抵達時間範圍外離開,也就是說,抵達時間 + 停留時間不一定要在時間範圍內。如果車輛在 如果沒有 時間範圍不得重疊,也就是說,任何時間範圍都不得與其他時間範圍重疊或相鄰,且必須遞增排序。 只有在單一時間範圍內,才能設定 |
duration |
造訪時間長度,即車輛抵達和離開之間的時間 (會加到可能的等待時間,請參閱 |
cost |
在車輛路線上服務這項造訪要求的成本。這項屬性可用來為每種替代取貨或運送方式設定不同的費用。這項費用的單位必須與 |
loadDemands |
這項造訪要求的負載需求。這與 |
visitTypes[] |
指定造訪類型。這項屬性可用於分配車輛完成這項造訪所需的額外時間 (請參閱 一個類型只能出現一次。 |
label |
指定這個 |
avoidUTurns |
指定這個地點的行車路線是否應避免迴轉。系統會盡可能避免迴轉,但不保證完全不會迴轉。這項功能仍在實驗階段,行為可能會有異動。 實驗功能:詳情請參閱 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] 的範圍之間。 |
途經點
封裝路線控點。路線控點會標示 VisitRequest 的抵達和出發位置,以及車輛的起點和終點位置。
| JSON 表示法 |
|---|
{
"sideOfRoad": boolean,
"vehicleStopover": boolean,
// The following is a list of mutually exclusive fields. At most one of the
// fields will be set in a response:
"location": {
object ( |
| 欄位 | |
|---|---|
sideOfRoad |
(選用步驟) 表示這個路線控點的位置,是為了讓車輛優先停靠在道路的特定一側。設定這個值後,路線會經過該位置,車輛就能停靠在該位置偏向道路中心線的那一側。這個選項不適用於「WALKING」交通模式。 |
vehicleStopover |
表示路線控點是車輛停靠點,目的是接送乘客。這個選項僅適用於「DRIVING」交通模式,且「locationType」為「location」。 實驗性:這個欄位的行為或存在狀態日後可能會有變動。 |
| 表示位置的不同方式。以下是互斥欄位清單。回應中最多會設定下列其中一個欄位: | |
location |
使用地理座標指定的點,包括選用的航向。 |
placeId |
與路線控點相關聯的搜尋點地點 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 當天或之後發生,產生的費用與事件在 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 Maps Platform Routes API 交通方式的子集,請參閱:https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
注意:WALKING路線目前為 Beta 版,有時可能無法明確提供人行道或行人步道。在應用程式中顯示步行路線時,您必須向使用者顯示這則警告。
| 列舉 | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
未指定交通方式,等同於 DRIVING。 |
DRIVING |
與行車路線對應的交通工具 (汽車、...)。 |
WALKING |
步行路線對應的交通方式。 |
TWO_WHEELER |
雙輪機動車輛。例如摩托車。請注意,這與 BICYCLING 交通模式不同,後者涵蓋人力交通模式。這項交通方式僅適用於「支援兩輪車的國家/地區」中列出的國家/地區。 |
RouteModifiers
封裝一組選用條件,在計算車輛路線時必須滿足這些條件。這與 Google Maps Platform Routes Preferred 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
定義車輛的載重限制,例如「這輛卡車最多只能載重 3, 500 公斤」。詳情請參閱《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 |
這輛車載運一個單位的貨物行駛一小時的費用。 實驗功能:詳情請參閱 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request。 |
間隔
可接受的負載量間隔。
| JSON 表示法 |
|---|
{ "min": string, "max": string } |
| 欄位 | |
|---|---|
min |
|
max |
|
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
}
}
}
路線為起點、取貨、取貨、送貨、送貨、終點,轉移如下:
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 * 公里數 + cost_above * load_above * 公里數)
- transition 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
- transition 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 產生的費用為
- transition 0: 0.0
- 轉換 1:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transition 2: 0.0
- 轉換 3:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transition 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 以內。 |
softMaxDuration |
軟性限制不會強制執行時間長度上限,但違反時會導致路線產生費用。這項費用會與模型中定義的其他費用相加,單位相同。 如果已定義, |
quadraticSoftMaxDuration |
軟性限制不會強制執行時間長度上限,但如果違反,路線會產生費用,費用與時間長度呈二次方關係。這項費用會與模型中定義的其他費用相加,單位相同。 如果設定
|
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 |
必填。廣告插播時間長度下限。必須為正數。 |
FrequencyConstraint
您可以強制規定最短休息頻率,進一步限制上述休息時間的頻率和時長,例如「每 12 小時必須休息至少 1 小時」。假設這可以解讀為「在任何 12 小時的滑動時間範圍內,必須至少有一次至少一小時的休息時間」,則該範例會轉譯為以下 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 |
必填。這項限制的最短廣告插播時間長度。非負值。查看 |
maxInterBreakDuration |
必填。路線中任何時間間隔的最大允許範圍,不包含至少部分 |
目標
目標會完全取代成本模型,因此與現有成本不相容。每個目標都會對應至多個預先定義的成本,例如車輛、運送或轉換屬性。
實驗功能:詳情請參閱 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[] |
指定資料列的持續時間值。元素數量必須與 |
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 |
指定執行這項轉換時產生的延遲。 這項延遲一律發生在來源造訪結束後,以及目的地造訪開始前。 |
ShipmentTypeIncompatibility
根據運送類型,指定運送作業之間的不相容性。系統會根據不相容模式,限制不相容的運送作業出現在同一路線上。
| 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才能開始。
多個優先順序可以參照相同 (或相關) 事件,例如「在 A 送達後取件 B」和「在取件 B 後取件 C」。
此外,只有在執行兩項運送作業時,優先順序才會生效,否則會遭到忽略。
| JSON 表示法 |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| 欄位 | |
|---|---|
firstIsDelivery |
指出「第一個」事件是否為送達。 |
secondIsDelivery |
指出「第二個」事件是否為傳送。 |
offsetDuration |
「第一個」和「第二個」事件之間的偏移量。可以是負數。 |
firstIndex |
「第一個」事件的貨件索引。必須指定這個欄位。 |
secondIndex |
「第二個」事件的貨件索引。必須指定這個欄位。 |