• 沒有找到結果。

第三章 本論文演算法

3.1 解的表達與計算

3.1.1 分離網路圖

解的概念我們使用圖3.1 來表示,需要兩種元素,第一種就是演算法計算出 來的一組解∏ ,代表每個機器中的工件加工順序,第二種就是一開始已經是先 給定的工件途程(routing);通常我們會使用分離網路圖來表示一個 JSSP 問題,

如圖3.2 就是一組擁有兩個作業,三個機台的分離網路圖,其中工件一的作業途 程為機器1Æ2Æ3,加工時間分別是 3/3/2,而工件二的作業途程為機器 1→3→2,

加工時間分別是4/4/2,框框左上角的代表作業編號,也就是作業代號 1 的是

σ

11代 表工件1 在機器 1 的作業,其中 PT(

σ

11

)=3;我們演算法的目標就是要找出不同

作業彼此的先後關係限制,如圖3.3 即為一組完整的解(包含原先的已知的工件途

程,和演算法計算出來的作業限制),其中機器一的加工順序為作業 1→2,機器 二的加工順序為作業1→2,機器三的加工順序為作業 2→1。

Solution

Job Sequence for Each machine

Given

Job Routing

Makespan Existing

Methods (CPM)

圖3.1 解的概念圖

1/3 2/3 3/2

1/4 3/4 2/2

起點 終點

4 5 6

1 2 3

圖 3.2 起始已知的分離網路圖

1/3 2/3 3/2

1/4 3/4 2/2

起點 終點

4 5 6

1 2 3

圖 3.3 已知的工件途程和演算法計算出來的作業限制

我們使用簡單的要徑法(critical path method;CPM)來計算 JSSP 問題的完工 時間(makespan),概念就如同之前提到的圖 3.1。其中要徑法為根據工件先後關 係圖(有向分離網路圖),分別計算各個作業的最早開始時間(early start time;

EFT)、最早完工時間(early finish time;EFT)、最晚開始時間(late start time;LST)、

和最晚完工時間(late finish time;LFT),這樣一來就可以得到寬裕時間(slack time;ST)也就是 ST = EFT-EST = LFT-LST,其中寬裕時間為 0 的就是要徑(critical path;CP),要徑時間就是我們所需要的完工時間(makespan),如圖 3.4 所計算出 來的要徑長度就是14,要徑作業就是 1→2→3→5→6。

3.1.2 延遲作業順序(delayed precedence constraints)

在JSSP 這個問題之中,由於本論文使用的演算法都是產生工件在機器裡面 的順序,這種產生方式並不能保證每次產生的解都會是合理解(feasible solution) 於是Dauzere-Peres & Lasserre (1993)使用了一種轉換機制,稱之為延遲順序限制 (delayed precedence constraints ; DPC),簡單來說,會額外設定一個作業的限制式 來確保工件排定的先後關係,用以避免產生不合理解。如圖3.5 就是一個不合理 的狀態,四個工件彼此間受到牽制。

為了讓人容易了解,本文以一個小例子來說明使用DPC 的程序步驟:

假設已知一組解,M1={1Æ2},M2={2Æ1}並需把原先排定的工件排程轉換 成工件權重,權重數字越小的,有越先排定的能力,比如原先演算法計算出來的 工件排序M1{1Æ2},代表在機器 1 裡面工件的作業順序是 1Æ2,而現在轉換為 機器1 裡面工件 1 的權重為 1,工件 2 的權重為 2(權重值即為原先計算出的工件 順序),所有的機器排序都需要如此的轉換。

假設已知機器2 的工件已排入到分離網路圖,如圖 3.6。圖 3.6 表示的 X / Y 代表,工件

Y 在機器 X 上作業,也就是之前所提到的 σ

YX

下面是我們的排定程序:

1. 根據 TML 值(3.3.3 會仔細說明)決定要排入的機器 M(此例為機器 1) 2. 把該機器 M(此例為機器 1)中所有的作業(此例為 J1

J

2),分別找尋出該

作業的後續作業集合。

i.

σ

11的後續作業集合為:

σ

12Æ

σ

22Æ

σ

12。 ii.

σ

12的後續作業集合為:無。

