第三章 研究方法
3.3 演算法模組
3.3.4 更新解產生器
( , ) 1-i j ( , ) i j ( , )i j
τ = α τ× + α× Δτ (4)
( , ) 0
m Cbest τ i j
⎧⎪
⎪⎪
Δ = ⎨
⎪⎪
⎪⎩
若i、j 屬於至今最佳解的工件排序 otherwise
而其觀念是只有目前表現最佳的解其內的工件執行順序才具有遺留費洛蒙的權 力,以使得下個世代中,螞蟻能再次利用相類似的排序;而另外所有工件執行順 序的費洛蒙濃度皆會揮發。到這裡為止稱作一個世代,當世代的次數尚未達到預 先設定的數目,則繼續演算法搜尋最佳解;反之,則結束演算法。
4.求解流程
雖然僅針對第一站的工件排序,但是本研究在螞蟻演算法求解過程中使用了 F&B-ACS,同時採用了 forward 及 backward 兩個方向的搜尋,所以紀錄費洛蒙 量的矩陣需要兩個,每個矩陣的大小為n×n,其中元素τij代表的是第j 個工件排 在第i 個工件後的費洛蒙量。
3.3.4 更新解產生器
更新解修正器包含兩種演算法:共識因子(consensus operator)與田口方法 (Taguchi methods)。
(一) 共識因子
對於產生新工件排序的排程問題,一般傳統的方法像基因演算法採用的演化 技術(evolutionary techniques)例如:單點交配(one-cut crossover),通常採用隨機兩 個染色體區段交配,交配的過程中並不考慮上一代好的基因,而盲目搜尋(blind search), 甚至會有不合理解。我們主要發展這共識因子(consensus operator),希 望可以根據上一代好的工件排序中尋找資訊,建立一個導引(guided)機制,根據 這引導機制讓好的優先順序保留,不好的優先順序則自然淘汰,以產生好的工件
排序,敘述如下。
共識因子產生方式主要分為兩個步驟:
Step 1: 建立引導機制:共識矩陣 Consensus_matrix(如圖 3.5 所示)
標準化矩陣 M 產生矩陣Mn
完成 Consensus_Matrix 仍有未選取
job sequence
建構初始矩陣M = 0 (n × n matrix)
計算job sequence_matrix(X) A (n × n matrix)
M = M + A 從集合S抽出 一job sequence X
初始解集合內所有
job sequence 皆已選取
圖3.5 建立共識矩陣流程
引導機制:共識矩陣Consensus_matrix,Mn;初始為一個 0 矩陣 M (n × n matrix ,n為工件的個數),從母體集合(集合S)中,藉Job sequence_matrix(Xk)流程 去 計 算 工 件 之 間 的 優 先 關 係 矩 陣A , 形 成 新 矩 陣 M (M=M+A) 。 其 中 Job sequence_matrix(Xk)流程,Xk代表輸入的工件排序,如圖3.6 所示,我們初始一個 工件優先關係矩陣A=[aij](1≤ i, j ≤ n)也為 0 矩陣(n × n matrix),只要工件排序Xi
中,任兩工件Ji、Jj,工件Ji在工件Jj之前,aij就加 1。另外rank(Ji)為工件排序內 工件i的優先順序。
Matrix A =[aij] = 0
圖3.6 Job sequence_matrix(Xk)流程
釋例,給定一組工件排序J1 J5 J3 J2 J4,藉由Job sequence_matrix(Xk)流 weighting以及power weighting,前面提及的每次累加aij加 1 是no weighting,而 linear weighting並不只是每個解代表權重相同,而是考慮到解的品質好壞,也就
可以得到每條解的相對重要性。而power weighting 則是把上述的權重公式予以 平方,增強權重的效果。
我們還需要把共識矩陣M標準化為Mn = M/N(S),N(S)代表初始解集合所有
的工件排序個數。標準化的共識矩陣Mn表達了機台上所有工件「先後關係」的
Step 2:根據引導機制 Consensus_matrix 產生一個新的工件排序Y
首先建立一個空集合Q=φ,與所有工件的集合X={Ji; 1≤i≤n},抽取工件Ji從
he則he = h(Jk),更新後的合理區域,表示新的Ji在這區域中都不會有違反優先執 行順序的限制。
(2) 在合理區域中選擇參考工件Jr:
已知合理區域所有的Qh,Qh = {Jk| hs≤ h(Jk) ≤ he, Jk ∈Q},為了尋找合理區域 中的參考工件(reference job)Jr,我們希望尋找共識比例最大的,因此如下式(1) 為Ji在Jk之後機率最大,和式(2)Ji為在Jr之前機率最大,兩者相比機率最大如式 (3),為我們要尋找的參考工件Jr,也代表工件Ji在工件Jr之前的共識比例為p
=M(Ji,Jr)
k*=Arg Max{ M(Jk,Ji) },Jk ∈Qh (1) r*=Arg Max{ M(Ji,Jr) },Jr ∈Qh (2) r =Arg Max{ M(Ji,Jr*) , M(Jk*,Ji)} (3)
(3) 根據 Consensus_matrix,執行伯努力(Bernoulli)試驗:
為了讓工件執行順序的產生變異,我們執行一次伯努力(Bernoulli)試驗,根 據Ji與Jr的共識比例,當作機率,實驗成功代表工件Ji在工件Jr之前執行,因此 h(Ji)
< h(Jr),合理區域更新為he = h(Jr) ;或是實驗失敗代表工件Ji在工件Jr之後執行,
因此h(Ji) > h(Jr),合理區域更新為hs = h(Jr)。
(4) 更新合理區域:
實驗成功: 合理區域更新為he = h(Jr) 實驗失敗: 合理區域更新為hs = h(Jr)
(5) 停止條件:
我們尋找到當合理區域中可插入的工件數n(Qh)少於兩個,便可決定其h(Ji) 值。因此n(Qh) > 2 我們繼續尋找新的參考工件Jr,回到步驟(2),直到n(Qh) ≤ 2,
則決定h(Ji) = (hs +he)/2。
茲以一釋例說明如何決定h(Ji),如圖 3.7 所示,在已知Q={J1, J2 , J3, J4},
Qh={Jk| hs≤ h(Jk) ≤ he, Jk∈Q}下,若要插入工件J5,決定h(J5)。第一步驟:先決定h(Ji) 合理區域為hs= h(J1),he= h(J4)。第二步驟:為了尋找參考工件Jr,根據(1)(2)(3)式,
可以求得r=J2。第三步驟:根據J2做伯努力(Bernoulli)試驗,如果失敗,h(J5) >
h(J2)。第四步驟:合理區域更新為hs = h(qr)= h(J2)。第五步驟: n(Qh) = 2,停止搜尋,
h(J5)=( h(J2)+ h(J4) )/2,J5插入在J4和J2之間。
0 Z
Feasible region
h(J4) h(J2)
0 M(J5,Jr)
M(Jk,J5)
he
hs
h(J3) h(J1)
0.7 1
1 0 0.2
0.3 0.8
圖3.7 選擇參考任務 Jr 調整共識因子影響力
從實驗結果發現,由共識因子產生的解,強烈的由眾人的意見也就是共識矩 陣所主導,連帶使得產生的解容易掉入局部最佳化的情形當中,因此為了改進這 個缺點,而且增加演算法產生解的彈性,我們將工件Ji對於參考工件Jr的共識比 例p,乘上一個因子調整參數r。此調整參數包含了三種情形。第一種,也就是前 面所提到的r = 1。第二種為了減少共識比例的主導性,設定r = 0.8,就是所謂的 降級因子。第三種為了增加演算法共識比例的多元化,同時應用了升級與降級因 子,當p > 0.5 時,採用降級因子r = 0.8;p < 0.5 時,採用昇級因子r = 1.2。
(二) 田口方法
在 1949 年,田口玄ㄧ(Genichi Taguchi)博士於日本電信實驗室工作時,發現 傳 統 實 驗 設 計 方 法 在 實 務 上 並 不 適 用 , 進 而 發 展 田 口 方 法(Taguchi methods)(Taguchi, 1986&1987;黎正中, 2000;蘇朝墩, 2002),而成為他所謂品質 工程的基本原理,而其精神就是一種穩健設計的實驗方法。田口所發展的是一透 過實驗進行系統參數最佳化設計的方法,具實際的應用性,而非以困難的統計為
依歸。
在此田口方法中,是利用直交表來產生實驗的進行。在一般統計全因子設計 中,當因子數目增加時,實驗次數會隨之增加;而部分因子設計則會增加實驗方 法的複雜性。在此田口方法中,是利用直交表來產生實驗的進行,利用直交表來 收集資料,能讓我們以較少的實驗而獲得更可靠的因子效果估計量。
直交表的觀念
直交表種類繁多,先將代表直交表的符號定義說明如下,如圖 3.8:
( )
cL b
a水準數
行數,表示因子數
列數,表示實驗次數 表示直交表(L為Latin Square的第一個英文字)
圖3.8 田口直交表符號定義
表 3.5 為L8
( )
27 直交表,表中本體內之 1 和 2 數字分別表示因子的水準一 和水準二。直交表中的每一行代表實驗中的某一個特定因子的變化情況。「行」的編號,可供因子或交互作用配置其上之用;L8 直交表上共有 7 行,代表最多 能配置七個因子。列數等於直交表的實驗次數,L8 直交表的實驗次數為 8,故 實驗編號由1 至 8。
表 3.5 L8(27)直交表
若以本 HFSP 問題進行應用,可以將 2 個水準轉換成 2 個 chromosome 解,7
個因子轉換成 7 個工件,而行與列交集的數字所代表意義:「1」代表第 2 個
chromosome 的 rank,「2」代表第 2 個 chromosome 的 rank。但是由於本問題的 工件數n = 5,10,20,50,100 並沒有完全相符因子數目的直交表,所以採用 來
makespan值(mi)並隨之取倒數,然後對每個工件Ji計算屬於C1的Sm1、屬於C2的 Sm1,然後依此決定最佳的工件組合CT。由於makespan值是望小特性,取倒數後 的累積加總值Sm1、Sm1則轉變為望大特性。由表 3.6,可得知J1到J3和J7是採用 C2的基因,J4到J6是用C1的基因,最後由此流程得到一組完整的chromosome解CT
= {1; 7; 6; 3; 5;2; 4}
表3.6 田口方法釋例
3.3.5 更新解修正器
此修正器由標竿演算法作者在文獻中所提出,是指針對一個工件排序,用有 系統的方法找出它的鄰近解(neighborhood solution),企圖在區域解中找到一個更 好的解來改善原本的解,也就是所謂的鄰近搜尋法(local search)。本研究的鄰近 搜尋法包括下列三個步驟:
步驟一:
鄰近搜尋的方式,是將每個排序中的工件,分別與其後最近的六個工件做交 換,然後各自進而產生一組新的排程,並計算該排程的最大完工時間。
步驟二:
若鄰近搜尋的解有改善或是與原順序的完工時間相等,則記錄下來,作為後 續之用,並以此順序繼續往後搜尋。
步驟三:
反覆步驟一和步驟三,直到所有的工件都被交換過之後才停止。
第四章 實驗結果與分析
在此研究中,希望階段性的利用pilot與comprehensive study,逐步的找出最 佳的幾個演算法組合,然後在與標竿演算法進行績效的比較。本研究程式以Visual C++ 6.0 撰寫,所進行的電腦CPU為Intel Pentium4 3.0GHz。在此實驗中,每個 version的演算中止條件為在演化過程中只能產生的chromosome解限制數量下,
來進行績效的比較。每個情境其chromosome解的限制數量不為相同,其最大解
限制數量則是以標竿演算法跑完500 世代所會產生的解數目為依據,依此值依序
往下取0.5、0.25 倍的解數目來作為績效的求解點。每個演算法要跑的情境中每 個問題需要重複跑 5 次程式。績效的衡量是利用所求得之最小完工時間(Cmax)與 下界差距的百分比( max 100%
LB × C −LB
)的平均作為比較來求得,而平均則是從每個 情境的內的10 個例題來加總取平均所得(Average percentage deviation of the of the makespan values from the lower bounds)。
從第 3.2 節的實驗組合得知由於 version 數過多,因此先行進行 pilot study,
然後在模組間進行演算法績效的優劣比較,以篩選出較佳的演算法組合配方,隨 後才進行全情境實驗的comprehensive study。
4.1 引導實驗( Pilot study )
由於 pilot study 數據過於多組(72),為了要在同個模組內找出哪些方法較為 突出,因此下面利用 pilot study 模組績效優劣尋找過程來找出較佳的演算法組 合。另外由於共識因子內部參數組合過多,因此先就初始解產生器與更新解產生
器2 兩個部份來進行模組內方法的比較,最後再從共識因子找出最佳的參數方法
組合。此72 個 version 的 pilot study 的數據顯示如表 4.1。
表 4.1 pilot study 實驗結果
15000 30000 60000
V1 A1 + B1 & B3 & B6 + C1 + D1 7.8 4.71 3.61
Average percentage deviation n = 20 , m = 5
Version 實驗組合
chromosme數目
V37 A2 + B1 & B3 & B6 + C1 + D1 7.17 4.36 3.46 V38 A2 + B1 & B3 & B7 + C1 + D1 7.24 4.5 3.51 V39 A2 + B1 & B3 & B8 + C1 + D1 7.35 4.5 3.54 V40 A2 + B1 & B4 & B6 + C1 + D1 7.46 4.34 3.46 V41 A2 + B1 & B4 & B7 + C1 + D1 7.38 4.39 3.49 V42 A2 + B1 & B4 & B8 + C1 + D1 7.43 4.43 3.55 V43 A2 + B1 & B5 & B6 + C1 + D1 7.57 4.54 3.55 V44 A2 + B1 & B5 & B7 + C1 + D1 7.24 4.5 3.48 V45 A2 + B1 & B5 & B8 + C1 + D1 7.57 4.55 3.58 V46 A2 + B2 & B3 & B6 + C1 + D1 6.99 4.29 3.36 V47 A2 + B2 & B3 & B7 + C1 + D1 6.86 5.11 3.33 V48 A2 + B2 & B3 & B8 + C1 + D1 7.03 4.32 3.44 V49 A2 + B2 & B4 & B6 + C1 + D1 6.85 4.05 3.27 V50 A2 + B2 & B4 & B7 + C1 + D1 7.16 4.2 3.32 V51 A2 + B2 & B4 & B8 + C1 + D1 7.15 4.42 3.43 V52 A2 + B2 & B5 & B6 + C1 + D1 7.29 4.29 3.35 V53 A2 + B2 & B5 & B7 + C1 + D1 7.2 4.41 3.45 V54 A2 + B2 & B5 & B8 + C1 + D1 7.55 4.53 3.51 V55 A2 + B1 & B3 & B6 + D1 7.59 4.73 3.62 V56 A2 + B1 & B3 & B7 + D1 7.47 4.63 3.62 V57 A2 + B1 & B3 & B8 + D1 7.65 4.84 3.67 V58 A2 + B1 & B4 & B6 + D1 7.69 4.64 3.57 V59 A2 + B1 & B4 & B7 + D1 7.57 4.51 3.56 V60 A2 + B1 & B4 & B8 + D1 7.51 4.72 3.68 V61 A2 + B1 & B5 & B6 + D1 7.86 4.79 3.64 V62 A2 + B1 & B5 & B7 + D1 7.47 4.69 3.68 V63 A2 + B1 & B5 & B8 + D1 8.15 5.03 3.76 V64 A2 + B2 & B3 & B6 + D1 7.63 4.59 3.53 V65 A2 + B2 & B3 & B7 + D1 7.85 4.77 3.63 V66 A2 + B2 & B3 & B8 + D1 7.32 4.56 3.59 V67 A2 + B2 & B4 & B6 + D1 7.49 4.45 3.46 V68 A2 + B2 & B4 & B7 + D1 7.39 4.3 3.41 V69 A2 + B2 & B4 & B8 + D1 7.03 4.32 3.5 V70 A2 + B2 & B5 & B6 + D1 7.34 4.53 3.44 V71 A2 + B2 & B5 & B7 + D1 7.86 4.79 3.62 V72 A2 + B2 & B5 & B8 + D1 7.79 4.73 3.69
4.1.1 初始解產生器模組演算法績效比較
由於從表 4.1 可看出 A2(螞蟻演算法)幾乎在每個其他模組相同組合情況下的 績效皆優於 A1(Random);另外從表 4.1,我們各自擷取出 A1 (V13 和 V16) 與 A2 (V49 和 V50) 績效表現最佳的兩個 version 整理如表 4.2,也可看出 A2 優於 A1。不論是在一對一比較或者整體最佳比較,A2 都勝過 A1,因此在後續的 comprehensive study,在本模組將只考慮包含 A2 的 version。
表 4.2 A1 與 A2 最佳的比較
15000 30000 60000
V13 B2 & B4 & B6 7.22 4.42 3.43
Average percentage deviation n = 20 , m = 5 (Taguchi methods)有無 version 各自之間的比較,都是擁有 C1 的 version 表現較 佳;而在表4.3,把 C1 有無的最佳表現擷取出來比較,有 C1 的較佳。由以上實
驗數據可得出,在更新解產生器 2 內,C1 是必要的演算方法。因此在後續的
驗數據可得出,在更新解產生器 2 內,C1 是必要的演算方法。因此在後續的