改進差分進化算法求解容量受限的車輛路徑問題

01 CVRP數學模型算法


CVRP數學模型能夠表示爲:app

圖片


圖片

02 算法設計思路ide


差分進化算法是一種具備記憶個體最優解種羣內部信息共享的特色的新型進化算法,本質上可看作是一種基於實數編碼的、具備保優思想的貪婪遺傳算法。函數


編碼與解優化

編碼方式採用簡單直觀的序號編碼。顧客點序號集爲{1,2,…,n},車場序號爲0,車輛數目爲k 。編碼結構爲:  ,是由顧客點序號集{1,2,…,n}和(k - 1) 個0 任意組合而成的。其中(k - 1) 個0 的加入是爲了區分不一樣車輛的行駛路線。編碼


解碼方式爲:spa

(1)在每條編碼的兩頭各加一個0設計

(2)依次遍歷每條編碼,將編碼中被0 隔開的每段非0序列保存,即爲一輛車的訪問路徑。每條編碼可解碼出1 至k 輛車的路徑來。以9 個顧客點,5 輛車爲例,編碼X=(0,1,2,3,0,0,4,5,6,0,7,8,9),解碼出:(1,2,3),(4,5,6),(7,8,9)三段非0 序列,即此編碼表示:動用了3 輛車,分別按照(1→2→3),(4→5→6),(7→8→9)的路線行駛。編碼中不能出現負數、小數編碼和非0 位位值重複等問題,即存在合法化問題。這也正是變異操做後須要進行的合法化處理的緣由。orm


適應度函數blog

適應度函數按式(1)定義:使用車輛數Z1和全部車輛的總運行路線長度Z2加權和。權值係數k1 、k2的取值根據具體狀況進行設置,即若優先考慮使用車輛數目少,則可設置k1>>k2;若優先保證車輛總行駛距離短,則可設置k1<<k2


種羣初始化

爲提升初始種羣的質量,採用貪婪的初始化方法。對於初始種羣的每一個個體,產生方法以下:

步驟1 初始化待服務的顧客點列表List爲包含全部顧客點序號的列表,已經服務顧客點列表SList爲空。

步驟2 隨機選擇一個顧客點A做爲起點,並將此點做爲當前顧客點TSList,並從List移除

步驟3 從List中選擇距離顧客點T最近的顧客點做爲新的當前顧客點T,將T 插入SList,並從List 中移除

步驟4 判斷List是否爲空,如果,則轉步驟5;若否,則轉步驟3。

步驟5 將(K-1)個0 隨機插入SList 序列中。

步驟6 判斷SList是否知足全部的約束條件,若不知足,則跳至步驟1;若知足,則結束。


變異及其合法化處理

將隨機選擇的個體進行直接按位相加減,然後進行合法化處理。對於5個顧客點,2輛車的例子,隨機選擇3個個體:(1,0,2,3,0,4,5),(2,5,0,3,1,0,4),(5,3,1,0,0,4,2)。


當F=1時,按照  對每一位進行操做,得:vi= (-2,2,1,6,1,0,7) 。此時vi存在負數位和非0位值重複問題,爲非法編碼,須要合法化處理。


合法化處理過程

(1)提取編碼vi中的0 並記錄其位置。若是0值位超過車輛數,則只提取車輛數個0。此時,vi=(-2,2,1,6,1,7)。

(2)將提取過0的編碼vi 從小到大排序,而後使用其序號代替原編碼值。如:vi=(-2,2,1,6,1,7),排序後爲:(-2,1,1,2,6,7)。從前到後依次:位值-2的序號爲1,位值2的序號爲4,依次類推動行合法化處理後的編碼爲(1,4,2,5,3,6)。

(3)將步驟(1)中提取出的0 從新插入編碼。此時vi =(1,4,2,5,3,0,6)。


改進的貪婪順序交叉

順序交叉能夠看作是帶有不一樣修復程序的部分映射交叉PMX變形,可以較好地保留相鄰關係、前後關係。改進主要是針對編碼中0值位可能出現重複的問題,即在去掉已有基因時,從前日後進行刪除,而且,已有基因中有幾個0則刪除幾個0。其步驟以下:

步驟1 選切點c1 、c2 。

步驟2 交換中間部分。

步驟3 從第二個切點c2 後,第一個基因起列出原順序,去掉已有基因(注意0 的個數)。

步驟4 從第二個切點c2 後,第一個位置起,將得到的無重複順序填入。


算法總步驟

步驟1 初始化參數。令迭代次數t = 0 ,設置最大迭代

次數,種羣規模NP,放縮因子F ,以及交叉常數CR 。

步驟2 貪婪初始化

步驟3 循環次數t=t+1。

步驟4 令目標個體索引號i=1 。

步驟5 在目標個體  以外隨機選擇另外3個不一樣的個體。

步驟6 執行變異操做,產生變異個體  。

步驟7 計算  的適應度,執行選擇操做,若變異個體  優於目標個體   ,則跳轉到步驟10;不然執行步驟8。

步驟8 對  和  執行交叉操做,產生交叉個體   。

步驟9 計算  的適應度,執行選擇操做。

步驟10 目標個體索引號i=i+1,返回步驟5 直至i=NP;不然,執行步驟11。

步驟11 若迭代次數大於最大迭代次數,則循環結束

並輸出計算結果;不然跳轉到步驟3,繼續下一次迭代。


圖片

03 參考文獻

[1]鄔開俊,王鐵君.基於改進差分進化的車輛路徑優化算法[J].計算機工程與應用,2013,49(13):17-20.

相關文章
相關標籤/搜索