介紹本論文提出的文化基因演算法的各個步驟,特別是基因演算法與區域搜 尋法。
【第四章】實驗數據與效能評比
包含文化基因演算法建置與運行環境、實驗設計與實驗數據比較和討論。
【第五章】結論與未來發展
對本研究進行總結與提出未來展望。
8
第二章 文獻探討
在求解時間窗車輛路線問題的過程中,常用的解題方法分為兩類,分別是建 構式演算法和路線改善法,本章將會分別探討過去對於這兩類的演算法的研究。
2.1 建構式演算法
以下將會介紹 Solomom [4][10] 所提出的建構式演算法。
2.1.1 節省法
節省法(Savings Heuristics)初始狀態是對每一個點產生一條路線,故有 N 個 節點則會產生 N 條路線,再藉由節省值的計算選擇節省值大的路線進行合併。
節省值的公式如 (13) 。
savij = di0 + d0j – cij,
0
(13)每一次合併的過程皆須要檢查容量和時間可行性,使建立出來的解都不會違反限 制,如圖 2 所示。
圖 2 路線合併
9
2.1.2 時間導向最近鄰點法
時間導向最近鄰點法(A Time-Oriented, Nearest-Neighbor Heuristic)是由派車 站開始,對未排入路線 (Un-routed) 中的每個顧客點 i,計算其考慮空間和時間 之後的花費值 Costi,將 Costi值最小的加入到路線中的最後一個顧客點,直到剩 餘所有未排入路線的點無法再進行加入,則返回派車站,另外重新建構另一條路 線。在加入顧客點 i 的過程中須要檢查容量和時間可行性,Costi的公式如 (14)。
Costi = 1
T
i j + 2d
ij + 3u
ij ,
1 + 2 + 3 = 1 , 1 0,
2 0,
3 0
(14)其中 Tij = bj – (bi + si), uij = lj – (bi + si + tij) Tij為旅行時間加上等待時間,dij 為兩點的距離,uij為抵達 j 點後離時間窗上界之剩餘時間。
2.1.3 插入法
插入法
(Insertion Heuristics)
由 Solomom [10] 所應用在時間窗車輛路線 問題,常稱作 I1 插入法,I1 插入法將一個未排入路線的顧客點 u 插入到已存在 的路線上,過程中會使用到兩個準則,第一個準則是用來決定顧客點插入已存在 的路線中的 n 個位置並從中找出最佳位置,以 c1(i, u, j) 表示,式子如 (15) 所示。c1(i(u), u, j(u)) = ( ) (15)
c1(i, u, j) = 1c11(i, u, j) + 2c12(i, u, j), 1 + 2 = 1, 1 0, 2 0
10
c11(i, u, j) = diu +duj β ij, c12(i, u, j) = bju bj
bju為插入 u 後,開始服務 j 的時間。
第二個準則是以 c2(i, u, j) 用來選擇插入路線中最佳的顧客點 u*,c2(i, u, j)計算 方式如 (16) 所示。
c2(i(u*), u*, j(u*)) = max[c2(i(u), u, j(u))] (16) c2(i, u, j) = λd0u c1(i, u, j), λ 0
u 為尚未排程顧客點中的可行點。
2.2路線改善法
路線改善法是藉由路線交換顧客點或邊線的方式而產生出的新路線,進行交 換改變的時候必須要符合時間窗和車載容量的限制,以下介紹常見的路線改善法 [4] 。
2.2.1 K-opt
K-opt 的概念藉由交換路線上的 K 個邊線來產生一個新的路線,K 越大表示 交換次數越大,一般而言 K 都設為 2 或 3,以 2-opt 作為例子。
圖 3 2-opt 路線交換法
11
由上圖 3 可以看到原本的路線少了 E(i, i+1) 、E(j, j+1) 多了 E(i, j) 、E (i+1, j+1)。但由於這種交換方式會導致邊線 E(j, i+1) 進行反向的動作,在對 VRP 問
題中這種顧客點服務順序的交換不會有影響,但是在 VRPTW 問題中顧客點服務 順序的交換常會導致時間窗限制的違反。
2.2.2 2-opt*
在 K-opt 的交換邊線的方式使得路線在經過 K-opt 之後,會需要進行反向的 動作。這個動作在時間窗車輛路線問題常常會使得,新產生出來的路線會違反時 間窗限制。因此 Potvin 和 Rousseau [12] 提出了 2-opt*。如圖 4 所示,比較看到 少了 E(i, i+1) 、E(j, j+1) 多了 E(i, j+1) 、E(j, i+1) ,使其餘邊線不需要反轉。
圖 4 2-opt* 路線交換法
2.2.3 Or-opt
由 Or [13] 在 1976 年提出,係將路線中的單一節點或連續兩至三個節點移 除,再插入同一路線或插入到不同路線中。圖 5 表示將連續兩個顧客點 i, i+1 插 入顧客點 j, j+1 之間。
12
圖 5 Or-opt 路線交換法
2.2.4 -interchange
-interchange 是將兩條路線進行顧客點的轉換,可分為 (1, 0) 、 (1, 1) 及
(1, 2) , (1, 0)視為是顧客點的轉移,作法是將路線 A 上的顧客點插入到路線 B,
(1, 1) 和 (1, 2) 則稱為
路線間的節點交換。
圖 6 -interchange 路線交換法
在圖 6 中以 (1, 2) 作為例子,在路線 1 選擇了 1 個顧客點 i 與路線 2 的 2 個顧客點 j 與 j+1,進行節點交換。
13
2.3 啟發式演算法
2.3.1 傳統時間窗車輛路線問題解法
Potvin 等人[14] 使用禁忌搜尋法 (Tabu Search, TS) 求解時間窗車輛路線問 題,在禁忌搜尋法中,在每次要產生鄰域解時,會使用的方法是 Or-opt 來處理
縮短路線數的問題。 Potvin 與 Bengio [15] 以基因演算法搭配區域搜尋法 (local search) 求解時間窗車輛路線問題,Homberger 與 Gehring [16] 藉由 (, )
演化策略來求解,使用 Or-opt 來減少路線數。不過對於新插入顧客點的位置採 取了,另一種選擇的策略。PTk式 (17) 表示路線插入顧客點 k 後,多走顧客點 k 所花的額外時間,PDk 式 (18) 則表示路線插入顧客點 k 後,多走顧客點 k 所花 的額外距離,選擇 PTk 最小當作插入位置,若是 PTk 一樣,則選擇 PDk 最小作 為插入位置。使新插入顧客點 k,所增加的成本最少。
( ) { a { a {δ } } – δ
a {δ } – (δ ) w s (17) ( +) – (18)
δi:車輛在點 i 服務完的時間 (即離開點 i 的時間) 。
di,k:車輛從 i 走到 k 的距離。
ek:點 k 的時窗上界。
sk:點 k 的服務時間。
14
2.3.2 兩階段求解時間窗車輛路線問題
兩階段(Two Stage)求解的想法是因為求解時間窗車輛路線問題有兩個目標,
一個是總路線數,一個是總距離,因此這種做法就是將時間窗車輛路線問題視為 兩個單目標問題,分別對這兩種單目標進行單目標最佳化。因為傳統上,認為路 線數比總距離重要,所以會先對總路線數最小化,再對總距離最小化。
Homberger 與 Gehring 提出一個 Minimal Delay (mdl) 值來評估減少路線 數的難易度。Minimal delay 值現在已經廣泛運用在兩階段解法。mdl 值會評估擁 有最少顧客點的路線被消除的難易度。DR值為路線 R 上的總 mdl 值,Dk表示將 點 k 插入到邊(i, i+)之間的 mdl 值。
∑ (19)
{
( ) ( ) (20)
Case 1 指的是當顧客點可以不違反限制的情況下插入其他路線,則 Dk值為 0。
Case 2 指的是當插入顧客點後,路線會違反容量限制,則 Dk為。
Case 3 指的是當插入顧客點後,路線會違反時間窗限制。
( ) ( ) ( ) (21)
( ) { ′– } (22)
( ) { { } – } (23)
15
fk: 顧客 k 的時窗下界。
i:顧客 i 的最晚抵達時間。Bent 與 Hentenryck [17] 以模擬退火法 (Simulated Annealing Algorithm, SA) 混合大規模鄰域搜尋法 (Large Neighborhood Search, LNS) 來求解時間窗車輛路 線問題。使用模擬退火法專注於縮短路線數,Bent 與 Hentenryck 提出一個方法,
在縮短路線數之外,還會利用最大化所有路線顧客數的平方和來比較解的品質,
目標是讓單一路線儘可能容納最多顧客,例如總共有顧客數 10,分配到兩條路 線,顧客分配為 9:1 會比顧客平均分配來的好,再搭配 mdl 值的概念縮短路線數。
Lim 與 Zhang [18] 定義出 mdlload (式 (27)),並將 Homberger 與 Gehring 所 提出的 mdl 加入一個新的值 V3k (式 (26)) 並把它定義為 mdltime (式 (25) )。所以,
Lim 與 Zhang 新的 mdl 值 (式(24)) 定義如下:
( ) a ( a ( ) ( )) (24) ( ) ( ) ( ) ( ) (25) 為使用者定義的值。通常設為 1。
( ) a ( - ) (26)
( ) { ( )
( - ) ( ( ) - )
( ) (27)
load(r’)+qv-Q:路線 r加入顧客點 v 超載的量。
16
17
lc :表示 c 點的最晚服務時間 (即時窗上界) 。
Violi:表示在解 i 中共有幾個違反時窗限制的顧客點。
在 Bräysy 的其他研究中也曾使用不可行解來減少路線數,但主要是使用特 殊的方法允許解暫時的違反限制,再馬上修正為合法的解,此類方法會在 2.3.5 介紹。
2.3.4 多目標求解時間窗車輛路線問題
以多目標觀點(Multi-Objective)來求解時間窗車輛路線問題的問題是在最近 幾年才開始,Tan 等人 [20] 以基因演算法 (GA) 結合區域搜尋法稱為 HMOEA 來求解時間窗車輛路線問題,他將個體的適應度 (fitness) 定義為 (1+q),q 表示 個體 i 被族群中其餘個體凌越的次數,若個體 i 沒有被其餘個體凌越,則個體 i 的適 應 度 為 1 。Tan 在這邊提出一 個特別 的 交配操作稱 為 Route-exchange
crossover,兩個親代將各自最好的路線分享給對方,親代保留從對方身上拿到的 路線,將本身的解和對方的最佳路線比較,將重複的基因刪除,產生新的子代。
最好路線的判斷是由個別路線所經過的距離除以個別路線所經過的顧客,代表該 路線上移動到一個顧客點所需的平均距離,值越小表示越好。Route-exchange crossover 表示如圖 7。
18
圖 7 Route-exchange crossover 圖示
HMOEA 的效能在找出總距離短的解,比以傳統的方法求解時間窗車輛路線 問題來的好,但所找出來的解在總路線數並沒有比較好,以多目標的觀點來看就 是多求出不被最佳解凌越的解。而 Garcia-Najera 等人 [21] 也以多目標的觀點來 求解時間窗車輛路線問題,架構以基因演算法為主。Najera 提出了不同的方式來 評估解的品質。使用階級 (Rank) 的概念來定義適應度,先將所有彼此互相不凌 越 (non-dominated) 的個體設為 Rank1,再將剩餘的個體依照同樣方式分階級,
然後將 Rank 設為 Fitness。Garcia-Najera 在這裡使用對族群裡面的解計算其相似 度,並將相似度應用在選擇親代的過程,第一個親代使用了相似度的概念來族群 多樣性的維持。在 2-Tournament 以 Fitness 來選擇第一個親代,但是第二個親代 實驗了三種不同的選擇方法,分別是 Fitness 較小的個體、與第一個親代相似度 較低的個體,與族群相似度較低的個體。Najera 經由實驗結果做出的結論是,選 擇第二個親代時,挑選與族群解相似度較低的個體,較容易維持族群的多樣性且 對兩個目標的最小化都比另外兩種方法有效。也因此,了解到族群多樣性的維持 對於求解時間窗車輛路線問題有一定程度的影響力。
19
Chiang and Hsu [9]
所 提 出 混 合 式 演 化 式 演 算 法 使 用 了 改 良 式 的 Route-exchange crossover 並搭配禁忌搜尋法。改良的 Route-exchange crossover,在進行兩個個體的路線交換選擇時,會去隨機選擇最好的三條路線進行交換。並 在進行完原版的 Route-exchange crossover 的行為,再進行一個減少路線的動作。
減少路線的方式是將最差的路線重新插入到其它路線中的最好的位置。在插入最 差路線中的顧客點時,會依照顧客點在路線中的排序插入。
2.3.5 特殊方法求解時間窗車輛路線問題
大 部 分 研 究 所 採 用 的 路 線 改 善 法 都 是 分 別 使 用 Or-opt 、 2-opt* 及
-interchange 組成,Homberger 所提出的 ( , λ) 演化策略中的鄰域函式集合,就
是由上述三個所組成,而 Bräysy [22] 所提出的 Ejection Chain (EC) 則是一個專 門用來縮短路線的方法,如圖 8 所示,要消除路線 3,但因為路線 1 和 2 的時窗 限制關係,使得路線 3 上的點 i 無法直接插入 1 或 2,此時可以考慮 1 上的客戶 j 是否可以插入到路線 2,若是可以插入到路線 2,則路線 1 因為少了顧客點 j,
所以可以空出空間給予路線 3 上的點 i 進行插入,路線 3 上的顧客點就減少一個。
另外在 Bräysy [22] 提到其他方法,執行插入步驟時,先忽視時窗限制,先直接 插入路線中,在違法的路線中找出第一個違反時窗限制的顧客點。接著為了使路 線合法,需將車輛抵達違法顧客點的時間降低,這邊有兩種作法,第一是將違法 顧客點以前的合法顧客點,改插入到違法顧客點之後的位置。第二是將違法點以 前的顧客點重新排序,目的都是為了將違反時間窗限制的值降下來。
20
圖 8 Ejection Chain 示意圖
在 2003 年時 Bräysy [24] 提出的快速的區域搜尋法中使用了類似 Ejection
在 2003 年時 Bräysy [24] 提出的快速的區域搜尋法中使用了類似 Ejection