1. 程式人生 > >2.2 The Constraint Satisfaction Problem: Representation and Reasoning

2.2 The Constraint Satisfaction Problem: Representation and Reasoning

2.2 The Constraint Satisfaction Problem: Representation and Reasoning
在這裡,我們考慮約束滿足問題的表示,演算法用於解決它們的各種推理以及這些解決方法的分析。

2.2.1 representation

經典的CSP範例既可以是針對特定領域的,也可以通過各種重要方式進行推廣(通用的)。 一個重要的專業化考慮了域和約束的擴充套件性/內涵性。 如果D中的所有域都是有限集,具有擴充套件表示,那麼它們和約束關係可以被擴充套件地表示和操縱。 然而,即使是大腦和其他相關內容都是有意義的,本章和手冊中其他地方描述的許多技術仍然適用。 如果每個約束的範圍的大小限制為1或2,則約束是一元和二元的,並且CSP可以直接表示為約束圖,其中變數作為頂點,約束作為邊。 如果約束的範圍不是那麼有限,則需要超圖來為每個連線所涉及的p個頂點的p-ary約束(p> 2)進行超邊界。命題公式SAT的滿意度是CSP的另一個特化

,其中域被限制為{T,F}並且約束是條款。 3-SAT是典型的NP完全決策問題,是一個進一步的限制,其中每個約束(子句)的範圍是3個或更少的變數。

CSP的經典觀點最初由Montanari [60]和Mackworth [53]開發。 它與SAT [16,15,54],關係代數和資料庫理論[58],計算機視覺[10,41,79]和圖形[73]有著密切的聯絡和聯絡。

隨後開發了經典CSP模型的各種概括。 其中最重要的是約束優化問題(Constraint Optimization Problem,COP),其中有幾種顯著不同的配方,並且命名法並不總是一致的[19]。 也許最簡單的COP公式保留了CSP限制,只允許“硬”布林值約束,但在變數上增加了成本函式,必須最小化。 例如,這經常出現在排程應用程式中。

2.2.2 Reasoning: Inference and Search 

我們將在兩大類別下考慮解決CSP的演算法:推理和搜尋,以及這兩種方法的各種組合。如果域Di都是有限的那麼推定解的有限搜尋空間是Ω=⋊⋉iDi(其中⋊⋉是連線運算元的相關代數[58])。理論上,可以列舉Ω,並測試每個n元組以確定它是否是一個解。這種盲計數技術可以在使用兩種不同的正交策略時進行改進:推理和搜尋。在推理技術中,區域性約束傳播從Ω中消除大的子空間,理由是它們必須避免解決方案。系統地搜尋探索Ω,經常消除單個故障的子空間。兩種策略的成功取決於CSP結合的簡單事實:要解決它,必須滿足所有約束條件,以便變數子集上的區域性失效排除所有推定的解決方案,並對這些變數進行相同的投影。這兩種基本策略通常在大多數應用中組合使用。

2.2.3 Inference: Constraint Propagation Using Network Consistency 推理:使用網路一致性進行約束傳播

CSP推理技術的主要發展是在20世紀70年代發現和開發用於約束傳播的網路一致性演算法。 在這裡,我們將概述該開發。

使用回溯來解決CSP的分析表明,它幾乎總是顯示出病態的顛簸行為[3]。 顛簸是對回溯搜尋樹的失敗子樹的重複探索,這些子樹基本上是相同的 - 不同的分別與不同的子樹相關的變數。 由於這種不相關的任務具有相應的指數,因此顛簸通常是回溯執行時間中最重要的因素。

所有一致性演算法背後的第一個關鍵見解是,通過收緊約束,使用易處理的,高效的多項式時間演算法,可以一勞永逸地識別和消除大量的顛簸行為。 第二個見解是,一致性的級別或範圍,本地上下文中涉及的變數集的大小,可以作為引數從1到n進行調整,每個級別的增加需要相應的更多工作。為簡單起見,我們將首先描述僅具有有限域和一元和二元約束的CSP一致性演算法的開發,但我們將看到,這兩種限制都不是必需的。 我們假設讀者熟悉圖論,集合論和關係代數的基本要素。

節點一致性是最簡單的一致性演算法。 

弧一致性是一種使用二進位制約束進一步收緊域的技術。

