干貨 | 列生成VRPTW子問題ESPPRC( Elementary shortest path problem with resource constraints)介紹附C++代碼


00 前言

各位小伙伴大家好,相信大家已經看過前面column generation求解vehicle routing problems的過程詳解。該問題中,子問題主要是找到一條reduced cost最小的合法路徑,然后加入到Master Problem中。其實,子問題也是一個著名的NP-Hard問題,今天我們就來介紹一下。

01 ESPPRC

考慮圖1.1中描述的網絡。 除了每條邊的成本c_ij之外,還存在經過邊(i,j)的所消耗的資源t_ij,比如時間。 我們的目標是找到從開始節點到結束節點的最短路徑,每個節點只能訪問一次,同時使得資源消耗滿足可用的資源約束,比如全程不能超過多少時間。[1]

當然上面描述問題只是ESPPRC中的一個例子,實際的資源約束可能有很多種,比如在VRPTW的子問題中:[2]

起始節點和結束節點一樣,每個節點有固定的時間窗和固定的需求。車輛不能超過容量約束的要求等等。

ESPPRC vs SPPRC

SPPRC和ESPPRC一樣,只不過SPPRC去掉了elementary的約束,允許最短路中一個節點被訪問多次。

02 應用

我們知道,ESPPRC是可以應用在column generation中的算法框架中的。那么具體是怎么應用的呢?我們知道,在column generation中,subproblem每次迭代就是找一條reduced cost最小的路徑,然后加入到Master Problem中。但是對於ESPPRC來說,每次的cost一樣的,那不每次都求出同一條路徑嗎???

不!在column generation中,其子問題ESPPRC中邊的cost是會隨着Master Problem的求得到對偶變量改變而改變的。還記得reduced cost是怎么計算的嗎?

其中,式子(22)可以表達成式子(23),(23)是什么意思呢?b_ijk意思是邊ij是否在路徑k中。那么,在每一次迭代中,我們就可以利用Master Problem的對偶變量,來更新ESPPRC中每條邊的cost,最終求得的路徑cost就是column generation中的reduced cost。

03 常見的算法

ESPPRC的建模如下:[4]


求解SPPRC和ESPPRC常見的算法主要有以下幾種:[3]

  • Dynamic programming and labeling algorithms
  • Lagrangean relaxation
  • Constraint programming(建模)
  • Heuristics

04 Pulse Algorithm

這一節介紹一個ESPPRC的精確算法Pulse Algorithm[5],算法的偽代碼如下:

其中:

  • r:表示到達當前節點時的cost
  • q:表示到達當前節點時的裝載量
  • t:表示到達當前節點所需的總時間,早到需要等待,不能晚到

大體的思想是通過bound算法確定到達每個節點的最低cost,然后pulse進行路徑搜索,而之前bound求出來的最低cost就可以在pulse搜索的過程中起到定界的作用,去掉一些不好的路徑。

bound的算法如下:

每個節點的最低cost(相當於一個lower bound)是怎么算出來的呢?簡單來說是通過限定每個節點最晚到達時間。在每個節點都給定最晚到達時間t,然后計算在這個最晚到達時間下,每個到達每個節點的最低cost。然后讓t遞減,直到t減少到臨界值。最終得到的是每個節點關於各個最晚到達時間的最低cost矩陣。

最后來看看pulse算法:

pulse是找路的過程,在該過程中:

  • isFeasible檢查到達節點時路徑是否滿足各種資源約束。
  • checkBounds檢查在當前到達時間下,到達節點的cost是否小於等於之前bound算法求出來的那個最晚時間下的最低cost,如果不是就丟棄該支路徑。
  • rollback進行如下檢查:

在每一個節點(開始節點除外),比如上圖中節點j,如果實線路徑的cost < 虛線路徑的cost。那么砍掉實線的路徑(已經有人的cost比你更低,你可以滾了),這就相當於一個回滾的操作。

以上>>>>>>>>>>>>>>>>>>>>>就是整個pulse算法。這里只是起到一個拋磚引玉的過程。可能講的不是很詳細,詳細的過程請大家去閱讀文獻。

05 算法代碼

關於整個pulse算法偽代碼和講解已經夠詳細了,這里給出一個C++的實現代碼,是我遠房的一個學長的學姐的男朋友寫的(真話)。關於編譯運行上面也說明得夠詳細了。

代碼下載請關注我們的公眾號哦!在后台回復【espprc】不包括【】即可下載。

reference

  • [1] A PRIMER IN COLUMN GENERATION, Jacques Desrosiers Marco E. L ubbecke
  • [2] A tutorial on column generation and branch-and-price for vehicle routing problems, Dominique Feillet
  • [3] SHORTEST PATH PROBLEMS WITH RESOURCE CONSTRAINTS, Stefan Irnich Guy Desaulniers
  • [4] An Exact Algorithm for the Elementary Shortest Path Problem with Resource Constraints: Application to Some Vehicle Routing Problems, Dominique Feillet, Pierre Dejax, Michel Gendreau, Cyrille Gueguen
  • [5] An Exact Algorithm for the Elementary Shortest Path Problem with Resource Constraints, Leonardo Lozano, Daniel Duque, Andrés L. Medaglia


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM