• 沒有找到結果。

第三章、 運用蒙地卡羅樹狀搜尋於多目標彈性零工式工廠排程問題

3.5 其他的變異方法

以下子節將介紹四種應用於 MCTS 的變異方法:子樹修剪的方法、

Rapid Action Value Estimates Heuristic (RAVE)的更新方式、prior knowledge (Prior)的更新與使用、換位表(Transposition Table)。

3.5-1 子樹修剪(subtree pruning)的方法

在樹狀搜尋的過程中,若可以確定某個子樹的搜尋資訊對考慮的目標

𝐶𝐶𝑀𝑀(𝐺𝐺) ≤ 𝐶𝐶𝑀𝑀(𝐺𝐺)、𝑊𝑊𝑇𝑇(𝐺𝐺) < 𝑊𝑊𝑇𝑇(𝐺𝐺)、𝑊𝑊𝑀𝑀(𝐺𝐺) ≤ 𝑊𝑊𝑀𝑀(𝐺𝐺)。

證明:

將模擬的動作視為不斷地由部分排程𝐺𝐺加入作業𝑝𝑝1得到𝐺𝐺1,再由 𝐺𝐺1加入作業𝑝𝑝2得到𝐺𝐺2,…直到𝐺𝐺𝑛𝑛為一個完整排程。由 Lemma1 可知:

𝐶𝐶𝑀𝑀(𝐺𝐺) ≤ 𝐶𝐶𝑀𝑀(𝐺𝐺1)、𝑊𝑊𝑇𝑇(𝐺𝐺) < 𝑊𝑊𝑇𝑇(𝐺𝐺1)、𝑊𝑊𝑀𝑀(𝐺𝐺) ≤ 𝑊𝑊𝑀𝑀(𝐺𝐺1),且 𝐶𝐶𝑀𝑀(𝐺𝐺1) ≤ 𝐶𝐶𝑀𝑀(𝐺𝐺2)、𝑊𝑊𝑇𝑇(𝐺𝐺1) < 𝑊𝑊𝑇𝑇(𝐺𝐺2)、𝑊𝑊𝑀𝑀(𝐺𝐺1) ≤ 𝑊𝑊𝑀𝑀(𝐺𝐺2),

𝐶𝐶𝑀𝑀(𝐺𝐺𝑠𝑠−1) ≤ 𝐶𝐶𝑀𝑀(𝐺𝐺𝑠𝑠)、𝑊𝑊𝑇𝑇(𝐺𝐺𝑠𝑠−1) ≤ 𝑊𝑊𝑇𝑇(𝐺𝐺𝑠𝑠)、𝑊𝑊𝑀𝑀(𝐺𝐺𝑠𝑠−1) ≤ 𝑊𝑊𝑀𝑀(𝐺𝐺𝑠𝑠)。

因此:

𝐶𝐶𝑀𝑀(𝐺𝐺) ≤ 𝐶𝐶𝑀𝑀(𝐺𝐺1) ≤ 𝐶𝐶𝑀𝑀(𝐺𝐺2) ≤ . . ≤ 𝐶𝐶𝑀𝑀(𝐺𝐺𝑠𝑠) ≤ 𝐶𝐶𝑀𝑀(𝐺𝐺)、

𝑊𝑊𝑇𝑇(𝐺𝐺) < 𝑊𝑊𝑇𝑇(𝐺𝐺1) < 𝑊𝑊𝑇𝑇(𝐺𝐺2) < . . < 𝑊𝑊𝑇𝑇(𝐺𝐺𝑠𝑠) < 𝑊𝑊𝑇𝑇(𝐺𝐺)、

𝑊𝑊𝑀𝑀(𝐺𝐺) ≤ 𝑊𝑊𝑀𝑀(𝐺𝐺1) ≤ 𝑊𝑊𝑀𝑀(𝐺𝐺2) ≤ . . ≤ 𝑊𝑊𝑀𝑀(𝐺𝐺𝑠𝑠) ≤ 𝑊𝑊𝑀𝑀(𝐺𝐺)。

由 Lemma1 可知,子節點的三項目標標準分別比母節點來的大,若在 展點或選點時已經確定某個展開的子節點其目標標準被𝐴𝐴𝑃𝑃𝑠𝑠𝑠𝑠𝑏𝑏𝑏𝑏𝑃𝑃中的其中 一組解所主宰(三項目標標準皆大於或等於該解),則可以砍掉該子節點,

因為由 Lemma2 可知,由該子節點模擬出來的結果無法更新𝐴𝐴𝑃𝑃𝑠𝑠𝑠𝑠𝑏𝑏𝑏𝑏𝑃𝑃。

圖 21. 套用子樹修剪的蒙地卡羅搜尋樹

如圖 21,若現在找到的𝐴𝐴𝑃𝑃𝑠𝑠𝑠𝑠𝑏𝑏𝑏𝑏𝑃𝑃 = {(14, 77, 12), (15, 75, 12), (16, 74, 14)},而分派𝑝𝑝7,3至機器 5 後,部分排程的目標標準為(14, 78, 13),此目標

