• 沒有找到結果。

混和式區域搜尋演算法 [12]

第二章 文獻探討

2.2 區域搜尋法

2.2.5 混和式區域搜尋演算法 [12]

該篇文獻混和了貪婪隨機調適搜尋程序、變動鄰域搜尋法以及禁忌搜尋法,

變動鄰域搜尋法的目的是讓區域搜尋能夠使用相同的鄰域函式搜尋到停止條件 後再改變鄰域,如此一來能夠確保搜尋到某鄰域的區域最佳解,而不會因為每一 次鄰域都用隨機選擇而無法順利找到區域最佳解。

變動鄰域搜尋法被本篇論文所採用,但是為了比較其是否真的有所幫助,在 本論文實驗的部分會針對此方法跟隨機鄰域選擇的方式做比較,希望能找到一種 效能最佳的搜尋法。

群體式搜尋法 2.3

2.3.1 基因演算法 [13]

該文獻採用基因演算法 (Genetic Algorithm) 解競賽旅程問題,染色體編碼的 方式是將所有的比賽排成一條編碼,計算目標函式時,在根據編碼的順序安排到 各回合當中,以 CIRC4 問題當範例,此種方式編碼如圖 20:

圖 20:染色體編碼範例 (修改自 [13])

解碼方式如圖 20 中數字的順序兩個一組,前者代表此比賽中主場的隊伍,

後者代表要到主場比賽的隊伍,如果解碼的過程中要在已經填過的回合填入隊伍,

則會往後一回合填入,下一場比賽再從一開始有空缺的回合搜尋,解碼後賽程如 圖 21 所示:

圖 21:解碼後賽程範例 (修改自 [13])

而 Crossover operator 使用 two point crossover 和 internal swapping;Mutation

operator 使用 Bit-swap mutation,如圖 22 所示:

圖 22:Crossover operator 和 Mutation operator 範例 (修改自[13])

該篇文獻在大部分的問題中都能找到最佳解,但是實驗部分只有測試問題集 小的問題(最多 8),這是在實驗上比較不足的部分,另外針對這種 Crossover 的方 法去做實驗,實際上交換的隊伍非常多,導致子代沒有辦法繼承親代的好處,這 個部分是相當大的問題,因此在本論文並沒有使用基因演算法來求解。

2.3.2 文化基因演算法 [14]

本篇論文使用基因演算法加上模擬退火法解鏡像競賽旅程問題,因為後半部 的賽程如同前半部,其基因編碼方式只放前半部,如圖 23 所示:

圖 23:基因範例 [14]

解碼方式利用多邊形法(圖 17)的方式產生賽程,如圖 24 所示:

圖 24:基因解碼範例[14]

Crossover operator 使用 BOX Crossover,如圖 25 所示:

圖 25:BOX Crossover 範例 [14]

首先隨機的挑選兩個解,並隨機的從這兩個解中挑選區塊放到新的個體,藉 由此方式來產生子代,如圖 25 中解 1 會挑選 5 和 32 這兩個區塊,而解 2 就會挑 選剩下的區塊來放入。

該文獻在某些解中能夠找到最佳解,並且在時間上的部分也相當的快速,實 驗的部分也從小的問題集比較到最大的問題集,針對鏡像競賽旅程問題的發展有 了另外的技術,而不局限於採用區域搜尋的方法。但如同上一篇文獻所說,

Crossover 會影響的隊伍過多,使得子代無法擁有親代的優點,這個問題是接下來 用此方法所需要再改進的部分,此外該文獻的方法只適用在解鏡像競賽旅程問題,

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

本論文提出群體式多鄰域模擬退火法來解此問題,其中採用兩種選擇鄰域的 方法作區域搜尋,流程圖如圖 26 所示,pseudo-code 如演算法 1 所示:

圖 26:PMNSA 流程圖

Start

Initialize solutions

Iterative Improvement

MNSA Decrease T

Update candidate solution set

Stopping criterion?

End Generation change

Yes No

演算法 1

Function PMNSA(T

0)

1: Generation ← 0, countSame ← 0, T ← T0;

產生初始化 (Initialize solution)

w 代表目標 1 的權重,(1−w)則為目標 2 的權重,藉由權重的不同能搜尋到

在權重方向上較好的解,如圖 27 中,點 x 因為 w 為 0,所以目標 2 的權重為 1,

此點將會偏向最小化目標 2 作搜尋,灰色線代表搜尋的方向:

圖 27:權重搜尋範圍範例

目標函式如式(13)所示:

