第二章 文獻回顧
2.2 限制規劃
2.2.3 限制規劃空間搜尋技巧
限制規劃中的求解搜尋技巧主要是由一致性檢驗技術及空間搜尋演算法所構成,
其運作機制是在每個分支節點利用一致性檢驗技術減少可行解搜尋空間。所謂一致性 檢驗技術是指,假設有兩個變數Xi與Xj,對所有a∈Di(Xi之值域)及b∈Dj(Xj之 值域)而言,若Xi=a 時,Xj均能從其值域中找到一個b 值,使其滿足所有限制式,
則稱一條具有方向性的節線<Xi,Xj>一致(Consistent),否則稱做不一致(Inconsistent)。 一致性檢驗技術的目的在於盡可能地刪減變數之值域,使其最後剩下的值域能夠具備 一致性。
一致性檢驗技術包括:節點一致性(Node Consistency)、節線一致性(Arc Consistency)、界限一致性(Bounds Consistency)、一般化一致性(Generalized Consistency)四種技術,不同的一致性檢驗技術複雜度皆不同,愈簡單的一致性檢驗 技術所需花費的運算時間愈短,每一種一致性檢驗技術有其優點及應用時機。本研究 以一二元限制式(Binary Constraint)之 Arc Consistency 技術為範例介紹如下:
圖2.3 中,(a)表示 x1 與 x2 原來的值域,(b)表示讓< x1,x2> arc consistent 的值域,
(c)表示讓< x1,x2>與< x2, x1>均 arc consistent 的值域。
X1
X2
X2
X2
X1
X1
{1,2,3,4,5} {1,2,3,4,5}
{1,2}
{1,2,3,4,5}
{1,2} {4,5}
X1 < X2 - 2
X1 < X2 - 2 X1 < X2 - 2 (a) 原來的值域
(b) <X1,X2> arc consistent 的值域
(c) < x1,x2>與< x2, x1>均arc consistent的值域
資料來源:[3]
圖2.3 Arc Consistency 範例
限制規劃之搜尋演算法主要有三:回溯法(Backtracking)、前向查核法(Forward Checking)以及 MAC 演算法。回溯法之搜尋概念很簡單,但是因為回溯法的效率很 差,故實際上應用並不多,前向查核法與MAC 演算法均使用一致性檢驗技術作為搜
尋機制核心。
此三種演算法均是以樹狀結構(Tree)表示目前搜尋狀態,樹狀結構的每一節點 可視為解的一部份(partial solution),每個節點中,若有些變數的值已經決定(由上 一層父節點而決定),這些變數稱做「過去變數」(past variable),相對於過去變數是 未來變數(future variable),未來變數是節點中尚未選定變數值的變數,這些變數的值 可以在後來選定。另外,現在變數(current variable)是目前正在考慮的變數。樹狀結 構中的分支(branch)代表變數其他可能值,在搜尋過程中選定分支決定變數的值之 後,演算法會從未來變數值域中刪減掉與目前變數值域不一致的值,當未來變數值域 中的值被刪減成空(empty)時,該節點的狀態稱之為死巷節點(deadend node),不 得再進行分支。以上三種演算法主要差異在於其處理未來變數的方式,如圖2.4 所示,
以下將以一個4-queens 的限制滿足問題說明回溯法、前向查核法與 MAC 演算法空間 搜尋推衍之過程,如下圖2.5 至圖 2.7 所示。
資料來源:[5]
圖2.4 BT、FC 與 MAC 三種演算法的對照圖
4-queens 為 N-queens 問題之一種例子,N-queens 是一種棋盤遊戲像西洋棋裡皇后 能走的規定,在N x N 的棋盤中必須放入 N 個 queens,擺棋規則必須符合:
規則(限制式)1:同一行不能出現兩個 queens 規則(限制式)2:同一列不能出現兩個 queens 規則(限制式)3:任一對角線不能出現兩個 queens
三種方法詳細說明如下:
(1) 回溯法(Backtracking, BT)
回溯法之搜尋架構類似於數學規劃中分支定限法(Branch and Bound Method),在 搜尋過程中,一次固定一變數之值,如此層層搜尋下去,直至所有變數皆被指派有數 值。在回溯法當中,目前變數所指定之值會與目前的部分解(current partial solution)
進行比對,若有不一致之情形會使得問題無解,則必須回到上一個狀態重新搜尋而不
由Haralick 與 Elliott 兩位學者於 1980 年[16]所發展出來的演算法。為智慧型空間 搜尋演算法中最基本、最常使用之演算法,其運作概念與BT 大致相同,差異性在於 FC 演算法是運用一致性檢驗技術於新初始化變數與未初始化變數間而不是運用在新 初始化變數與已初始化變數間,藉此差異使得FC 演算法能透過事先地刪除未初始化 變數值域中與目前部分解具有不一致性的值域值(Domain Values),來避免目前部分解 將面臨的衝突,進而大大縮減搜尋樹空間與搜尋過程中可能產生之分枝檢驗次數,大 幅地提升傳統BT 演算法之執行效率,成為一種智慧型空間搜尋演算法。同樣地,運 用FC 演算法於求解 4-queens 問題為例,便可更清楚地瞭解之 FC 演算法之實際運作 流程,其實際運作流程即如圖2.6 所示:
Q
Q
Q Q
Q
Q
Q
Q
×
Q Q
Q Q
Q
Q Q
Q Q
×
資料來源:[34, 35]
圖2.6 FC 搜尋法–以 4-queens 為例
詳細比較FC 與 BT 演算法之搜尋樹空間(searching tree space)(圖 2.5、圖 2.6),可 明顯地發現,FC 之分枝節點數(Branch Node)較 BT 少很多,且 FC 的分枝深度(Depth of Branch)亦較 BT 短,由此可知,FC 演算法之執行效率較 BT 演算法好很多。
(3) MAC 演算法(Maintaining Arc Consistency)
由Sabin 與 Freuder 兩位學者於 1994 年[28]所發展出來 MAC(Maintaining Arc Consistency)一致性檢驗技術為目前文獻上最常使用在未初始化變數與未初始化變數 間之一致性檢驗技術,其運作方式乃「以節線一致性檢驗技術為基礎、以未初始化變 數與其對應之值域所構成的子限制滿足問題(sub-CSP)為一致性檢驗之對象」,當MAC 偵測到某個未初始化變數之所有值域與目前之sub-CSP 呈現不一致的現象時,即表示 目前之sub-CSP 不存在任何可行解,所以無須再從目前之分枝節點進行分枝。
以4-queens 為例,運用 MAC 求解此問題之運作方式如圖 2.7 所示,其中有數字 的格子表示「未初始化變數中與目前sub-CSP 呈現不一致之值域值」,而數字的標示順 序乃表示「當標示數字為i 之未初始化變數值域值因與目前之 sub-CSP 不一致而被刪 除時,便會進一步促使標示數字為i+1 之未初始化變數值域值與目前 sub-CSP 產生不 一致之現象,其中i≧1」,由此可知,標示數字為 1 的個格字表示,最開始與 sub-CSP 產生不一致之未初始化變數值域值,而標示數字為2 的格子表示,當標示數字為 1 的 值域值從其相對應之未初始化變數值域中移除之後,標示數字為2 的未初始化變數值 域值也必須因而從其對應之值域中移除,而其他的標示數字則依此類推。從圖2.7 之 左分枝來分析,由於經過MAC 之一致性檢驗之後,發現最後一列之目前 queen 變數
雖然MAC 比 Forward Checking 能更早發覺不一致的變數值域空間,Forward Checking 相對於 Backtracking 也是如此。但執行愈多的一致性驗算所需的運算工作自 然愈繁重,要及早刪除較多的搜尋空間亦必須花費額外的運算時間。因此在某些情況 下執行MAC 反而得經過費時的運算,所以 Forward Checking 與 Backtracking 在應用 上仍有存在的必要,彼此間可相互配合運用。
Q
2 1 1
Q 1
2
Q Q
Q Q
Q
Q Q
Q Q
×
資料來源:[34, 35]
圖2.7 MAC 搜尋法–以 4-queens 為例 2.2.4 模式化語言 OPL 之簡介
組合最佳化問題在現實世界的問題中到處存在,舉凡規劃(Planning)、排班排程 (Scheduling)、排序(Sequencing)、資源規劃(Resource Allocation)等都是此類型的問題,
而目前一些較強而穩健的求解系統雖然都能對大規模的線性規劃與各類型整數規劃問 題提供效率不錯的求解演算法,但由於實際的實務問題規模非常大且複雜,往往使得 OR 人員在求解實務問題時,花費很多時間在模式化問題(Modeling Problem)並且轉換 成這種求解系統可以讀的檔案格式與求解演算法,對於OR 人員而言,若能擁有一套 緊密連接「模式構建」與「求解演算法」的模式化語言,將使OR 人員更快速地解決 所面臨之實務問題,並大幅地提高他們的生產力與工作效率。
OPL(Optimization Programming Language)為一種專門求解組合最佳化問題的模式 化語言(Modeling Language),不同於一般命令式語言(Imperative Language)(如:C 語 言、C++、VB 等),OPL 為一種宣告式語言(Declarative Language),由於繼承宣告式語 言的特性,使得限制式在模式中的順序並不會影響模式之求解結果,所以使用者可以 隨時地加入、修改、刪除與管理問題之限制式。模式化語言最大的貢獻在於,它拉近 了「電腦程式語法」和「數學表示法」之距離,讓使用者能簡便地描述並解決問題。
所謂的模式化語言,其發展主要是為了利用電腦來解決數學規劃的問題,這樣的 語言是利用一些資料型態(data types)如:陣列(arrays)、集合(sets)來表達傳統的 數學表示法。例如我們想要表達
∑ ∑
=
=
× m
i i i
m
i
X A
1 1
,則在OPL 的語法中,可以用下列式
子來表示:
sum(i in 1..m)A [i] * X [i]
傳統模式化語言最大的貢獻在於,它使得『電腦程式語法』和『數學規劃語法』
相似,讓使用者能夠方便地描述(stating)並解決(solving)傳統數學規劃問題。
而在OPL 程式編寫的平台部分,OPL Studio 是專門設計讓使用者撰寫 OPL 語言 的軟體。與Visual C++或 Visual Basic 一樣,同樣地,OPL Studio 也提供使用者相當人 性化的介面,讓程式設計者在程式編寫以至於程式編譯(Compile)時,能夠更方便地 進行除錯(Debug)的動作。
除此之外,OPL Studio 在內部求解的過程,還提供了相當多對於解空間的搜尋策 略,讓使用者在模式構建以及程式編寫完成後,能夠選擇最適合模式的搜尋方法,以 便最有效地對模式進行求解工作。
OPL 與傳統模式化語言不同的功能可歸納成下列三項:
1. 支援限制規劃模式:支援限制規劃(Constraint Programming, CP)模式是 OPL 與傳統 模式化語言最大的不同。
2. 使用者可以自訂搜尋演算法(Search Procedure):OPL 允許使用者針對其面臨的組合 最佳化問題(如:線性規劃問題、整數規劃問題、限制滿足問題)特性,自行訂定搜 尋演算法;而傳統的模式化語言並不提供這個功能。
3. 提 供 更 多 種 的 限 制 式 表 達 方 式 : 針 對 我 們 實 務 問 題 最 常 見 的 排 班 排 程 問 題 (Scheduling Problem)與資源配置問題(Resource Allocation),OPL 提供專門的語法來 表示活動(Activity)與資源(Resource)之間的關係,使得使用者欲模式化這類問題時,
能更容易上手;此外,OPL 提供比傳統模式化語言更多的限制式表達方式,如:
Higher-Order Constraint、Logical Constraint 等。
2.2.5 數學規劃與限制規劃之比較
數學規劃與限制規劃皆為可用於求解組合搜尋問題的方法,但此兩種方法的求解 架構思維模式卻不盡相同。數學規劃的方法是根據數學理論的角度來求解,方法論的 重心在於「運用歸類組合最佳化問題的種類並研究各類型問題的特性,提出相關數學
數學規劃與限制規劃皆為可用於求解組合搜尋問題的方法,但此兩種方法的求解 架構思維模式卻不盡相同。數學規劃的方法是根據數學理論的角度來求解,方法論的 重心在於「運用歸類組合最佳化問題的種類並研究各類型問題的特性,提出相關數學