標準比𝐴𝐴𝑃𝑃𝑠𝑠𝑠𝑠𝑏𝑏𝑏𝑏𝑃𝑃中的(14, 77, 12)還差,因此該節點與它子樹中的節點皆比(14,

77, 12)差,這棵子樹就可以被砍掉(紅色叉叉)。

3.5-2 RAVE

在 MCTS 的更新步驟中,會將目標分數更新至祖先。RAVE 除了更新 祖先之外,若祖先兄弟的「決定」(decision)有出現在模擬的結果中,也將 模擬的結果更新到此節點。

本論文的演算法定義「決定」為 3.1 節中提到的四元組決定(4-tuple):

[𝑗𝑗, 𝑝𝑝, 𝑗𝑗, 𝑠𝑠𝑐𝑐𝑠𝑠]。假設經過選點、展點、模擬、區域搜索後得到一個完整排程𝐺𝐺,若 一個祖先兄弟節點 p 的決定是將𝑝𝑝𝑗𝑗,𝑠𝑠放在機器 k 的第𝑠𝑠𝑐𝑐𝑠𝑠順位執行,而在𝐺𝐺中

𝑝𝑝𝑗𝑗,𝑠𝑠也是在機器 k 上第𝑠𝑠𝑐𝑐𝑠𝑠執行的,則將𝐺𝐺的目標分數更新至 p 的 RAVE 平

均勝率與 RAVE 拜訪次數。

圖 22. 由節點 9 開始執行模擬與區域搜索得到右圖的完整排程

假設目前蒙地卡羅搜尋樹如圖 22 的左圖,展開節點 9(實心節點)之後,