換句話說,刪除Dj中的那些令人難以理解的相應元素,滿足Rij。 如果網路的所有弧都是一致的,則網路是弧一致的。 如果所有弧都已經一致,那麼只需要通過它們就可以驗證這一點。 但是,如果必須使至少一個弧保持一致(即D'i 6 = Di-來自Di的確定)那麼必須重新檢查一些弧。 基本的弧一致性演算法只是重複檢查所有弧,直到達到沒有進一步域減少的固定點。 該演算法稱為AC-1 [53]。

Waltz [79]意識到更智慧的弧一致性簿記方案只會重新檢查那些可能因Di的刪除而直接導致不一致的弧。 Waltz的演算法,現在稱為AC-2 [53],通過弧傳播域的修訂,直到再次達到固定點。 由Mackworth [53]提出的AC-3是AC-2的概括和簡化。 AC-3仍然是使用最廣泛且最有效的一致性演算法。 對於這些演算法中的每一個,讓P'= AC(P)是在P上強制執行弧一致性的結果。然後很明顯sol(P)= sol(P')和|Ω'|≤|Ω|。

理解所有網路一致性演算法的最佳框架是將它們視為從網路中刪除本地不一致性,這種不一致性永遠不會成為任何全域性解決方案的一部分。 當這些不一致性被移除時,它們可能會傳播以導致先前一致的相鄰弧的不一致。 這些不一致性反過來被刪除,因此演算法最終單調地到達固定點一致的網路並停止。 不一致的網路與通過應用一致性演算法產生的一致網路具有相同的解決方案集; 然而,如果隨後將一個回溯搜尋應用於一致的網路,則假設相同的變數和值排序,所得到的顛簸行為可能不會更糟並且幾乎總是更好。

路徑一致性[60]是要考慮的下一個一致性級別。 在弧一致性中,我們使用區域性二元約束來收緊一元約束。 在路徑一致性中,我們類似地使用對變數三元組的隱式誘導約束來收緊二元約束。

與弧一致性一樣,用於強制整個網路的路徑一致性的最簡單的演算法是檢查並確保每個長度2 pathz(i, m, j)的路徑一致性。 如果必須使任何路徑一致,則再次重複通過路徑的整個路徑。 這是演算法PC-1 [53,60]。

演算法PC-2 [53]確定,當這些條件具有一致性時,這些另外的路徑可能會變得不一致,因為如果需要的話,那麼這些路徑就會成為物件,並且必須進行進一步的檢查。 PC-2在PC-1上的實質性節省,就像AC-3比AC-1更有效[55]。

通常,在建立路徑一致性之後,在所有節點對之間存在非平凡的二進位制約束。如Montanari [60]所示,如果長度為2的所有路徑都是一致的,那麼任何長度的所有路徑都是一致的,因此不需要考慮更長的路徑。一旦建立了路徑一致性,沿著任何路徑都有一串值,滿足路徑開始和結束時允許的任何一對值之間的關係。這並不意味著CSP必然有解決方案。如果路徑使用一系列相容值遍歷整個網路,如果該路徑在節點處自相交,則該節點上的路徑上的兩個值可能不同。實際上,即使可能沒有全域性解,也可以與非空域和關係建立一致性,這是弧一致性和路徑一致性的特性。沒有空域的低階一致性是存在解決方案的必要條件,但不是充分條件。因此,如果一致性確實清空任何域或關係,則沒有全域性解決方案。

順便提一下,我們注意到,就關係代數而言,我們對這些演算法的抽象描述是具體而非實現。 實現通常可以通過利用約束的語義來實現效率節省,例如所有不同的全域性約束alldiff,它要求其範圍中的每個變數採用不同的值。

雖然沒有直接明顯的圖論理論概念類似於節點,弧和路徑來激發更高形式的一致性,但考慮到長度為2的路徑實際上是足夠的路徑一致性這一事實為概念提供了自然的動機。 由Freuder於1978年引入的k-一致性[26]。 k-一致性要求給定任何k-1變數的一致值,存在任何第k個變數的值,使得所有k個值是一致的(即k值形成由k個變數引起的子問題的解)。 因此,2-consistency相當於arc一致性,3與路徑一致性相當。 Freuder提供了一種綜合演算法,通過實現越來越高的一致性,在沒有搜尋的情況下找到CSP的所有解決方案。

弗勞德於1985年繼續推進(i,j) - 一致性[28]。 如果給定任何i變數的一致值,則存在任何其他j變數的值,使得所有i + j值一致,則約束網路是(i,j) - 一致的。 k-一致性是(k -1,1) - 一致性。 特別注意(1,j) - 一致性,這是現在被稱為“單身一致性”的概括。