• 沒有找到結果。

第一章 緒論

1.2 背景知識

1.2.3 限制處理機制

限制處理的目的在於找到解 (𝑥⃗) 能夠最佳化目標函式 f(𝑥⃗),並滿足競賽旅程

問題的兩個限制。

競賽旅程問題常見的作法是使用懲罰函數的方式,將懲罰值(本論文以 ρ 代表) 乘上兩種限制的違反量後加上旅行總距離,因為不合法解加上懲罰函數後,其適 應函數可能會大於合法解的適應函數,如此一來合法解適應函數會優於不合法解,

合法解就會被選到。另外本論文也會利用策略震盪 (strategic oscillation) 的方法 來調整

ρ,如此一來可能會對搜尋效能有所幫助。

除了懲罰函數的做法,另外本論文也使用ϵ-constraint 的方式,用此種方式與 使用懲罰函數的方式比較,並找到一種較為適合此問題的機制。此種方法會將違 反兩種限制的違反量限定在可接受的範圍,在一開始的搜尋中會因為可接受的範 圍廣而搜尋到許多適應函數很好的不合法解,但可接受的違反量因為代數上升而 降低,如此一來能將違反量過多的不合法解去除,慢慢地搜尋到合法解。

研究目的與貢獻 1.3

本論文利用啟發式演算法來解競賽旅程問題,跟過去的方法不同的是,本論 文將此問題發展為多目標最佳化問題,其目標函式分為以下兩者:

(1) 旅行總距離:所有隊伍旅行距離總和。

(2) 最長旅行距離:所有隊伍中旅行距離最長的距離。

將此問題發展為多目標最佳化問題後,可以讓使用者依照自己的需求去選擇 較合適的解,如此一來能讓此問題更加生活化。

本論文藉由群體式搜尋以及改良現有的鄰域函式,讓搜尋的效能不會因為從 單目標最佳化問題轉換為多目標最佳化問題而下降。

本論文研究範疇:

(1) 比較變動鄰域函式與隨機鄰域函式在競賽旅程問題上的優劣。

(2) 測試鄰域函式順序是否影響變動鄰域函式效能。

(3) 改良文獻中提出的鄰域函式。

(4) 將競賽旅程問題發展為多目標最佳化問題。

(5) 比較懲罰函數與 ϵ-constraint 用於競賽旅程問題的優劣。

本論文提出了兩種新的鄰域,在搜尋的時間與效能上有所提升,但是並沒有 更新現有的單目標最佳解。此外本論文將此問題發展為多目標最佳化問題,讓使 用者在使用上不會侷限於旅行總距離,而是能夠考慮到各個隊伍的公平性,並且 提出了目前找到的多目標最佳化解,讓此問題能夠往多目標最佳化的方向繼續發 展。

第二章 文獻探討

在競賽旅程問題中最常使用區域搜尋法如:模擬退火法 [5][6]、禁忌搜尋法

(Tabu Search) [7]…等方法來排賽程,而在區域搜尋法中最重要的即為鄰域,以下 幾種鄰域最常被使用:

常見鄰域函式 2.1

(1) SwapHomes [5]

選擇兩個隊伍 Ti和 Tj交換賽程中兩個隊伍比賽的主客場關係,例如選擇隊伍

2 和 4,在 R5時兩隊要到 T2的主場去比賽,而在 R8時則是要到 T4主場比賽,做 完 SwapHomes 之後 R5會到 T4主場,而 R8則會到 T2主場比賽,如圖 2 和圖 3 所 示,灰色標記表示要替換的場次,負號代表客場比賽。

圖 2:SwapHomes 轉換前範例 [5]

圖 3:SwapHomes 轉換後範例 [5]

(2) SwapRounds [5]

選擇兩回合 Rk和 Rl交換賽程中兩回合的所有比賽,如圖 4 和圖 5 所示,灰 色標記表示要替換的場次。

圖 4:SwapRounds 轉換前範例 [5]

圖 5:SwapRounds 轉換後範例 [5]

(3) SwapTeams [5]

選擇兩個隊伍 Ti和 Tj交換賽程中除了彼此隊伍以外的所有比賽,例如選擇隊 伍 2 和 5,則會把 T2中除了 5 和-5 以外的所有比賽跟 T5中除了 2 和-2 的所有 比賽交換,交換之後要去修改賽程中其他的比賽,因為替換之後的對手也會不同,

所以對手也必須要調整賽程,如圖 7 中第 2 回合,隊伍 2 和隊伍 5 的賽程交換後,

