• 沒有找到結果。

第三章 群體式多鄰域模擬退火法

3.3 迭代改良 (Iterative Improvement)

3.3.3 鄰域函式

鄰域函式的部分採用 [5] 所提出的五個鄰域函式,並使用隨機的方式挑選,

而在改良 PartialSwapRounds 與 PartialSwapTeams 之後將原先的這兩種方法替換 成改良後的版本,詳細改良的方法在之後作介紹。

變 動 鄰 域 模 擬 退 火 法 (Variable Neighborhood 3.4

Simulated Annealing, VNSA)

選擇鄰域函式的方法在本論文中有兩種做法,隨機選擇的部分較為直觀,在 每次要做區域搜尋時隨機的從鄰域函式中選擇一個鄰域做搜尋,因此在這部分本 論文不多做說明,只列出一些與變動鄰域不同的點。

區域搜尋的過程中,每一次搜尋總共有|SLS|個,每次會從 SP中挑選出兩個候 選解,接著由於每次 w 的不同算出適應函數,再利用競爭法選擇這兩個候選解中 較好的解,最後將每個解作區域搜尋。然而為了避免搜尋次數不夠多而無法找到 區域最佳解,所以這樣的選擇方式並不會每一代都作,在實驗一開始時會先做一 次,之後替換的次數設定會採取最佳解有無更新的方式,當沒有更新時,變數

countSame 會加 1,當 countSame 除以 G

update的餘數為 0 以及 countSame 不為 0 時 會去做替換。因為搜尋許多代之後目標函式會跟著降低,為了不讓模擬退火法因

為目標函式降低但還使用高的溫度而亂跳動,在此時也會將模擬退火法中的初始 溫度降低 (β),藉由此方式調整初始溫度而不會從頭到尾都用同樣的起始溫度。

區域搜尋法的部分採用變動鄰域搜尋法以及模擬退火法的方式去搜尋,藉由

w 將兩個目標分成|S

LS|個權重,接著對每個方向用鄰域去做模擬退火法搜尋,本 論文採用變動鄰域搜尋法的方式,將一種鄰域搜尋到區域最佳解後,才會替換成 另外一種鄰域函式,如果在搜尋的過程中有搜尋到更好的解,那麼會馬上換回第 一種鄰域做搜尋。本論文在模擬退火法的終止條件使用次數限制的方式,而不同 於以往用溫度來當作終止條件。

本論文模擬退火法採用 [5] 提出的架構,將找到的解分成合法與不合法,如 果找到的為合法並且比最佳合法解好,會把現有解替換成找到的解,並將此解存 為最佳合法解;如果找到的解為不合法解且比最佳不合法解好,也會將現有解換 成最佳不合法解,並且將此解記錄成最佳不合法解 。不同的是本論文使用

Best-improving 的 方 式 搜 尋 , 而 不 同 於 文 獻 中 使 用 First-improving , 使 用 Best-improving 是希望看過較多的解之後再選擇一個最好的去做模擬退火法,藉 由這樣的方式來提升效能。模擬退火法中的升溫會在找到的解比最佳合法解和最 佳不合法解好時做紀錄,當要做升溫時會用此溫度乘上 Treheat做為初始溫度,而 策略震盪也會在此時去將懲罰函數做改變,模擬退火法會在搜尋次數等於設定的 總共搜尋次數 (maxE) 後停止。

變動鄰域模擬退火法 pseudo-code 如演算法 2 所示:

演算法 2 升溫的次數,maxP 控制溫度降低的次數,maxC 控制 Best-improving 在同個溫度 下搜尋的數量,使用的鄰域函式會用到 [5] 提出的五個鄰域函式,以及額外改 進的兩個鄰域函式,另外針對鄰域函式的使用在之後也會做相關的實驗,模擬退 火法 pseudo-code 如演算法 3 所式:

演算法 3

接受準則 (Accept) 的 pseudo-code 如演算法 4 所式:

演算法 4

Function Accept(s ,best

, goodT, bestF, bestIF ,T , w) 1: if F(best) < F(s) or

