本指南說明轉換屬性的可能用途。本課程將透過兩個範例,說明如何模擬實際情境:將車輛停車時間納入最佳化路線,以及確保每條路線都以造訪特定地點做為結尾。
事前準備
您可以使用轉換屬性,在最佳化路線中的特定轉換中,加入模型專屬的費用和延遲。這些費用和延遲時間會加到根據所用車輛參數,從地圖資料計算出的轉換時間和費用中。
轉場是指連接兩個地點的路徑區段。
「位置」是指車輛路線中的下列任一地點:
- 路線的起點。
- 取貨或送貨的停靠點。
- 路線的終點。
將所有轉場效果屬性新增至 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 設為模型中未使用的標記,藉此比對所有標記。這會比對所有不含這個標記的位置,但由於您刻意選擇未用於任何位置的標記,因此這些轉換屬性會比對所有位置。