本指南說明轉場屬性的可能用途。本章將透過兩個範例說明如何模擬實際情境:將停車時間納入最佳化路線,並確保每條路線都會在特定地點結束。
事前準備
您可以使用轉換屬性,在最佳化路徑中的特定轉換中新增特定模型的費用和延遲時間。這些費用和延遲時間會加上轉換時間,以及根據所用車輛參數從地圖資料計算的費用。
轉換是路線的片段,可連結一個地點與下一個地點。
「位置」是指車輛路線中的下列任一點:
- 路線的起點。
- 乘客上下車的停靠站。
- 路線的終點。
您可以將轉場屬性新增至清單 ShipmentModel.transition_attributes
,藉此定義模型的所有轉場屬性。清單中的每個元素都會定義一組轉場屬性,並與路徑中的轉場相符,使用轉場的起點和結尾位置標記。如要進一步瞭解轉場效果屬性,請參閱 TransitionAttributes
的參考文件。
模擬實際情境
本節將舉例說明如何使用轉場屬性實作實際的業務限制。
預約停車時間
在這種情況下,駕駛人必須先將車輛停妥,才能前往地點 A。地點 B 位於附近,駕駛員可以使用同一個停車位進行兩次造訪。如果駕駛人從 A 直接前往 B,就不必離開停車位,因此可節省時間。在 Route Optimization API 中,您可以使用轉換屬性,在駕駛者從一個停車位移動到另一個停車位時,為停車作業增加額外時間。
當您將停車時間與造訪時間分開模擬時,您會建立路線,在路線中,使用相同停車服務的造訪會被歸類,並縮短所需時間。您可以讓模型更精確,並讓最佳化工具偏好將造訪次數分組的路徑。
如要在 Route Optimization API 要求中執行這項操作,請按照下列步驟操作:
請只在執行訪問作業所需的時間內使用
VisitRequest.duration
。例如,將包裹交給客戶並收集簽名。針對模型中使用的每個獨特停車位,使用模型中未用於其他任何項目的新標記,例如
PARKING_123
。將這個標記新增至以下內容:
VisitRequest.tags
在所有使用此停車位的訪客要求中。Vehicle.start_tags
如果車輛從這個停車位開始行駛。Vehicle.end_tags
如果車輛在這個停車位開始或結束路線。
針對每個新的停車標記,請新增
ShipmentModel.transition_attributes
中的項目,藉此在從其他停車位抵達時,增加停車的延遲時間,方法如下:將
TransitionAttributes.excluded_src_tag
和TransitionAttributes.dst_tag
設為PARKING_123
。將
TransitionAttributes.delay
設為停車所需的時間。
舉例來說,如果地點的標記為
PARKING_123
,且停車需要 150 秒,您可以將下列項目新增至ShipmentModel.transition_attributes
:{ "excluded_src_tag": "PARKING_123", "dst_tag": "PARKING_123", "delay": "150s" }
路線結束後必須清潔
在這種情況下,車輛必須在路線結束時進行清潔,且須符合下列額外限制:
- 清潔作業會在專門的清潔設施中進行,然後再返回車輛停車場。最佳化路線會根據清潔設施的位置,以及車輛的接送和送達地點,使用最適合的清潔設施。
- 車輛完成清潔後,不得再執行任何接送或送貨作業。
- 駕駛前往該地並清潔車輛的時間會計入駕駛員的工作時數,且必須符合路線的最長時間。
您可以透過只允許空白路線或上次造訪為清潔設施的路線,模擬這項規定。在 Route Optimization API 中,您可以禁止從任何位置前往路線的終點路線點,但清潔設施或路線的起點除外:
- 請挑選兩個在模型中未使用的新代碼,例如
CLEANED
和ROUTE_END
。前者是指車輛所在或變乾淨的位置,後者則是指路線的終點。 - 針對每輛車輛,新增一筆僅限送貨的出貨,代表前往清潔設施,並附上下列屬性:
- 每個清潔設施地點應以這項貨物的送貨拜訪要求表示。
- 請將
CLEANED
新增至清潔設施出貨的每個造訪要求的VisitRequest.tags
。表示離開這個地點的車輛是乾淨的。模型中的其他造訪要求不應使用這個標記,以便系統在離開時將車輛視為「不乾淨」。 - 將
penalty_cost
設為小數字,讓最佳化器在車輛未使用時略過這項出貨作業。
針對每輛車,將
CLEANED
新增至Vehicle.start_tags
。這項屬性可用於在車輛執行任何接送或送貨作業前,將車輛標示為清潔狀態 (假設車輛已在前一個工作日結束時清潔),並允許車輛從起始路線點直接前往終點路線點。即使實際上不會發生這種路線,允許這種情況有助於最佳化器更有效率地搜尋最佳化路線。針對每輛車,將
ROUTE_END
新增至Vehicle.end_tags
。在
ShipmentModel.transition_attributes
中新增項目,禁止車輛在未清潔的情況下抵達車輛終點路線點,並使用下列屬性:將
TransitionAttributes.excluded_src_tag
設為CLEANED
。將
TransitionAttributes.dst_tag
設為ROUTE_END
。將
TransitionAttributes.delay
設為較大的值。如果延遲時間超過路徑的最大時間長度,您就能有效禁止最佳化工具在路徑中使用這項轉場效果。
舉例來說,如果模型的時間比例為一個工作天,您可以使用 24 小時 (86400 秒) 的延遲時間,禁止從清潔設施和路線起點以外的任何位置前往路線終點:
{ "excluded_src_tag": "CLEANED", "dst_tag": "ROUTE_END", "delay": "86400s" }
如何在延遲和成本之間做出選擇
您可以根據實作的業務邏輯和限制條件,選擇延遲時間或費用。設定 TransitionAttributes.delay
最適合實施硬性限制,或在時間方面表達權衡。TransitionAttributes.cost
更適合用於實作軟性偏好設定或以額外成本表示的取捨。如需同時考量花費時間和成本,您可以任意合併延誤和成本。
車輛清潔範例使用非常長的延遲時間,因為在路線結束時清潔車輛是一項嚴格規定,而長時間延遲會導致最佳化工具忽略這項規定。如果您只設定成本,最佳化器可能會選擇略過清潔作業,因為它會找出其他方法來彌補成本,例如在「省下」不清潔車輛的時間內,運送更多貨物。
停車範例會使用短暫的延遲,對應停車所需的額外時間。如果駕駛人停在收費停車場,您也可以使用「費用」與延誤時間。
如何新增與所有造訪要求相符的轉換屬性
上方的範例使用轉場屬性,比對含有特定標記的位置,或不含標記的位置。但如果您需要新增套用至所有轉場效果的轉場屬性呢?
您無法省略標記,因為每則 TransitionAttributes
訊息都必須包含一個 TransitionAttributes.src_tag
和 TransitionAttributes.excluded_src_tag
,以及一個 TransitionAttributes.dst_tag
和 TransitionAttributes.excluded_dst_tag
。
不過,您可以將 TransitionAttributes.excluded_src_tag
或 TransitionAttributes.excluded_dst_tag
設為模型中未使用的標記,藉此比對所有標記。這會比對所有未使用此標記的地點,但由於您刻意選擇了任何地點都不會使用的標記,這些轉場屬性會比對所有地點。