進行模擬與區域搜索得到右圖的完整排程𝐺𝐺,計算𝐺𝐺的目標分數得到𝑐𝑐。基 本的 MCTS 只更新節點 9 的祖先,即節點 8 與節點 3;令祖先的兄弟節點 為𝑁𝑁𝑠𝑠𝑏𝑏 = {#2, #4, #7, #10} (節點 9 的兄弟為節點 10、節點 8 的兄弟為節點 7、節點 3 的兄弟為節點 2 與節點 4),RAVE 會判斷𝑁𝑁𝑠𝑠𝑏𝑏中元素的決定是否 出現在𝐺𝐺中來進行 RAVE 更新。以下為𝑁𝑁𝑠𝑠𝑏𝑏的 RAVE 更新狀況:

1. #2:#2 的決定將𝑝𝑝1,1放在機器 1,與𝐺𝐺不同,因此不更新。

2. #4:𝑝𝑝8,1在𝐺𝐺中是放在機器 1 的第二順位,而#4 是放在機器 1 的第一順 位,因此不更新。

3. #7:#7 的四元組決定為𝑝𝑝4,1放在機器 2 的第一順位,有出現在𝐺𝐺中,因 此更新此點的 RAVE 值。

4. #10:#10 的四元組決定為𝑝𝑝8,1放在機器 1 的第二順位(#3 已將𝑝𝑝5,1放在 機器 1 的第一順位),有出現在𝐺𝐺中,因此更新此點的 RAVE 值。

3.5-3 Prior Knowledge

為了充分利用模擬與區域搜索得到的結果(以下稱為𝐺𝐺),除了 RAVE 更 新之外,還將出現在𝐺𝐺中的所有四元組決定記錄在全域的表𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝中。𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 紀錄了四元組決定的拜訪次數與平均勝率,是一張大小為𝑁𝑁𝑝𝑝𝑝𝑝× 𝑚𝑚 × 𝑁𝑁𝑝𝑝𝑝𝑝的 陣列(𝑁𝑁𝑝𝑝𝑝𝑝為全部作業的數量,m 為機器數量,圖 1 中的𝑁𝑁𝑝𝑝𝑝𝑝為 27、𝑚𝑚為 8),

索引是([𝑗𝑗, 𝑝𝑝], 𝑗𝑗, 𝑠𝑠𝑐𝑐𝑠𝑠)。第三維度的大小必須設定為𝑁𝑁𝑝𝑝𝑝𝑝的原因是所有作業 可能都會放在同一台機器上執行。

圖 23. 𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝的初始化(左表)與更新(中表、右表)

在整個演算法運行前建立此表,初始化每個四元組的平均勝率為 0.5、

拜訪次數為 1,如圖 23 的左表。

每次由模擬與區域搜索得到一個完整排程𝐺𝐺與其目標分數𝑐𝑐後,就對𝐺𝐺 中的每個四元組進行𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝的更新,其步驟如下:

1. 設𝑝𝑝為𝐺𝐺中的第一個作業,其四元組決定𝑑𝑑。

2. 令𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝

(𝑑𝑑)

的平均分數為𝑚𝑚𝑣𝑣𝑎𝑎、拜訪次數為𝑣𝑣𝑝𝑝𝑠𝑠𝑝𝑝𝑡𝑡。

3. 更新𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝

(𝑑𝑑)

𝑚𝑚𝑣𝑣𝑎𝑎 =𝑚𝑚𝑣𝑣𝑎𝑎 × 𝑣𝑣𝑝𝑝𝑠𝑠𝑝𝑝𝑡𝑡 + 𝑐𝑐

𝑣𝑣𝑝𝑝𝑠𝑠𝑝𝑝𝑡𝑡 + 1 (11)

𝑣𝑣𝑝𝑝𝑠𝑠𝑝𝑝𝑡𝑡 = 𝑣𝑣𝑝𝑝𝑠𝑠𝑝𝑝𝑡𝑡 + 1 (12) 4. 設𝑝𝑝為𝐺𝐺的下一個作業,若𝐺𝐺沒有其他作業則結束。

圖 23 的中表為一定數量更新之後的𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝,此時獲得了一完整排程𝐺𝐺 如圖 22 的右圖,並獲得目標分數𝑐𝑐為 0.7,將𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 的([5,1], 1, 1)、

([8,1], 1, 2)、([3,3], 1, 3)、([4,1], 2, 1)…等四元組以分數 0.7 更新而得 到圖 23 的右表。

在 MCTS 展點時,若沒有任何新節點的評估,只能給予初始分數一個 固定的值(如 0.5),紀錄𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝是為了讓先前模擬的資訊可以在展點時運用。

初始化新展開的節點時,以此節點的四元組決定𝑑𝑑到表中查詢平均勝率

𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝

(𝑑𝑑)

,依下列公式進行初始化:

𝐼𝐼𝑛𝑛𝑝𝑝𝑡𝑡𝑝𝑝𝑚𝑚𝐼𝐼 𝑅𝑅𝑚𝑚𝐼𝐼𝑉𝑉𝑐𝑐 = 𝛽𝛽 × 𝐴𝐴𝑜𝑜𝑠𝑠𝑠𝑠𝑃𝑃𝑠𝑠(𝑑𝑑) + (1 − 𝛽𝛽) × 0.5 (13)

圖 24. 利用𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝給予新展開的節點初始分數

其中𝛽𝛽為參考 prior knowledge 的比重,如圖 24,𝛽𝛽 = 0.25,在#1 展出新節 點 #2 時 , 依 照 #2 的 四 元 組 決 定[4,1,2,1] 到 𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝表 中 查 詢 , 得 到

𝐴𝐴𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝

([4,1], 2, 1) = 0.634

,再按照公式給予初始分數 0.5335。

3.5-4 換位表(Transposition Table)

在建構蒙地卡羅搜尋樹時,可能會有不同的節點代表相同排程的狀況,

如下頁圖 25,決定「𝑝𝑝1,1放在機器 5」與決定「𝑝𝑝5,1放在機器 1」的先後順 序並不會影響到排程結果,所以#2 和#3 代表的排程是相同的;決定「𝑝𝑝1,1放 在機器 5」與決定「𝑝𝑝5,1放在機器 5」的先後順序卻會影響到𝑝𝑝1,1和𝑝𝑝5,1的執 行順序,因此#1 和#4 代表不同的排程。

圖 25. 不同樹節點代表相同排程的狀況

我們希望讓代表相同排程的節點共享同一子樹,藉此充分利用模擬的 資訊並省下相似的計算,換位表(Transposition Table,以下簡稱為 TT)即是 用以偵測搜尋樹中代表重複排程的節點。以下為 TT 在本論文演算法中的 設計方式:

1. 進行蒙地卡羅搜尋前,在全域宣告一個大小為225的陣列𝐴𝐴𝑇𝑇𝑇𝑇,每一列

都存放𝑅𝑅ℎ𝑠𝑠𝑏𝑏ℎ(一個 64 位元的整數)與 link(一個指標)。

2. 在展點時,對新節點 p 代表的排程進行 zhash [21]計算得到一個 64 位 元的整數ℎ。

3. 取ℎ的後 25 位元得到整數ℎ25。

4. 若𝐴𝐴𝑇𝑇𝑇𝑇[ℎ25]. 𝑅𝑅ℎ𝑠𝑠𝑏𝑏ℎ等 於ℎ , 則 將 p 連 結 至 𝐴𝐴𝑇𝑇𝑇𝑇[ℎ25]. 𝐼𝐼𝑝𝑝𝑛𝑛𝑗𝑗 ; 否 則 設 𝐴𝐴𝑇𝑇𝑇𝑇[ℎ25]. 𝑅𝑅ℎ𝑠𝑠𝑏𝑏ℎ為ℎ、𝐴𝐴𝑇𝑇𝑇𝑇[ℎ25]. 𝐼𝐼𝑝𝑝𝑛𝑛𝑗𝑗為 p。

在 MCTS 的選點、展點與更新步驟,若走到的節點有連結至具有相同 ℎ的節點,則要以連結到節點的資訊進行處理。值得一提的是,在本論文 提出的演算法中,當選擇了最好的子節點𝑐𝑐𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏並將它的四元組決定加入排 程中,會將𝑐𝑐𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏的兄弟子樹砍掉,若𝑐𝑐𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏之下的子樹節點有連結到被砍掉 的子樹節點,則會發生連結上的問題,因此在實作時需要將這些被連結到 的子樹搬移到𝑐𝑐𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏之下。

相關文件