• 沒有找到結果。

禁忌搜尋法的流程與結果

第四章 禁忌搜尋法與結果分析

4.1 禁忌搜尋法的流程與結果

本章節可以分為三小節;第一節描述禁忌搜尋法的進化流程;第二節介紹如 何使用禁忌搜尋法搭配新舊表達法(Snew和 Sold)。為了方便描述,本研究將禁忌搜 尋法(tabu search)搭配舊表達法(Sold)命名為 TS_Sold,將禁忌搜尋法(tabu search)搭 配新表達法(Snew)命名為 TS_Snew

4.1.1 禁忌搜尋法的進化流程

在禁忌搜尋法中,我們命名解為染色體,且其包含元素為基因,而這些基因 都為正整數(因為其代表工件)。舉例來說,一個染色體有五個基因可以表示成 ℎ = (1, 5, 3, 2, 4)。在禁忌搜尋法的進化流程中,期會重複使用兩大模組:(1) 產 生鄰近解;(2)禁忌列表。我們接來會先介紹此兩模組然後描述整個禁忌搜尋法 的流程。

產生鄰近解:給定一個染色體 h,本研究有系統的使用交換的方式來產生一 組新的鄰近解群體 N(h)。假設有一個染色體ℎ = (𝑎1, 𝑎2, 𝑎3, 𝑎4, 𝑎5);本研究有順 序的將每一個𝑎𝑖和其右邊的所有基因做交換。因此,我們可以經由將𝑎1與其他基 因交換獲得 4 個新的染色體組合。依照這樣的模式,交換𝑎2可以得到 3 個,針對 𝑎3有 2 個,交換𝑎4產生 1 個。最後 N(h)的總數目會是𝐶25 = 10個新的染色體。

19

禁忌列表:在交換步驟之中,交換的兩個基因(𝑎𝑖和𝑎𝑗)稱為移步(move 或 swap pair),本研究以(𝑎𝑖, 𝑎𝑗)來表示。禁忌列表是一個包含最多𝑞𝑠𝑖𝑧𝑒移步的集合,其建 置的過程是有順序性的。假設給定一個禁忌列表的大小為𝑞𝑠𝑖𝑧𝑒 = 3,而其內容為 {(𝑎1, 𝑎3), (𝑎2, 𝑎3), (𝑎1, 𝑎5)}。如果一個新的移步(𝑎𝑖, 𝑎𝑘)要加入現在的禁忌列表之中,

要遵守下列兩個規則。

規則 1:如果此移步(𝑎𝑖, 𝑎𝑘)已經存在原本的禁忌列表名單之中時,將此移步從原 本的順序移動到最後的位置來產生新的禁忌列表。舉例來說,原本的禁忌列表是 {(𝑎1, 𝑎3), (𝑎2, 𝑎3), (𝑎1, 𝑎5)};而我們要加入的移步是(𝑎2, 𝑎3)。我們可以獲得新的 禁忌列表為{(𝑎1, 𝑎3), (𝑎1, 𝑎5), (𝑎2, 𝑎3)}。

規則 2:如果此移步(𝑎𝑖, 𝑎𝑘)已經不存在原本的禁忌列表名單之中時,將此移步放 置在名單的最後面。如果名單總數超過𝑞𝑠𝑖𝑧𝑒,則將名單中最前面的移步刪除,然 後依序往前遞補。舉例來說,如果原本的禁忌列表是{(𝑎1, 𝑎3), (𝑎2, 𝑎3), (𝑎1, 𝑎5)},

我 們 要 加 入 的 移 步 為 (𝑎5, 𝑎3) , 我 們 可 以 獲 得 新 的 禁 忌 列 表 為 {(𝑎2, 𝑎3), (𝑎1, 𝑎5), (𝑎5, 𝑎3)} 。 但 是 如 果 原 本 的 禁 忌 列 表 之 中 只 有 兩 個 移 步 {(𝑎1, 𝑎3), (𝑎1, 𝑎5)}時,我們可直接將要加入的移步放在列表的最後即可,因此可 獲得新的禁忌列表{(𝑎1, 𝑎3), (𝑎1, 𝑎5), (𝑎5, 𝑎3)}。