2: isFeasible(best) and F(best) < bestF or

3: not isFeasible(best) and F(best) < bestIF then 4: accept ← true;

5: else if exp(-(⁡|(𝑓1

(𝑏𝑒𝑠𝑡)-(𝑓1(𝑠))|⁡×⁡𝑤⁡+⁡|(𝑓2(𝑏𝑒𝑠𝑡)-(⁡𝑓2(𝑠))|⁡×⁡(1−𝑤)⁡)

𝑇 ) > rand[0,1) then 6: accept ← true;

7: else accept ←false;

8: if accept is true then

不會每一個實驗都有策略震盪的機制。

若實驗採取隨機鄰域函式的方式,則會將演算法 2 中第 8 與第 10 行中設定 鄰域函式參數取消,並在演算法 3 中第 7 行的部分採取隨機選擇鄰域的方式,另 外如果選到較好的解也不會直接跳出模擬退火法,會把整個模擬退火法做完才結 束。

在本論文中使用

α 與 β 來控制溫度的降溫,並且在模擬退火法中有一次的升

溫機制,其溫度變化如圖 28 所示:

圖 28:溫度變化示意圖

在搜尋 SLS的過程中,會使用 T0來當作每個解的初始溫度,當作了一定的時 間(用 Gupdate控制)後,利用 β 將初始溫度降溫,而在使用模擬退火法搜尋的過程 中,會將溫度用

α 來降溫,並且會有一次升溫的機制,然而因為升溫的溫度是採

用搜尋過程中最佳解的溫度,因此升溫時無法明確的知道溫度升的高度。

更新候選解集合 (Update candidate solution set) 3.5

對所有 SLS做區域搜尋法後,會將找到的所有解與 SP中所有的解用 NSGA2 做選擇,留下較好的解並將不好的解替換掉,因為區域搜尋後的解會為最佳合法

解,所以除了起始的不合法解外,皆會被換成合法解;但是如果在區域搜尋的過 做了針對鄰域的實驗,因為 SwapRounds 與 PartialSwapRounds 概念相同,不同的 只在於前者會將同回合中的所有解去做替換,而後者會對部分被影響到的隊伍去 做替換,如此一來可以避免過多的替換而使得解變成完全不同的樣子,所以本論 文認為後者的效能會比前者來的有用,替換的次數也會比較少;SwapTeams 與

PartialSwapTeams 的觀念也類似如此。

為了增加搜尋的效能與減少搜尋的時間,對於這兩個鄰域函式本論文做了些

改進,PartialSwapRounds 改進方法如圖 29 所示(負號代表客場):

圖 29:PartialSwapRounds 改進範例

PartialSwapRounds 首先會選擇一個隊伍和兩個回合,圖 29 選擇隊伍 2 第 6

與第 9 回合來做交換,原先 PartialSwapRounds 的選擇機制是隨機選擇,然而這 樣會使得原本三個同地點的安排被打斷,例如前者原本三場比賽都在主場,但如 果換成-6 則會變成需要移動到客場再移動回主場,如此會增加此隊伍的旅行總距 離,為了避免此問題的產生,本論文將對於選擇到的回合做判斷,如果前後的隊 伍都與中間同樣的主客場關係,則不會挑選這樣的關係去做交換,但是如果兩個 回合的選擇都做這樣的判斷,那麼選擇的可能性會變得相當少,所以這樣的判斷 只對於第一回合的選擇做判斷,藉由此方式來增加 PartialSwapRounds 的效能;

PartialSwapTeams 的機制類似以上所使用的機制。

第四章 實驗與分析

本章會先介紹測試問題、效能指標、測試環境,接著從單目標最佳化問題開 始實驗,確定改良過的鄰域函式是否有較好的效能,並將單目標最佳化問題發展 為多目標最佳化問題,利用兩種限制條件處理來做比較。

測試問題 4.1

本 論 文 採 用 競 賽 旅 程 問 題 創 始 者 所 提 供 的 網 站 (Challenge Traveling

Tournament Instances [16])中的以下幾組問題來驗證結果:

(1) NL Instances 包含 3 個測試問題。

(2) Super Instances 包含 3 個測試問題。

(3) Galaxy Instances 包含 3 個測試問題。

(4) Circular Distance Instances 包含 3 個測試問題。

效能指標 4.2

為了驗證效能,旅行總距離採用目前找到的最佳解當作效能指標,然而最長 旅行距離目前並沒有任何文獻能夠當作效能指標,因此將列出與自己的做法的比 較,並且列出所有找到的最佳解。

測試環境 4.3

本論文演算法程式語言使用 C++來實作,作業系統為 Windows 7,CPU 為

Intel Core i7-3370,記憶體大小為 4GB,編譯環境為 Microsoft Visual Studio 2010。

參數設定

表 5:參數設定

此實驗採用隨機變動鄰域搜尋法來當作鄰域的選擇方式,採用 SwapHomes、

SwapRounds、SwapTeams、PartialSwapRounds、PartialSwapTeams 五種鄰域函式。

此實驗結果如表 7 所示:

表 7:迭代改良與模擬退火法實驗結果 Instance Best

known

II(Min/Avg) Time(Sec) feasible SA(Min/Avg) Time(Sec)

circ6 64 64/66 44.80 10 64/64 52.36

circ8 132 150/155.75 184.62 8 132/132 197.26

circ10 242 308/308 486.58 1 248/256.80 519.80

NL6 23916 24073/24781.40 45.25 10 23916/23916 51.98 NL8 39721 42061/44817.29 184.41 7 39721/39721 198.08 NL10 59436 70576/72842 482.22 4 59583/60130.50 508.95 galaxy6 1365 1365/1395.90 44.68 10 1365/1365 53.49 galaxy8 2373 2573/2708.10 186.53 10 2373/2373 201.44 galaxy10 4535 5284/5386 491.32 5 4548/4611.10 522.67 Super6 130365 130365/137241.70 44.66 10 130365/130365 50.16 Super8 182409 196243/213947 184.98 10 182409/182487.50 196.64 Super10 316329 365432/388393.44 489.75 9 320701/322663.40 513.50

在表 7 中 feasible 代表在迭代改良中找到合法解的數量,Min 為搜尋到的合

4.5.2 變動鄰域函式與隨機鄰域函式比較

Instance Best

known

VNSA(Min/Avg) Time(Sec) randSA(Min/Avg) Time(Sec)

circ6 64 64/64 44.03 64/64 52.36

circ8 132 134/135.80 175.58 132/132 197.26

circ10 242 262/270.80 476.99 248/256.80 519.80

NL6 23916 23916/23944 43.47 23916/23916 51.98

NL8 39721 39721/39968 174.79 39721/39721 198.08 NL10 59436 60075/62300.20 468.48 59583/60130.50 508.95

galaxy6 1365 1365/1365 44.84 1365/1365 53.49

galaxy8 2373 2373/2378.20 177.88 2373/2373 201.44 galaxy10 4535 4711/4757.00 477.91 4548/4611.10 522.67 Super6 130365 130365/131540.70 41.97 130365/130365 50.16 Super8 182409 184738/186076.20 172.72 182409/182487.50 196.64 Super10 316329 328344/331195.30 470.33 320701/322663.40 513.50

由表 8 可以發現使用變動鄰域函式後,反而使效能變差,本論文認為鄰域函

4.5.3 改良後鄰域函式與改良前鄰域函式比較

在此實驗中利用改良的 PartialSwapRounds 和 PartialSwapTeams 替換掉原先 的版本,比較隨機鄰域函式與變動鄰域函式使用改良鄰域前後的差別,隨機鄰域

函式結果如表 9 所示,new 代表使用改良鄰域函式:

表 9:隨機鄰域函式使用改良鄰域實驗 Instance Best

known

randSA(Min/Avg) Time(Sec) randSA_new(Min/Avg) Time(Sec)

circ6 64 64/64 52.36 64/64 48.83

circ8 132 132/132 197.26 132/132 186.42

circ10 242 248/256.80 519.80 254/257.8 498.76

NL6 23916 23916/23916 51.98 23916/23916 48.37

NL8 39721 39721/39721 198.08 39721/39721 186.91

NL10 59436 59583/60130.50 508.95 59583/60067.80 488.48

galaxy6 1365 1365/1365 53.49 1365/1365 49.78

galaxy8 2373 2373/2373 201.44 2373/2373 189.15

galaxy10 4535 4548/4611.10 522.67 4584/4614 498.49 Super6 130365 130365/130365 50.16 130365/130365 46.86 Super8 182409 182409/182487.50 196.64 182409/182425 185.98 Super10 316329 320701/322663.40 513.50 318767/322599.40 487.13

變動鄰域函式實驗結果如表 10 所示,new 代表使用改良鄰域函式:

表 10:變動鄰域函式使用改良鄰域實驗 Instance Best

known

VNSA(Min/Avg) Time(Sec) VNSA_new(Min/Avg) Time(Sec)

circ6 64 64/64 44.03 64/64 41.14

circ8 132 134/135.80 175.58 132/133.60 165.32

circ10 242 262/270.80 476.99 260/267.60 457.23

NL6 23916 23916/23944 43.47 23916/23916 40.60

NL8 39721 39721/39968 174.79 39721/39854.30 166.55 NL10 59436 60075/62300.20 468.48 60642/61521 450.46

galaxy6 1365 1365/1365 44.84 1365/1365 42.25

galaxy8 2373 2373/2378.20 177.88 2373/2373.80 168.99 galaxy10 4535 4711/4757.00 477.91 4619/4711.50 457.65 Super6 130365 130365/131540.70 41.97 130365/130365.50 39.52 Super8 182409 184738/186076.20 172.72 182480/184096.20 165.66 Super10 316329 328344/331195.30 470.33 325653/327001.60 449.82

由以上兩個實驗可以看出改良後的鄰域函式能夠有效的去做搜尋,比原先使 用的 PartialSwapRounds 和 PartialSwapTeams 的搜尋更適合競賽旅程問題。

4.5.4 變動鄰域函式順序比較

此實驗先針對鄰域函式的順序列出幾個方式,並依照這些順序去做變動鄰域 函式,鄰域函式順序在本實驗中有以下幾種 (SH 代表 SwapHome、SR 代表

SwapRounds、ST 代表 SwapTeams、PSR 代表 PartialSwapRounds、PST 代表

PartialSwapTeams,此實驗目的是測試鄰域順序是否影響效能,因此 PSR 與 PST

只用 [5] 提出的版本):

(1) SH SR ST PSR PST (原先的版本) (2) SR ST SH PSR PST

(3) SR ST PSR PST SH (4) PSR PST SH SR ST (5) PSR PST SR ST SH

實驗結果如表 11 所示,第一行數字代表 Min,第二行代表 Avg:

表 11:變動鄰域函式鄰域順序實驗 I Super6 130365 130365

131540.70 Super8 182409 184738

186076.20 Super10 316329 328344

331195.30

表 12:變動鄰域函式鄰域順序實驗 II

Instance Best known (4) (5) (6)

circ6 64 64/64 64/64 64/64

circ8 132 134/135.40 132/134.80 134/134.60

circ10 242 258/271.20 264/271.60 264/268

NL6 23916 23916/23931.70 23916/23945.60 23916/23940 NL8 39721 39721/39845.20 39721/39787.70 39721/39826.50 NL10 59436 61215/62428.20 61984/62506 60680/61890.70

galaxy6 1365 1365/1365 1365/1365 1365/1365

galaxy8 2373 2373/2376 2373/2373 2373/2375.20

galaxy10 4535 4653/4743 4694/4770.40 4653/4719

Super6 130365 130365/130520 130365/130762.30 130365/131998.80 Super8 182409 182863/186004.30 182431/184647.50 182431/184263.50 Super10 316329 327058/329616.80 324073/329466.50 325855/329026.20

以上實驗可以發現,不使用 SR 與 ST 的搜尋效能似乎會比有使用上來的好,

circ8 132 132/133.40 132/133 132/132.80

circ10 242 258/265.40 258/264.80 256/263.40

NL6 23916 23916/23916 23916/23916 23916/23916

NL8 39721 39721/39755.50 39721/39732 39721/39726.50 NL10 59436 60563/61406.80 60604/61664 59967/60898.40

galaxy6 1365 1365/1365 1365/1365 1365/1365

galaxy8 2373 2373/2373 2373/2373 2373/2373.80

galaxy10 4535 4604/4669.20 4602/4699.70 4611/4674.60 Super6 130365 130365/130365 130365/130365 130365/130365 Super8 182409 182409/183842.10 182409/184601.80 182409/183275.90 Super10 316329 325330/327564.40 321765/325777.50 322391/326215.40

由表 13 可以看出在使用三種鄰域函式並使用改良後的鄰域函式時,找到的 最佳解與解平均大部分比其他兩種方法好。在使用五種鄰域函式狀況下,在搜尋 的過程中,可能因為使用了 SR 與 ST 而將解帶往其他鄰域函式也無法跳脫的區域 最佳解。因此在搜尋的能力上比使用三種差,但這是在單目標最佳化的情況下,

未來將問題發展為多目標時,將會把這兩種狀況做實驗來比較。

4.5.5 策略震盪與無策略震盪比較

此實驗針對增加策略震盪後,變動鄰域函式是否能改善效能做測試。此實驗 鄰域函式順序為 PSR PST SH,new 代表使用新的鄰域函式,so 代表使用策略震盪

機制,實驗結果如表 14 所示:

表 14:策略震盪與無策略震盪實驗

Instance Best known (6)_new (6)_new_so

circ6 64 64/64 64/64

circ8 132 132/132.80 132/133

circ10 242 256/263.40 256/264.40

NL6 23916 23916/23916 23916/23928.40

NL8 39721 39721/39726.50 39721/39726.50

NL10 59436 59967/60898.40 60117/61291.30

galaxy6 1365 1365/1365 1365/1365

galaxy8 2373 2373/2373.80 2373/2373

galaxy10 4535 4611/4674.60 4644/4685.70

Super6 130365 130365/130365 130365/130640.10 Super8 182409 182409/183275.90 182545/184059.20 Super10 316329 322391/326215.40 324122/327400.40

由表 14 可以發現加入策略震盪之後,大部分的搜尋能力反而降低,這可能

確定是否用到一個最合適的懲罰值,因此在此作懲罰值的實驗,將採用原先產生

circ8 132/132 132/132 132/132 132/132.60

circ10 252/255.60 250/256 250/254.20 252/255.80 NL6 23916/23916 23916/23916 23916/23916 23916/23916 NL8 39721/39721 39721/39721 39721/39721 39721/39721 NL10 59693/60048 59583/60097.90 59583/60131.90 59847/60201.30 galaxy6 1365/1365 1365/1365 1365/1365 1365/1365 galaxy8 2373/2373 2373/2373 2373/2373 2373/2373 galaxy10 4538/4585.80 4557/4593.40 4535/4578.70 4556/4597

Super6 130365/130365 130365/130621.50 130365/130365 130365/130365 Super8 182409/182653.40 182409/182588.10 182409/182476.50 182409/182585 Super10 320942/323128.70 321997/324724.60 321371/323564.40 318924/322617.10

由此實驗結果可以發現,大部分的問題使用原本懲罰值兩倍能夠搜尋到的最

表 16:與部分文獻比較表

(3) rand PSR PST SH (使用鄰域改良、策略震盪)

的解:

但是在某些問題如 super,搜尋到的點卻相當的多,這部分跟測資有著相當大的關 連性。

以下列出幾個趨勢比較明顯的圖,行為旅行總距離,列為最長旅行距離:

圖 30:galaxy8 最佳解

圖 31:Super6 最佳解

圖 32:Super8 最佳解

圖 32:Super8 最佳解

相關文件