3. 如果有兩相同的作業屬於同一個集合之中,便額外給定一作業順序關係 (此例,由於

σ

11

σ

12在同一個作業集合裡,且

σ

12

σ

11的後續作業,因 此我們便增加一限制式,限制作業

σ

12要在

σ

11之後完工,如圖3.7 所示。

4. 開始排定作業,現在機器 1 有兩個作業可以排定(

σ

11

σ

12),去除後續 作業(2/1),只剩作業 1/1 可以排,

5. 如果還有作業尚未排入,則根據剛剛排序的作業修改作業順序關係,並 回到步驟4。

6. 如果所有機器都已排序完畢,則結束程序,否之回到步驟 1。

1/1 1/2

2/2 2/1

開始 結束

圖3.5 不合理的解

1/1 1/2

2/2 2/1

開始 結束

圖3.6 機器2 的工件已經排序完畢

1/1 1/2

2/2 2/1

開始 結束

圖3.7 增加DPC 限制

1/1 1/2

2/2 2/1

開始 結束

圖3.8 合理的一組解

3.2 本論文演算法架構

下圖3.9 為本論文的整體架構圖,由於本論文演算法的組合太多,光是基本 組合表就有 18 組,此外加上一些參數調整或是流程改變更有 47 組(第四章會詳 細說明),因此本論文把基本的組合情況放在表 3.1,在此種情況之下如果針對所 有的問題去做實驗的話,不但花時間,也很沒有效益,為了快速的搜尋最好的配 方組合,本論文使用一個簡單的想法來挑選最佳配方組合,被挑選出來的配方組 合才開始針對有代表性的問題來實驗求解,比較的部分則是和跟過去的歷年文獻 做比較,用以判斷是否本論文演算法具有優異的表現。

更新解 產生器2

更新解

產生器1 修正器

C2:Consensus (linear weight)

D:Taboo 初始解

A1:RANDOM A2:ACOFT-ACO A3:ACOFT-Taboo

C3:Consensus (double weight) B:Taguchi

C1:Consensus (no weight)

圖3.9 整體架構圖

表3.1 基本組合表

初始解 更新解 1 更新解 2 修正解

(A1)Random 無 (C1)consensus normal (D)Taboo (A2)ACOFT-MWR(ACO) (B)Taguchi (C2)consensus linear

(A3)ACOFT-MWR(Taboo) (C3)consensus double

本論文決定最佳配方的想法相當簡單,先由過去的文獻之中找出一個具代表 性的題目,在本論文使用的是 Lawrence(1984)提出的 La29 這個題目,由於此題 目至今尚無任何演算法能找到最佳解,且需要大量的計算時間,適合做為標竿性 測試的題目;把本論文所有的演算法組合(包含參數改變的組合),都針對 La29 這個題目做 5 次實驗,且最後依據這 5 次實驗找到的平均完工時間(Mean makespan)來判斷這個演算法是否具有良好的發展性,並設定表現最好的演算法 為我們的最佳配方組合。

由於本論文使用許多不同的演算法機制,如果比較固定計算時間(CPU times) 產生的解品質,來判斷各種演算法的優劣,非常的不合情理;畢竟要比較的是求 解的品質,而不是求解的速度,所以採用另外一種停止條件,也就是使用產生的

「總新解數目」當作我們的停止條件,根據實驗結果,平均採用產生2000 萬組 新解為 La29 這個題目的停止條件(不同的題目有不同的停止條件),此外這個停 止條件是根據最主要的指標性方法,Huang & Liao (2006)發展的 ACOFT-MWR 當初在設計時候是使用320 個迭代為停止條件,本論文概括的計算平均產生新解 個數約略為2000 萬。

3.2.1 初始解

本論文演算法一共使用了三種不同的初始解,分別是RANDOM,也就是隨 機產生

N 組母體,並挑選其中最佳的 n 組當做初始母體,根據實驗發現,母體

數越多所計算出來的解品質會越好,但過多則是無意義的浪費新解個數;第二種 產生方法為ACOFT-MWR(ACO),也就是採用 ACOFT-MWR 這個方法產生出來 的 ACO 解當作初始母體,第三種方法則是 ACOFT-MWR(Taboo),也就是採用 ACOFT-MWR 這種方法產生的 Taboo 解當作初始母體,其中所謂的 ACOFT-MWR 法,是由Huang & Liao (2006)所提出的一種混合性螞蟻塔布演算法,演算邏輯如 圖3.10 所示。

初始解 ACO

更新解 Taboo 最佳一組ACO解

根據Taboo結果,修改ACO參數

圖3.10 混合螞蟻塔布演算法邏輯

ACOFT-MWR 的演算想法如下,先由螞蟻演算法(ACO)來產生初始解(大約 3-5 隻螞蟻解),再由這些螞蟻解中,挑選完工時間最短的一組螞蟻解,做禁忌演 算法的計算,之後再把禁忌演算法求得的參數用來更新螞蟻演算法的費洛蒙 (pheromone)矩陣,之後便重複以上步驟,直到找到最佳解或是達到停止迭代 320 次 為 止 。 其 中 每 次 迭 代 裡 面 所 產 生 的 螞 蟻 演 算 法 解 , 就 是 本 論 文 所 謂 的 ACOFT-MWR(ACO) 解 , 而 禁 忌 演 算 法 所 得 到 的 解 就 是 本 論 文 所 謂 的 ACOFT-MWR(Taboo)解。

3.3 共識因子(consensus operator)

共 識 因 子 是 吳 政 翰(2006) 所提出的一種方法,當時他使用在專案排程 (Distributed Heterogeneous Computing; DHC)的問題,基於他的結論有很優秀的表 現,所以本論文希望可以應用到JSSP 的問題上面,期待也能有不錯的發展。以 下將針對共識因子的概念和計算方法做詳細解說。

3.3.1 共識因子架構

共識因子(consensus operator)是根據上一代解的工件排序「共識」來產生新 一代的解,好處是擁有優秀排列順序的解可以用來產生新一代解,不好的解自然 淘汰無法產生新解,在這樣的引導機制之下優秀排列順序的解會被保留起來,不 好的解自然淘汰,導致求解會慢慢的往好的解空間移動。相較於其他演算法如:

螞蟻演算法為最傑出解的更新方式,所以難免有時會落入區域最佳;基因演算法 為盲目的產生新解,缺乏整體的導引性。但本文使用的共識因子是屬於群眾智 慧,相較於單一傑出解的力量,理應會有更好的發展。

由於共識因子的導引機制是由母體所粹取的,所以對於母體的依賴性非常的 大,故在產生共識因子之前,必須要有一套好的方法來產生母體,但經過實驗發 現,光是增加母體數目(隨機產生),並不能很明確的提升共識因子的解品質,所 以借用別人的演算法作為初始母體,也就是之前所提到的ACOFT-MWR (Huang

& Liao, 2006)這個方法。其中 ACOFT-MWR(ACO)代表由這此方法抽取出 ACO 所產生的解當作母體初始解,另外 ACOFT-MWR(Taboo)則是抽取出這個演算法 裡面每代taboo 的最優秀解為母體初始值。

不過可惜的是即使改變了母體,共識因子所產生解依然無法令人滿意,於是 本論文在共識因子加入禁忌演算法(Taboo Search)來提升解的品質,關於如何使 用禁忌演算法的細節於3.5 會仔細說明。

共識因子產生解的過程主要可以分成兩個步驟,首先為建立導引機制,此導 引機制稱之為共識矩陣(consensus matrix),並根據此引導機制來產生新解。

共識因子的使用程序步驟如下:

1. 取得 Ninitial組解,把

N

initial的解放到母體P(t)裡面,此時 t=0。

2. 把解由母體 P(t)抽出,並放入 setS。

3. 利用 setS 裡面的解,產生導引機制(3.3.3 會詳細說明)。

4. 根據導引機制,產生出 Nnew組新解(3.3.4 會詳細說明) 。

5. 把 P(t)和 Nnew的解放到

SSset 裡面,再由 SSset 裡面抽取出 N 組解放入 P(t),且 t = t + 1 (3.3.5 會詳細說明)。

6. 如果已達停止條件則停止程序,否之回到步驟 2。

通常停止條件有兩種方式,第一種方法為固定的迭代數,此種方法較為方 便,且計算時間較容易控制,缺點是有時候明明解空間已經收斂,卻還盲目的計 算浪費時間,或是解空間還未收斂,就匆匆停止;避免上述的情況就使用第二種 方式為設定一固定數目

N,連續 N 代最佳解都沒有更新時,才停止演算程序,這

種演算法可以避免收斂的情況發生,但由於停止的代數不固定,所以計算時間無 法掌握,只能用估計的方式進行。

3.3.2 導引機制

建立導引機制:共識矩陣(Consensus Matrix)如圖 3.11 所示,必須要注意的 是,由於本文基於瓶頸飄移法的觀念把JSSP 問題拆解為|M|個小型子問題,所以 共會有|M|組共識矩陣,稱 Mi為機器

i 的共識矩陣。

建構初始矩陣

M

m(n x n matrix)

由set S中抽取 一組job sequence:

Π

(m)

計算job sequence matrix

A

m(n x n matrix)

M

m= Mm+ Am 還有未選取的

job sequence

標準化矩陣

M

產生矩陣

C

m

完成

Consensus Matrix Cm

set S內的

job sequence都已選取 圖3.11 共識矩陣產生流程

本研究提出的導引機制(consensus matrix , Cm,其中

m:第 m 台機器),產生

步驟如下:初始為一個0 矩陣 Mm (n × n matrix,n 為工件個數),更新方法由 setS 中抽取每組解的排列(job sequence),其中所計算出此機器 m 裡每個工件的先後關

本研究提出的導引機制(consensus matrix , Cm,其中

m:第 m 台機器),產生

步驟如下:初始為一個0 矩陣 Mm (n × n matrix,n 為工件個數),更新方法由 setS 中抽取每組解的排列(job sequence),其中所計算出此機器 m 裡每個工件的先後關

相關文件