第三章 問題描述與禁忌搜尋方法
3.5 禁忌搜尋法
本研究首先設計兩套禁忌搜尋法(EXTS1、EXTS2),來求解 JNWF-SCM 排 程問題,以下五個步驟說明求解過程:
(1) 起始解之產生 (2) 鄰近解之產生方法 (3) 禁忌列表
(4) 終止條件
3.5.1 起始解之產生
從文獻中探討NWF 排程問題的兩個演算法 Bertolissi[1]與 Rajendran[14],分 別做為本研究 EXTS1 與 EXTS2 演算法的起始解。然而 Bertolissi[1]所提出的方 法,原本是以最小化總流程時間總和(sum of the total flow times)為目標,為了符 合本研究的研究目標,故將此演算法修改為以總排程時間為目標,作為 EXTS1 的起始解。此兩者的原演算方法於附錄一說明。
3.5.2 鄰近解之產生方法
禁忌搜尋法在每次迭代的過程中,都會搜尋數個現行解的鄰近解,作為移步 的候選名單。過去NWF 排程問題研究方法中,較常使用的三種鄰近解方法為交 換法(exchange)、插入法(insertion)與倒反法(invertion)。故本研究的 EXTS1 與 EXTS2 演算法的鄰近解則以上述方法為基礎,延伸出一共五種鄰近解搜尋方 法,分別為:(a)任意兩點交換法,(b)任意三點交換法,(c)任意四點交換法,(d) 插入式變動法,(e)兩點間倒反法。此五種鄰近解搜尋方法說明如下:
(a) 任意兩點交換法
任意兩點交換法與之後的任意三點交換法和任意四點交換法,又稱做交換 式變動法(Swap move),其方法為任意選取現行解的兩個工件,並將此兩工件交
換其優先順序來產生新的鄰近解。
舉例說明:假設原優先序列為{ , , , , , , , }J J J J J J J J1 2 3 4 5 6 7 8 ,隨機選取兩個工 件J 與4 J ,則7 J 與4 J 交換,產生新的優先序列為7 { , , , , , , , }J J J J J J J J1 2 3 7 5 6 7 4 ,示 意圖3.10 如下:
圖3.10 任意兩點交換法移步後示意圖
(b) 任意三點交換法
任意三點交換法為隨機選取三個工件,並互相交換其優先順序來產生新的 鄰近解。
舉例說明:假設原優先序列為{ , , , , , , , }J J J J J J J J1 2 3 4 5 6 7 8 ,隨機選取三個工 件J 、1 J 與3 J ,則7 J 移至1 J 的排序位置,再將3 J 移至3 J 的排序位置,最後將7 J7 移至J 原本的排序位置,產生新的優先序列為1 { , , , , , , , }J J J J J J J J7 2 1 4 5 6 3 8 ,示意 圖3.11 如下:
圖3.11 任意三點交換法移步後示意圖
J 1 J 2 J 3 J 4 J 5 J 6 J 7 J 8
J 1 J 2 J 3 J 7 J 5 J 6 J 4 J 8
J 1 J 2 J 3 J 4 J 5 J 6 J 7 J 8
J 7 J 2 J 1 J 4 J 5 J 6 J 3 J 8 交換
移至 移至
移至
(c) 任意四點交換法
任意四點交換法為隨機選取四個工件,並互相交換其優先順序來產生新的 鄰近解。
假設原優先序列為{ , , , , , , , }J J J J J J J J ,隨機選取四個工件1 2 3 4 5 6 7 8 J 、1 J 、3 J6 與J ,則8 J 移至1 J 的排序位置,將3 J 移至3 J 的排序位置,再將6 J 移至6 J 的排序8 位置,最後將J 移至8 J 原本的排序位置,產生新的優先序列為1
8 2 1 4 5 3 7 6
{ , , , , , , , }J J J J J J J J ,示意圖3.12 如下:
圖3.12 任意四點交換法移步後示意圖
(d) 插入式變動法
插入式變動是從現行解中隨機選取二個不同的工件,並將此兩工件中將排 序較後面的工件移至排序較前的工件之前,得到一個新的鄰近解。
舉例說明:假設原優先序列為{ , , , , , , , }J J J J J J J J1 2 3 4 5 6 7 8 ,隨機選取兩個工 件J 與2 J ,接著將排序後面的8 J 移至8 J 前面,產生新的優先序列為2
1 8 2 3 4 5 6 7
{ , , , , , , , }J J J J J J J J ,示意圖3.13 如下:
圖3.13 插入式變動法移步後示意圖
J 1 J 2 J 3 J 4 J 5 J 6 J 7 J 8
J 8 J 2 J 1 J 4 J 5 J 3 J 7 J 6
J 1 J 2 J 3 J 4 J 5 J 6 J 7 J 8
J 1 J 8 J 2 J 3 J 4 J 5 J 6 J 7 移至
移至 移至
移至
移至
(e) 兩點間倒反法
選取任意兩個工件,將這兩工件之間的所有工件,優序顛倒產生新的鄰近解。
舉例說明:假設原優先序列為{ , , , , , , , }J J J J J J J J ,隨機選取兩個工件1 2 3 4 5 6 7 8 J 與2 J ,則8 J 與2 J 兩工件之間的所有工件優序顛倒,產生新的優先序列為8
1 8 7 6 5 4 3 2
{ , , , , , , , }J J J J J J J J ,示意圖3.14 如下:
圖3.14 兩點間工作互換法示意圖 3.5.3 禁忌列表
本研究設定禁忌列表的大小為三倍總工件數,且更新的原則是採取先進先出 法則(FIFO),將每次迭代中將取代現行解的最佳鄰紀錄在禁忌列表,紀錄的資訊 是整個工件優先序列,當禁忌列表內的禁忌名單數到達上限時,則根據先進先出 法則更新名單。
禁忌列表是用來紀錄最近多次迭代過程中所獲得的解,作為提供禁忌限制記 憶機制,以避免重複搜尋造成的循環,每次迭代所產生的鄰近解,皆會檢視此鄰 近解是否已存在於禁忌列表中,若已存在名單中則重新搜尋新的鄰近解。
3.5.4 終止條件
現行解所產生的最佳鄰近解中,即使沒有優於最佳解,此最佳鄰近解仍可取 代現行解,沒有改善的次數則須累計一次,而當沒有改善的連續次數到達所設定 的次數(epoch length),則終止演算法,並以目前的最佳解為此次演算法的最終解。
下圖是禁忌搜尋法應用於JNWF-SCM 排程問題的流程圖:
J 1 J 2 J 3 J 4 J 5 J 6 J 7 J 8
J 1 J 8 J 7 J 6 J 5 J 4 J 3 J 2
選取 選取
交換
圖3.15 禁忌搜尋法流程圖 設定起始參數
建構起始序列 並作為現行解
搜尋鄰近解
是否在禁 忌名單內
更新禁忌名單
新解是否優於 現行最佳解
更新現行最佳解 從鄰近解中選取最 優者做為新現行解
開始
最佳解未改善 次數是否達到
結束演算法,得到最終解 否
是
否
是
是 否