在描述完兩個重要模組之後,接下來我們要描述整個禁忌搜尋法的流程如 下:

Procedure Tabu_Search

Step 1: Initialization

 Generate an initial chromosome h0;

 Evaluate h0;

 Set h* = h0; /* h* is the local best solution*/

 Set h+= h0; /* h+ is the global best solution*/

 Set T = 0; /*age of h+, global best solution*/

20

 Set Tabu_list = 𝜙; /* Tabu_list is initially an empty set*/

Step 2: Generate and Sort N(h*)

 Generate N(h*); set T = T+1;

 Evaluate each chromosome in N(h*);

 Sort all chromosomes in N(h*) according to their performances;

 Name the sorted results as {h1, h2, …., hw}, in which hi is better than hi+1 in terms of performance;

 Name the swap pair that generates hi from h* as 𝜔𝑖; Step 3: Update h*, h+, and Tabu_list

 Set i = 1;

 While (i ≤ 𝑤) /*w is the total number of chromosomes in N(h*)*/

If 𝜔𝑖 ∉ 𝑇𝑎𝑏𝑢_𝑙𝑖𝑠𝑡,

thenplace 𝜔𝑖 in the Tabu_list; set h*= hi; If hi is better than h+, then set h+= hi and T = 1;

Go to Step 4;

Else (𝜔𝑖 ∈ 𝑇𝑎𝑏𝑢_𝑙𝑖𝑠𝑡),

If hi is better than h*,

then place 𝜔𝑖 into Tabu_list; set h*= hi; If hi is better than h+,

then set h+ = hi and T = 1;

Go to Step 4;

Else i = i +1

If i = w +1, then place 𝜔1 in the Tabu_list; set h*= h1; Go to Step 4;

Endwhile

Step 4: Termination Check

21

 If T > Tf, output h+ and STOP; /*Tf is a predefined large number*/

 Else, Go to Step 2.

4.1.2 TS_Snew和 TS_Sold

TS_Snew 的進化流程跟原本的禁忌搜尋法幾乎完全一樣,然而在評估染色體 的績效時會有些許的修正。也就是在評估績效前要先對 Snew染色體做解碼的動作,

經過解碼機制之後才會產生完整的解資訊。因此,禁忌搜尋法只需要修正在每次 要評估染色體之前對其先進行解碼的動作即可,其他相關流程與步驟都完全相 同。

然而在 TS_Sold之中,禁忌搜尋法必須要有兩個修正:(1) 產生鄰近解;(2) 多 個禁忌列表。

產生鄰近解:給定一個參考解 h*,我們想要產生一組鄰近解 N(h*)。在 TS_Sold

之中,我們採用「單一區段改變」的方式,也就是說當我們在交換某個區段的基 因時,其他區段的基因保持不變。舉例來說,如果有一個染色體有三個區段如:

= 𝑠1_𝑠2_𝑠3,當我們交換𝑠3之中的基因時,𝑠1和𝑠2之中的基因組合都不會做更 動。假設每個區段都有 5 個基因時,我們可以針對每個𝑠𝑖得到𝐶25 = 10個新的染 色體。因此所有 N(h*)的總數為3 × 𝐶25 = 30。

多個禁忌列表:在 TS_Sold之中,染色體屬於多區段設計,所以每一個區段 都有自己唯一的禁忌列表,而且都獨立各自更新互不影響。由於移步的產生是只 交換某一個區段的基因所產生的,因此更新禁忌列表就變成各自獨立更新而不會 有同時兩個禁忌列表同時更新的現象發生。舉例來說,給定一個有 3 個區段的染 色體ℎ = 𝑠1_𝑠2_𝑠3,而每個區段相對應的禁忌列表為𝑇1, 𝑇2, 𝑇3。假設ℎ𝑖為一個從

N(h*)挑出的新染色體,而此新染色體是交換第二個區段𝑠2裡的基因所產生的。因

此我們只會新禁忌列表𝑇2,而不會變動其他兩個禁忌列表。

22