- JSON 表示法
- 運送
- VisitRequest
- LatLng
- Waypoint
- 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[] |
指定模型中使用的時間和距離矩陣。如果這個欄位空白,系統會改用 Google 地圖或測地距離,具體取決於 使用範例:
|
durationDistanceMatrixSrcTags[] |
定義時間長度和距離矩陣來源的標記; 標記會對應至 |
durationDistanceMatrixDstTags[] |
定義時間和距離矩陣目的地的標記; 標記會對應至 |
transitionAttributes[] |
新增至模型的轉場屬性。 |
shipmentTypeIncompatibilities[] |
不相容的 shipment_type 組合 (請參閱 |
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 |
指定在這個地點的行車路線中是否應避開迴轉。系統會盡量避免迴轉,但不保證完全不會迴轉。這項功能仍在實驗階段,行為可能會變更。 實驗功能:詳情請參閱 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, // Union field |
| 欄位 | |
|---|---|
sideOfRoad |
(選用步驟) 表示這個路線控點的位置偏好車輛停靠在道路的特定一側。設定這個值後,路線會經過該位置,車輛就能在道路中心偏向該位置的一側停靠。這個選項不適用於「步行」交通模式。 |
vehicleStopover |
指出控點是供車輛停靠,目的是接送乘客。這個選項僅適用於「開車」交通方式,且「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 或之後,並根據事件發生時間早於 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 地圖平台 Routes API 交通方式的子集,請參閱:https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
注意:WALKING 路線目前為 Beta 版,有時可能缺少明確的人行道或行人路徑。您必須在應用程式中顯示的所有步行路線中,向使用者顯示這項警告。
| 列舉 | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
未指定交通方式,相當於 DRIVING。 |
DRIVING |
與行車路線 (汽車等) 對應的交通方式。 |
WALKING |
步行路線對應的交通方式。 |
RouteModifiers
封裝一組選用條件,用於計算車輛路線時。這與 Google 地圖平台 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
定義車輛的載重限制,例如「這輛卡車的載重上限為 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 |
這輛車每小時的單位負重行駛成本。 實驗功能:詳情請參閱 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
}
}
}
路線為 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
必須事先瞭解適用於每輛車的休息順序 (即休息次數和順序)。重複的 BreakRequests 會定義該序列,且必須按照出現順序發生。時間範圍 (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 小時的滑動時間範圍內,至少必須有一次至少一小時的休息」,則該範例會轉換為下列 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
根據出貨類型,指定出貨項目之間的不相容性。系統會根據不相容模式,限制同一路線上不相容貨件的顯示方式。
| JSON 表示法 |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| 欄位 | |
|---|---|
types[] |
不相容的類型清單。如果清單中的兩批貨件有不同的 |
incompatibilityMode |
套用至不相容項目的模式。 |
IncompatibilityMode
模式:定義如何限制同一路線上不相容的出貨內容。
| 列舉 | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
未指定不相容模式。請一律不要使用這個值。 |
NOT_PERFORMED_BY_SAME_VEHICLE |
在此模式下,類型不相容的兩批貨物絕不會共用同一輛車。 |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
在此模式下,類型不相容的兩批貨物絕不會同時出現在同一輛車上:
|
ShipmentTypeRequirement
根據出貨類型指定出貨間的規定。具體要求取決於需求模式。
| 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 |
指出「第一個」事件是否為運送。 |
secondIsDelivery |
指出「第二個」事件是否為運送。 |
offsetDuration |
「第一個」和「第二個」事件之間的偏移量。可以是負數。 時間長度以秒為單位,最多可有 9 個小數位數,並應以「 |
firstIndex |
「第一個」事件的出貨索引。這個欄位必須指定。 |
secondIndex |
「第二個」事件的出貨索引。這個欄位必須指定。 |