本指南說明轉場效果屬性的可能用途。本課程將透過兩個範例,說明如何模擬實際情境:將車輛停放時間納入最佳化路線,以及確保每條路線都以造訪特定地點做為結尾。
事前準備
您可以使用轉移屬性,在最佳化路線的特定轉移中,加入特定車型的費用和延遲時間。這些費用和延遲時間會加到根據所用車輛參數,從地圖資料計算出的轉換時間和費用中。
「轉換」是路徑中連接一個地點到下一個地點的區段。
位置是指車輛路線中的任何一點,包括:
- 路線的起點。
- 取貨或送貨的停靠點。
- 路線的終點。
將所有轉場效果屬性新增至 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
在實作以額外費用表示的軟性偏好設定或取捨時,更為合適。如果同時考量花費的時間和成本,您可以任意組合延遲和成本。
車輛清潔範例使用非常長的 delay,因為在路線結束時清潔車輛是硬性規定,而長時間延遲可防止最佳化工具忽略這項規定。如果只設定成本,最佳化工具可能會選擇略過清潔程序,因為它會尋找其他方式來彌補成本,例如在「節省」車輛清潔時間後,運送更多貨物。
停車範例會使用與車輛停車所需額外時間相應的短暫延遲。如果司機在付費停車場停車,你也可以搭配使用 costs 和延誤時間。
如何新增符合所有造訪要求的轉場效果屬性
上述範例使用的轉換屬性,會比對有指定標記的位置,或沒有標記的位置。但如果需要新增適用於所有轉場效果的轉場效果屬性呢?
您無法省略標記,因為每則
TransitionAttributes
訊息都必須包含
TransitionAttributes.src_tag
和
TransitionAttributes.excluded_src_tag
,以及
TransitionAttributes.dst_tag
和
TransitionAttributes.excluded_dst_tag
。
不過,您可以將 TransitionAttributes.excluded_src_tag
或 TransitionAttributes.excluded_dst_tag
設為模型中任何未使用的標記,藉此比對所有標記。這樣一來,系統會比對所有沒有這個標記的位置,但由於您刻意選擇任何位置都不會使用的標記,因此這些轉換屬性會比對所有位置。