外賣配送路徑規劃算法:兩階段快速啓發式算法

0.寫在前面

外賣配送是運籌優化算法重要應用領域,它的主要特色是併發高、延時低,爲了解決這樣的問題須要對業務進行深刻理解,設計定製化優化手段。原計劃時機成熟的時候進行解讀,因爲屬於以前團隊的商業核心機密,計劃暫時擱置。去年前同事發了一篇paper(A Two-Stage Fast Heuristic for Food Delivery Route Planning Problem),十分清晰明瞭。鑑於此本文再也不狗尾續貂,僅作翻譯,一是方便後來者閱讀,二也對以前的工做作一次回顧。算法

1.背景

在外賣場景,用戶在外賣平臺點單以後,訂單信息會推送至商家確認接單,以後進入履約環節。調度系統對訂單進行指派和路徑規劃,外賣配送員根據訂單指派完成取餐和送餐任務。編程

image.png

而在配送問題中,路徑規劃是基本且重要的一個環節,它直接決定騎手服務路線的長度和時間,從而對訂單的準時率、客戶滿意度都產生影響。下圖是配送中騎手服務的路徑規劃示意圖,該騎手身上有5個訂單,其路徑規劃結果爲:取(4個)送(2個)取(1個)送(3個)。windows

image.png

目前,路徑規劃主要存在以下困難:併發

  • 計算量爆炸:因爲路徑規劃是NP難問題,沒法採用多項式算法在有限時間內求解。當問題規模增大時,計算量也呈指數增加。例如,在(午晚)高峯時刻,每一個騎手身上均可能有10個以上的訂單須要完成,在這種狀況下,可能的路徑規劃結果有2.38×1015種,想要在有限時間內求解是極困難的。
  • 算法時效要求高:路徑規劃是指派算法的重要環節。指派算法是在線算法,線上會有大量的訂單和騎手須要進行匹配,所以路徑規劃算法須要在極短期內獲得結果(毫秒級)

學界與配送場景下的路徑規劃問題相關的研究主要集中於PDPTW問題(pickup and delivery problem with time-windows),它考慮多個騎手和多個客戶,每一個客戶的訂單包含一個取點與一個送點,騎手按規定順序訪問各個節點完成訂單的服務,從而達到某些目標函數(例如總行駛距離)的最優。求解PDPTW問題的算法包括:列生成算法(column generation)、分支切割(branch-and-cut)、分支切割訂價(branch-and-cut-and-price)等精確計算算法,禁忌搜索(tabu search)、模擬退火(simulated annealing algorithm)、基於插入搜索的算法(insertion-based heuristic)、自適應大鄰域搜索(adaptive large neighborhood search)、變深度搜索(variable-depth search algorithm)。因爲在配送場景下,對算法時效性有極高的要求,上述算法均沒法適用於配送場景的問題。在後文中,咱們將介紹路徑規劃的問題模型,以及提出的啓發式算法(Two-Stage Fast Heuristic),同時給出了一些仿真結果。編程語言

2.問題模型

背景中提到的配送場景下的路徑規劃問題能夠被簡化建模成單車輛PDPTW問題(single vehicle pickup and delivery problem with time-windows),即原PDPTW問題的單車輛簡化(僅有一個騎手)。下圖表示單車輛PDPTW問題研究中的一條典型路徑。其中t_i爲每一個送點的預計送達時間(ETA,Estimated Time of Arrival),當訂單產生時,t_i即被告知給商家和客戶。T_i表示預估送達時間(ETR,Estimated Time of Route),由路徑規劃算法計算得出。d_i爲點i−1到點i的距離。
image.png函數

本文中咱們考慮最小化訂單超時時間與路徑長度,即目標函數爲image.png,該問題有兩個約束:優化

  • 優先約束:訂單的取點需在送點前訪問
  • 容量約束:騎手在服務過程當中同時攜帶的訂單數量具備上限

3.算法設計

TSFH(Two-Stage Fast Heuristic)主要包括兩個階段spa

  • stage I:初始化獲得一個初始可行解採用貪婪插入策略與基於地理信息的加速策略
  • stage II:對初始解進行鄰域搜索兩種鄰域分別對「最超時」和「最不超時」訂單進行調整

3.1初始化

3.1.1貪婪插入初始化

image.png

貪婪插入初始化主要包括如下步驟:.net

  1. 訂單按照ETA時間升序排序;
  2. 取出第一個訂單,進行排序。注意收到優先約束的影響,只有一種排列方法(取點在送點前);
  3. 對剩餘的訂單,按順序將其取送點插入全部可能位置,找到最優位置(目標函數最小),將其插入。

下圖爲初始化中貪婪插入的一個例子,在插入第二個訂單時,咱們有6種插入方案,根據目標函數最小原則,(A)爲最優插入方案。翻譯

當全部點都完成插入後,便獲得一個可行解。

3.1.2基於地理信息的加速策略

觀察商家和客戶的地理信息能夠發現,商家之間可能距離很近(例如中心商業區域所含的商家可能服務半徑5km之內的60%的客戶),客戶也是如此(多個客戶可能位於同一個小區或樓宇)。所以咱們能夠經過分層聚類的方法將取送點聚類爲不一樣的集羣,經過對這些集羣進行分析,咱們能夠減小無效插入,提升貪婪插入初始化的速度。根據引理1,2能夠獲得加速策略以下:若節點j被分到組i,則最好的插入策略是將其插入組i,或是組i以後的組之間。

下面分別介紹聚類算法以及相關引理。