會導致隊伍 1 跟隊伍 3 的賽程衝突,因此要將此兩場比賽做調整,讓整個回合的 隊伍都不會衝突。SwapTeams 範例如圖 6 和圖 7 所示,灰色標記表示要替換的場 次。

圖 6:SwapTeams 轉換前範例 [5]

圖 7:SwapTeams 轉換後範例 [5]

(4) PartialSwapRounds [5]

選擇一支隊伍 Ti以及兩回合 Rk和 Rl,交換隊伍 Ti中在 Rk和 Rl的比賽,之後 動態的去修改,如圖 9 中第 2 回合,當隊伍 2 的兩個回合比賽交換後,因為交換 過來的-6 會與隊伍 4 的 6 衝突,因此要將隊伍 4 的兩個回合 6 與-4 交換,當交換 後再有衝突時再去其他隊伍做交換,直到沒有衝突為止。PartialSwapRounds 範例 如圖 8 和圖 9 所示,灰色標記表示要替換的場次。

圖 8:PartialSwapRounds 轉換前範例 [5]

圖 9:PartialSwapRounds 轉換後範例[5]

(5) PartialSwapTeams [5]

選擇兩支隊伍 Ti和 Tj以及某一回合 Rk,交換隊伍 Ti和 Tj在 Rk中的比賽,如 圖 10 中選擇隊伍 2 和隊伍 4,交換在回合 9 中兩個隊伍的比賽,首先將這兩場比 賽互換後,修改因為此互換而衝突的所有回合,此步驟需要依序的去搜尋。如圖

10 中第 3 回合在第 9 回合交換後,隊伍 4 中到隊伍 1 的主場(-1)會出現兩次,那 麼就會將衝突的第 3 回合中隊伍 2 和隊伍 4 的比賽去做交換,其餘衝突的比賽以 此類推,最後再將有交換過的回合修改成正確的賽程,如圖 11 除了隊伍 2 和隊 伍 4 以外的賽程,灰色標記表示全部要替換的場次。

圖 10:PartialSwapTeams 轉換前範例 [5]

圖 11:PartialSwapTeams 轉換後範例 [5]

(6) Lookahead PartialSwapTeams [6]

此種方法會先偵測在 PartialSwapTeams [5]的過程中是否會重複使用到相同 的隊伍但場館相反,如圖 12 中隊伍 2 在第 5 回合與第 9 回合會將隊伍 5 重複使 用:

圖 12:PartialSwapTeams 交換順序範例(修改自 [6] )

seq 為 PartialSwapTeams [5] 交換的順序,此次 PartialSwapTeams [5] 需要交 換十次,此方法會依照順序找最快重複使用的隊伍,如圖 12 中第 5 與第 9 回合 交換的隊伍 5,接著對隊伍 2 中的這兩場比賽作 SwapHomes [5],之後再做

PartialSwapTeams [5],如此一來將會對替換次數有所改善,如圖 13 所示:

圖 13:PartialSwapTeams 改良後交換順序範例(修改自 [6] )

使用此作法可以省下五個交換的步驟,對於時間和效能上能有所提升,但因 為這樣的改良方式必須要先判斷交換之間是否有重複使用到的解。因為每一次搜 尋都需要偵測,所以會導致搜尋的時間加長,雖然成功的話替換次數會減少,但 如果沒有搜尋到就會浪費時間,為了避免掉這樣的浪費,本論文採用其他方式作 改良,而不會以事先偵測的方式改良。

區域搜尋法 2.2

2.2.1 模擬退火法 [5] [7] [8]

模擬退火法的特性是試圖跳脫區域最佳解,在該篇文獻中對於目標函式並非 單純的加總,如式(9)所示:

𝐶(S)= {

cost

(

S

)

S is feasible

cost(S)

2

+[ρ×f

(

nbv

(

S

))

]

2

S⁡is infeasible

(9)

C 為新的目標函式,S 為賽程,cost 為原本的目標函式(旅行總距離),ρ 為懲

罰值,nbv 為限制違反的數量,f 為一個次線性函式 (sublinear function),在文獻 中的 f(v)為1 + (√𝑣 ln 𝑣) 2⁄ ,該文獻認為在違反量多的不合法解中,多違反一次並

沒有很大的差別,因此利用此函式讓違反量不會因為違反次數上升而讓

ρ 成長過

快。

另外

ρ 的部分用策略震盪的方式去調整,依照當下找到解的合法性去調整 ρ,

如果是合法則會降低

ρ,如此一來可以往不合法的解去搜尋;如果解為不合法,

則會調高

ρ,如此一來可以往合法的解去搜尋。本論文將學習這種方式來做策略

升溫 (reheat) 則是在搜尋一段時間後增加溫度,如此一來可以跳脫區域最佳 解,因為當溫度很低時模擬退火法會因為其特性而較難跳脫區域最佳解。

文獻 [5] 提出五個相當有用的鄰域,並且也因為利用策略震盪和升溫的機制 找到相當好的解,但是在時間上花費相當的久,這是本篇論文值得改善的地方。

本篇論文將採用文獻 [5] 提出的模擬退火法方式,但是對於搜尋的方式將有所改 變,將原先使用 First-improving 的方式改成使用 Best-improving,另外也針對該文 獻所提出的五個鄰域做改良,藉由以上方式讓效能有所提升。

文獻 [7] 分析模擬退火法的初始解去做分析,提出了如式(10)的式子:

Eval⁡=⁡TTD⁡+⁡ ∑di⁡=⁡1ITDi+1i (10)

E

val為評估成本,TTD 為旅行距離總和,ITDi代表第 i 回合到 i+1 回合的旅行 距離,該文獻的目的是希望能夠在每一回合都找到評估成本最低的解,因此會使 用前瞻程序(look-ahead procedure)的方式搜尋 Eval,如圖 14 所示,首先從回合 0 產生了回合 1 的兩個可行賽程之後,對回合 1 去作搜尋並產生四個可能的解,接 著對這四個解作前瞻程序,評估他們之後找到解的成本,藉由此方式在安排的過 程中就能找到一個旅行總距離較短的解:

圖 14:初始解選擇範例 [7]

圖 15:circ4 範例

依照圖 15 circ4 問題的距離能算出如圖 14 的 Eval結果,以最左為範例:Round0 到 Round1 時距離總和為 2,接著在 Round1 時產生子代,並算出到子代後的總距 離為 4,此時使用前瞻程序來模擬另外兩個會找到的子代,接著藉由式(10)算出到 模擬結束時的 Eval為 7。藉由此方法算完所有子代的 Eval後,會選擇第一與第三的 子代來繼續往下一回合搜尋,最終能夠找到一個最佳的初始解,如此一來可以提 升模擬退火法的效能,另外在該文中也使用了攀登演算法 (Hill climbing) 來提升 搜尋的效能。

此方式對於問題集小的問題能夠很有效率地找到最佳解,但是只要問題集稍 微大一點,就會因為變異度過低的問題而導致沒有辦法有效率的搜尋,經過實驗 後在本論文中並沒有採納這樣子的方式來產生初始解。

另外針對問題集較大、搜尋範圍更廣的問題則有群體式的 [8] 方式做搜尋,

藉由一次搜尋很多個解,在搜尋一定時間後將現有的最佳解去替換掉較差的解,

並且保留一些次等的解來避免收斂,如圖 16 所示:

圖 16:群體式模擬退火法範例 [8]

Sij代表賽程,i 代表解編號,j 代表代數,圖中粗圓圈選出來的解代表在 t 時 間內比現有最佳解都好的解,剩餘的三個圓圈則為此回合中剩下三個較好的解。

在此範例選擇四個好的解留到下一代,在 t 時間時所有較差的解會換成 t 時間內 的最佳解 S8,而另外三個解 S、S、S保留到下一代,藉由此方式可以避免所有 的解都收斂到相同的解。

此種作法能夠找快速的找到較好的解,而本論文也將採用類似的方式,但是

而在文獻中也針對鄰域有所改進,SwapMatches 與 SwapMatchRound 與先前在 2.1 鄰域函式提過的 PartialSwapRounds [5] 和 PartialSwapTeams [5] 類似,只是在該 文獻中對於替換的順序以及如何替換才會有較好的效能有所分析。

該文獻實驗的結果並沒有顯著的比 [5] 的方式求到的解佳,因此該文獻的鄰 域改進並沒有在本論文中被使用,但是卻給了本論文改善 PartialSwapRounds [5]

和 PartialSwapTeams [5]的想法。

2.2.3 螞蟻演算法 [10]

該篇文獻在效能的部分沒有非常突出,大部分的解都沒有達到最佳解,不過 在時間上卻有著相當大幅度的改善,比起原先需要跑好幾天的程式,該篇文獻只 需要幾分鐘。

2.2.4 迭代區域搜尋法 [11]

迭代區域搜尋法 (Iterated local search) 是在每一次搜尋到區域最佳解時,去 做隨機擾動 (perturbation) 並且再一次作區域搜尋,直到解有比現有最佳解好時

迭代區域搜尋法 (Iterated local search) 是在每一次搜尋到區域最佳解時,去 做隨機擾動 (perturbation) 並且再一次作區域搜尋,直到解有比現有最佳解好時

相關文件