第五章 模擬退火式板面規劃演算法
5.4 攪亂運算
5.4.1 插入與刪除運算
在本論文中對板面規劃中區塊的刪除和插入,不但會使板面規畫改變,其對 應的 DBL 也會改變,而這兩個操作則是藉由 DBL 與階層式階梯輪廓的互動完成,
刪除與插入的所需的步驟各別如下:
z 刪除 :
步驟 1 : 將所指定的區塊從 DBL 和板面規劃中去除指定的區塊。
步驟 2 : 由於有區塊被刪除,板面規劃變成沒有左下靠緊,因此需做 壓縮(packing)的動作,使其再度成為左下板面規劃並重建 DBL,以圖 5.6(a)為例,將圖中的區塊 0 刪除後即成為圖 5.6(b)所示需要壓縮的 狀態。
1
11 3 4
5 6
7 8
9 10 2
0 1
11 3 4
5 6
7 8
9 10 2
00
1
11 3 4
5 6
8 9 10 2
7 1
11 3 4
5 6
8 9 10 2
77
(a) 原本的板面規劃與 DBL (b) 刪除區塊 0,形成需壓縮的狀態 圖 5.6 刪除運算
z 插入 :
因此需將這些被影響到的區塊做壓縮動作並重建 DBL,以圖 5.7(a)為 例,希望將區塊 11 放置在區塊 7 的上方,這樣會影響到一些原本以放 置好的區塊如圖 5.7(b)的區塊 7、8、9、10 與區塊 11,將這些會被影 響的區塊獨立出來,使其成為如刪除中需要壓縮的狀態。
1 11
3 4
5 6
7 8
9 10
2
0 12
1 11
3 4
5 6
7 8
9 10
2
0 12
1 11
3 4
5 6
7 8
9 10
2
00 12
1
11 3 4
5 6
7 8
9 10 2
0 12
1
11 3 4
5 6
7 8
9 10 2
0 1
11 3 4
5 6
7 8
9 10 2
00 12
(a) 在板面規劃與 DBL 中插入區塊 12 (b) 形成需壓縮的狀態 圖 5.7 插入運算
由上可知,無論是刪除或插入操作,整個操作重點為壓縮的過程。
大致來說,壓縮操作(packing operation)可以分為兩部分,其一是壓縮的 準備工作,即將板面規劃與 DBL 做分割,找出哪些區塊需要移動,這可以由對 DBL 的操作;另一則是實際將區塊分別放到定位更新板面規劃與 DBL,這是由階層 式階梯輪廓來達成的。全部的壓縮操作分為 6 個步驟,分別如下 :
步驟 1 : 找出目標輪廓 :
即從哪裡開始壓縮的要求下,建出需要目標輪廓,如圖 5.6 的例子
是希望從原點開始,所以建出的目標輪廓為最左下邊緣的;圖 5.7 則是 希望由區塊 0 的右邊緣開始,所以目標輪廓由區塊 5、6、3、4 與區塊 0 組成。這些目標輪廓可以藉由操作 DBL 構成,詳細過程如下 :
(1) 追蹤指定區塊在 DBL 中的上左邊與右下邊,建立一條停止邊 際。
(2) 以板面規劃的左下角為準,對 DBL 做深先搜尋(Depth-First Search ,DFS),直到碰到停止邊際。
(3) 由 碰 到 停 止 邊 際 前 的 區 塊 作 成 一 虛 擬 輪 廓 順 序 (virtual contour order )。
(4) 將虛擬輪廓階層化,成為第四章所提的階層式階梯輪廓。
由圖 5.8 可以了解整個過程,這個例子是希望取以圖中區塊 19 為 準的目標輪廓,首先執行過程 1,追蹤圖 5.8(a)中由區塊 19 出發的 DBL 左上邊與右下邊,由此可取得包括區塊 19 的停止邊際
為 :( 29,13,11,19,20,32)並且延伸到板面規劃的左上點與右下點,如 圖 5.5(b)所示;接下來過程 2,以圖 5.8(b)中的區塊 21 為起點作深先 搜尋到碰到停止邊際,順序為 (21→6→13→14→24→23→2→7→8→28
→18→5→27→31→3→25),如圖 5.8(c)所示;緊接著過程三則是從深 先搜尋結果的串列中依序找出在停止邊際邊緣的區塊,如圖 5.8(c)中 的區塊順序為(24,23,2,7,8,28,5,27,31,3,25),這些區塊未來用來表 示階梯輪廓,即為虛擬輪廓順序;最後一步則是將虛擬輪廓順序轉成在 第四章所提的階層式階梯輪廓,如圖 5.8(d)即為最後結果,轉化成階 層式的方法則是針對虛擬順序中的每一區塊,個別當作新加入的區塊來 更新階梯輪廓,所使用的方式請見 4.2 節中討論階梯輪廓更新的部份,
經過以上過程即可得到目標的階梯輪廓。
(a) 找出以區塊 19 為準的輪廓 (b)畫出停止邊際
(c)深先搜尋 DBL,找出虛擬輪廓順序 (d)目標的階層式階梯輪廓 圖 5.8 找尋目標輪廓
步驟 2 : 將板面規劃與 DBL 分成兩部份,分別為右上集合(RT-set)與左下 集合(LB-set) :
使用停止邊際分類,在停止邊際左下方向,包括由步驟 1 取得的目 標輪廓,是無需移動的,即左下集合;在停止邊際右上的為右上集合,
是日後要移動的區塊,延續步驟 1 圖 5.8 的例子分出的集合如圖 5.9,
左下集合為(0,1,2,3,5,6,7,8,13,14,18,21,23,24,25,27,31),其餘右
上集合為(4,9,10,11,12,15, 16,17,19,20,22,26,28,29,30,32)。
5
RT-set
LB-set 5
RT-set
LB-set
圖 5.9 將板面規劃分成左下集合(LB-set)與右上集合(RT-set)
步驟 3 : 在右上集合中找出一沒有 DBL 邊連結的區塊 Bi :
在分割版面區塊與 DBL 時,一定會割出沒有 DBL 連接邊指向的區 塊,本步驟就是從這些區塊挑一個出來當做要移動的區塊,當其移動完 了以後,DBL 會有所更新,又會出現沒有被 DBL 連接邊指向的區塊,如 圖 5.10(a)先選擇區塊 a 移動後,其 DBL 連接邊更新就再產生右上集合 中又產生新的沒 DBL 連接的區塊 b,如圖 5.10(b)。
LB-set
( Limit ,Limit )
( 0,0 )
a b
c
LB-set LB-set
( Limit ,Limit )
( 0,0 )
a b
c
LB-set
( Limit ,Limit )
( 0,0 )
a b
c
LB-set LB-set
( Limit ,Limit )
( 0,0 )
a b
c
步驟 4 : 將區塊 Bi 放入在目標輪廓中選定的 L 角落。
目標輪廓為即為第四章討階層式階梯輪廓的結構,所以將區塊 Bi 放入的方法即在 4.2 節中的操作,詳細起見 4.2 節。至於選擇 L 角落的 原則,為了要使板面規畫趨近於之前的外型,選擇和之前區塊所在的位 置較近的 L 角落,還有別忘了在 4.3 節所設定的初始邊際
(0,0,
Limit
,Limit
),最好選在這以內的 L 角落,如圖 5.11 所示區塊 a 有 5 個 L 角落可選擇,要選擇和自己最近的即第 3 號 L 角落。( Limit,Limit )
( 0,0 )
a 1
2
3
4 5
( Limit,Limit )
( 0,0 )
a 1
2
3
4 5
圖 5.11 選擇在目標輪廓上的 L 角落
步驟 5 : 重建 DBL 連接邊與更新目標輪廓的階層式階梯輪廓結構 : 其實這個步驟與 4.3 節初始板面規劃的步驟 4 是完全一樣的,即將 區塊放入階層式階梯輪廓後,隨著更新輪廓的腳步重建 DBL 連接邊,詳 情請見 4.3 節。
步驟 6 : 將 Bi 從右上集合中除名並加入左下即,即表示以移動完成,再檢 查右上集合中是否還有區塊,若還有則回步驟 2,否則壓縮動作結束。
基本上,壓縮的動作和 4.3 節提到初始版面規劃動作是類似的,只是在一開 始初始的輪廓不同而已。到這裡其實可以發現在模擬退火式板面規劃法中的要項:
初始板面規劃,各種攪亂方式包括交換、旋轉和移動甚至到以後更複雜的運算;
對 DBL 來說都只有一件事 :”壓縮動作”。