【聚類算法】 令D爲聚類範圍(例如D=100m),按照如下邏輯對各個節點進行聚類:

  • 若節點i未被分類,則節點i產生一個新組,並變成該組的中心點
  • 對於一個節點j,若是節點j沒有被分類,且d_ij<D,則j被分到組i
  • 若節點j被分到組k,且j不是中心點,若是d_ij<d_kj,則將j從新分至組i

【Lemma 1】將節點插入所在組以前的組: 若是節點j被分至組i,則將節點j插入到組i以前的任何組必定劣於將節點j插入組i

Proof: 節點j屬於組i,則將節點j插入到組i以前的任何組k必定不如將節點j直接插入組i,由於路徑長度變長了,但no delivery point benefits from shorter delays.

下圖給出了一個例子,取點和送點被分紅了三個組,假設藍色組與橙色組的點已經完成插入,咱們考慮綠色組的節點的插入。從圖中能夠看到,將節點插入所在組以前的組(B)老是比插入本身所在的組(A)更差,由於騎手路徑長度變長,客戶處可能會出現更高的超時。
image.png

【Lemma 2】將節點插入所在組以後的組: 若是節點j被分至組i,則咱們總能夠找到一個插入方案優於將節點j插入到組i以後的組k

Proof: 節點j屬於組i,則將節點j插入到組i以後的組k必定不如將節點j插入組k和組k+1之間(若是k是最後一個組,則插入到最後位置),由於路徑長度變長了,但no delivery point benefits from shorter delays.

下圖給出了一個例子,取點和送點被分紅了三個組,假設橙色組與綠色組的點已經完成插入,咱們考慮藍色組的節點的插入。從圖中能夠看到,將節點插入所在組以後的組之間(B)必定比插入到最後位置(A)更差,由於騎手路徑長度變長,客戶處可能會出現更高的超時。
image.png

3.2局部搜索

在初始化結束後,局部搜索經過在初始解的鄰域範圍內進行搜索來提升解的質量。咱們的算法考慮兩種類型的鄰域:

  • 找到超時最嚴重的節點,將其前移,插入最優位置。流程以下圖A所示。
  • 找到超時最不嚴重的節點,將其後移,插入最優位置。流程以下圖B所示。

注:每次局部搜索找到一個更好的解時,當前最優解即被替換。
image.png

4.仿真結果

本節給出一些仿真結果。首先咱們比較了帶有加速策略初始化與不帶加速策略初始化的結果,以驗證初始化中加速策略的有效性。以後,咱們將TSFH產生的解與暴力算法獲得的最優解進行比較,從而驗證TSFH產生近似最優解的能力。最後,咱們將TSFH與目前最好的一些算法進行比較,驗證TSFH求解該問題的有效性。

算例從實際路徑規劃問題中均勻採樣獲得,根據取送點的數量分爲三類:「<10」, "10-20", ">20"。

算法的評價指標採用總分(Total Score)和平均時間(Average Time)。總分爲超時時間與路徑長度的和,平均時間爲一個算例的平均運行時間。

運行環境爲MacBook Pro with 2.2 GHz processors / 16 GB RAM in Mac-OS,編程語言爲Java,IDE爲Eclipse。

4.1加速策略效果

表一爲帶有加速策略初始化與不帶加速策略初始化的比較結果。能夠看出,加速策略有着明顯的效果。例如"10-20"算例的平均運行時間從0.37降至0.21,減小了43.2%。同時,從總分能夠看出,加速策略初始化的效果幾乎沒有受到影響,這證實加速策略不會以犧牲解的質量爲代價,能夠在短期內產生優良解。
image.png

4.2與暴力算法比較

問題規模較小時,該問題的最優解能夠經過暴力搜索算法來獲得。考慮n個取點和n個送點,不考慮容量約束的條件下,暴力搜索算法的複雜度爲image.png。這裏咱們只提供「<10」算例的比較結果如表二。

能夠看出,對於「<10」的算例,TSFH僅需暴力算法運行時間的0.21%,便可達到幾乎同樣的效果。另外,「10-20」與「>20」算例的運行時間也均在毫秒級。在現實中,大部分狀況均可被「<10」和「10-20」的算例覆蓋,所以這代表TSFH足以在毫秒數量級內解決配送中的路徑規劃問題。
image.png

4.3與其餘最優算法比較

TSFH與variable-depth search (VDS)、simulated annealing (SA)的比較結果如表三。能夠看出TSFH在總分和平均時間兩方面都優於VDS和SA。在「<10」算例中,TSFH達到了近似最優解,僅比最優解高0.7%,而VDS和SA分別高了29.4%和35.7%。另外,TSFH求解「<10」算例的平均時間爲0.41ms,而VDS和SA分別爲3.51ms和25.64ms。配送環境中的路徑規劃對於算法的運行速度有着極高的要求,TSFH能夠在1ms內完成「<10」算例的求解,而VDS和SA的運行時間均沒法接受。所以,TSFH是比VDS和SA更好更有效的算法,也更適用於配送環境下的路徑規劃問題求解。
image.png

5.總結

本篇文章將外賣配送環境下的路徑規劃問題建模爲單車輛PDPTW問題。與傳統求解單車輛PDPTW問題的算法不一樣,本篇提出了一種兩階段快速啓發式算法(TSFH)。在第一階段,經過貪婪初始化獲得一個可行的優良解。根據顧客和商戶的地理位置信息,設計了一種加速策略,在節點調整時避免了無效插入。在第二階段,經過在當前解的兩種鄰域內進行搜索,解的質量獲得了進一步提高。

仿真結果代表,TSFH與暴力搜索算法、VDS、SA相比,在解的質量和運行時間方面均有着極大的優點。同時,TSFH具有在毫秒數量級內產生近似最優解的能力,適用於配送場景下路徑規劃問題的求解。

相關文章
相關標籤/搜索