𝑓𝑖(𝑠) = √𝑓𝑖(𝑠)2 + (𝜌 × 𝑣𝑖𝑜𝑙𝑎𝑡𝑖𝑜𝑛𝑠(𝑠))2, i = 1,2 (13) 𝑓𝑖為目標 i 的目標函式,fi分別為兩個目標的值,𝑣𝑖𝑜𝑙𝑎𝑡𝑖𝑜𝑛𝑠為賽程 s 違反兩 個限制的次數加總,式(13)所算出的目標函式比單純用加總的方式算出的目標函 式低,如此一來能讓懲罰函數不會影響過大而導致無法從合法解區域跳脫到不合 法解區域。

然而因為兩個目標的值相差頗大,適應函數如果只用以上的方法,那麼目標 會全部朝向數字較大的目標,因此在本論文中會將兩個目標函數𝑓𝑖去做極值正規

化 (min-max normalization) 後才乘上 w,本論文正規化中旅行總距離與最長旅行 距離的最小值是用動態的方式去改變,兩者的最大值則是將最小值乘上κ,如此

數乘上權重,算出適應函數。ε-constraint 中則沒有將目標值加上懲罰函數,只將 兩個目標去做極值正規化。

3.2.2 限制處理機制

3.2.2.1 懲罰函數

將賽程計算出競賽旅程問題中兩個條件的違反次數加總後乘上

ρ,因為文獻

中提到

ρ 對於找到解的好壞有著相當大的影響,也會因為 ρ 的關係影響搜尋解的

範圍,所以在本論文中對於

ρ 的設定將會依照問題集中各隊距離去算出起始的 ρ,

其函式如下:

𝜌 =

𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒⁡𝑇𝑜𝑡𝑎𝑙⁡

𝑛×𝑛−𝑛

× (𝑛 − 1)

(14) 式(14)中 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒⁡𝑇𝑜𝑡𝑎𝑙 為問題集中陣列 D 所有的值相加,除上 n×n 之後 就會是總平均的距離,然而因為從主場到自己的主場距離會是 0,所以在算平均 時會將𝑛相乘之後減掉𝑛,如此能算出正確總平均的距離,之後再將總平均的距離 去乘上⁡(𝑛 − 1),減 1 的目的是去掉自己的主場,如此能讓違反的值不會因為過小 而無法選擇到合法解,此函式可以化簡為𝜌 = ⁡𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒⁡𝑇𝑜𝑡𝑎𝑙

𝑛 。藉由這樣的𝜌能夠讓

不合法解在違反一次時,目標函式加上總平均距離,如此一來才能夠比合法解的 懲罰函數高,以避免因為懲罰函數過低而無法搜尋到合法解的問題。

ρ 的算法除了跟問題的大小有相對應的關係之外,也會採用 [5] 所提到的策

略震盪的方式在每一代中調整

ρ,調整的方式為在前一代中找到合法解時將 ρ 除

θ (θ > 0),如此一來可以在下一代中能搜尋到不合法解的區域,在前一代中找

到不合法解時將

ρ 乘以 θ,如此一來可以在下一代中搜尋到合法解的區域,藉由

此方法來增加搜尋和跳脫搜尋的區域。

3.2.2.2 ε-constraint

另外一種限制處理機制使用 ε-constraint,本論文可接受違反量會起始設定為

ε,接著依照 generation 的代數增加讓可接受的違反量每一代下降 ε

rate。在 generation 較低時能接受違反量較大的不合法解,之後因為 generation 上升而降低可接受違 反條件的量,如此一來會往違反量較低的不合法解去搜尋,藉由此方式慢慢的找 到柏拉圖最佳解的前緣。

迭代改良 (Iterative Improvement) 3.3

本論文首先將 SP中所有的解都做一次迭代改良,以增加區域搜尋法的效能。

3.3.1 迭代改良

迭代改良法是一種經由代數的增加,讓解往適應函數低的解移動的方法,搜 尋的做法通常有兩種:

(1) First-improving:搜尋過程中看到比目前解還要好的解時,將此解替換原先的 解,並且從此解開始繼續搜尋。

(2) Best-improving:搜尋目前解中附近的解,並且比較哪個解是這一群中最好的,

再將最好的解替換掉目前的解,並從此解開始繼續搜尋。

因為只是要找到一個比較好的初始解,所以本論文在迭代搜尋中採用

First-improving 的方式,次數會依照 n 乘上 1000。

3.3.2 解評估方式

解評估的方式會依照 3.2 中所提出的適應函數,此時因為想要找到一個兩個 目標都好的解,因此將 w 設為 0.5,如此一來能夠往兩者都最佳化的方向搜尋。

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 行的部分採取隨機選擇鄰域的方式,另

若實驗採取隨機鄰域函式的方式,則會將演算法 2 中第 8 與第 10 行中設定 鄰域函式參數取消,並在演算法 3 中第 7 行的部分採取隨機選擇鄰域的方式,另

相關文件