1、知識表示實際上就是對知識的一種描述,即用一些約定的符號把知識編碼成一組計算機可以接受的數據結構。所謂知識表示過程就是把知識編碼成某種數據結構的過程。
2、常用的知識表示方法
非結構化方法
邏輯表示法 QA3,STRIPS,DART,MOMO
產生式系統 DENDRAL,MYCIN
結構化方法
框架
語義網絡
過程式知識表示法
3、產生式系統的定義
產生式系統是人工智能系統中常用的一種程序結構,是一種知識表示系統。
通常由以下三部分組成:
- 綜合數據庫(存放問題的狀態描述的數據結構。)
- 產生式規則集
- 控制系統
(1)選擇規則:
對同一個狀態的多個可用規則排序。
(2)檢驗狀態描述是否滿足終止條件。
如果滿足終止條件,則終止產生式系統的運行,
並用使用過的規則序列構造出問題的解。
4、可交換產生式系統定義:(第二章ppt P34)
一個產生式系統稱爲可交換的,如果對任意狀態描述D具有如下性質:
- 設RD是可應用於D的規則集,任取r ∈RD, r作用於D得 D’,設爲D’= r (D),則r對D’ 可用(即:設D’的可用規則集爲RD’,則r∈ RD’ ,即RDÍ RD’ );
- 設D滿足目標條件,D的可用規則集爲RD,任取 r∈ RD ,用r作用到D產生狀態D’ ,D’滿足目標條件。
- 設D的可用規則集爲RD,任取 r1, r2, …, rn ∈RD,依據(a)將r1, r2, …, rn依次作用到D及產生的狀態上,得狀態Dn;設r1’, r2’, …, rn’ 是 r1, r2, …, rn的任意一個排列,用r1’, r2’, …, rn’依次作用到D及產生的狀態上,得狀態Dn’,則Dn’= Dn 。
例子:
5、產生式系統的工作方式:
1.正向產生式系統(數據驅動控制) :適用條件:初始節點數≤目標節點數
2. 反(逆)向產生式系統(目標驅動控制):適用條件:初始節點數≥目標節點數
3. 雙向產生式系統:正向產生式系統和反向產生式系統結合:
初始節點數與目標節點數都很多 特點:效率高;複雜。
6、產生式系統的特點:
一、模塊性強。綜合數據庫、規則集和控制系統相
對獨立,程序的修改更加容易。
二、各產生式規則相互獨立,不能互相調用,增加
一些或刪去一些產生式規則都十分方便。
三、產生式規則的形式與人們推理所用的邏輯形式
十分接近,人們具有的知識轉換成產生式規則
很容易,產生式規則也容易被人們讀懂。
7、控制策略
- 不可撤回的控制策略
- 試探性控制策略:回溯方式和圖搜索方式
8、特殊的產生式系統
A、可交換產生式系統:
在某些產生式系統中。規則應用的次序對產生的狀態無影響,即從初始狀態
到目標狀態不依賴規則次序,因此可應用不可撤回式控制策略。從而提高了產
生式系統的效率,這類產生式系統就是可交換的產生式系統
B、可分解的產生式系統(避免搜索多餘路徑的另一種方法是可分解的產生式系統。)
定義:能夠把產生式系統綜合數據庫的狀態描述分解爲若干組成部分,產
生式規則可以分別用在各組成部分上,並且整個系統的終止條件可以用
各組成部分的終止條件表示出來的產生式系統,稱爲可分解的產生式系統。
Procedure PRODUCTION(產生式系統的基本過程)
選取規則所依據的原則稱爲控制策略。
- DATA←初始狀態描述
- until DATA 滿足終止條件,do:
- begin
- 在規則集合中,選出一條可用於DATA的規則R
- DATA←把R應用於DATA所得的結果
- End
Procedure SPLIT(可分解的產生式系統)
SPLIT的控制策略:在步驟5中如何選取D*,在步驟7如何選取R。
- DATA ← 初始狀態描述
- {Di} ← DATA的分解結果;每個Di看成是獨立的狀態描述
- until 對所有的Di Î{Di}, Di都滿足終止條件,do:
- begin
- 在{Di}中選擇一個不滿足終止條件的D*
- 從{Di}中刪除D*
- 從規則集合中選出一個可應用於D*的規則R
- D ← 把R應用於D*的結果
- {di} ← D的分解結果
- 把{di}加入{Di}中
- end
9、不可撤回的控制策略
爬山函數:定義在整個綜合數據庫上的實數值函數,
目標狀態有最大的函數值。
目 標:爬到山頂。
控制策略:應用爬山函數選一規則,使得所選下一狀態的爬山函數值不減少且最大(有兩個相同的最大值時任選一個;若無這樣的規則,則終止爬山過程)。
10、八數碼問題——回溯
設爬山函數CF(S) :不在目標位的數碼個數的負值。
11、八數碼難題 回溯式
、
12、圖搜索控制策略的特點
- 不再選擇規則,而是使用所有可用的規則,下一步選擇節點來擴展。
- 存儲所有產生的節點,佔用空間大。
- 有解一定能找到(相當於窮舉)。
- 平均時間複雜性高,系統效率低。
13、四皇后問題:
存在的問題:回溯的次數很多,22次回溯。
傳統回溯法:
原因:沒有關於問題的探索性信息指導規則排序。
解決方法之一:在規則排序過程中使用一些探索性信息,減少回溯次數,提高算法效率.
例:使用函數 diag(i, j)來修改APPRULES(RULES)
diag(i, j):通過單元(i,j)的最長對角線的長度.(在擴展每一層擴展全然後根據啓發信息值排序 ,然後確定探索哪一個節點或狀態,回溯的時候直接根據排列好的順序繼續向下擴展)
修改後的 APPRULES(RULES):
if diag(i,j)<diag(i,k),then Rij排在Rik前.
if diag(i,j)= diag(i,k),then與以前相同
按照小的順序進行擴展,這裏還是一個深度搜索與後面的啓發式搜索用到open表不一樣注意!
問題???這個意思就是深度搜索的時候根據最長對角線長度來決定先搜索誰,比如第一開始最長對角線是最左和最右,那麼先從左邊開始,搜索R11放皇后之後,在第二行中搜索R24放皇后具有最長的右上對角線,這樣子去擴展???
14、圖搜索策略
一、相關概念
A、有向圖 :G=(P,A),P:點集 A:弧集
對於產生式系統,
節點:用狀態描述標記
弧:用規則標記
目的:圖搜索策略把尋找從初始狀態描述到目標描述的規則序列問題轉化成尋找有向圖的解路徑問題
B、有向樹:每一個節點最多隻有一個父親的有向圖.
有向樹中節點的深度:
1) 根節點的深度是0,
2)其它節點的深度等於它父節點的深度加1。
- 加權有向圖(權圖):每條弧線上都有使用費用(正數)的圖。
D、隱含圖:由部分節點和一組其它節點生成規則所確定的圖.
二、啓發式搜索
啓發式信息:用於幫助減少搜索量的與問題有關的信息或知識。
啓發式搜索:使用啓發信息指導的搜索過程叫做啓發式搜索。
啓發信息特點:
啓發信息強,可以降低搜索的工作量,但可能導致找不到最優解;
啓發信息弱,一般會導致搜索的工作量加大,極端情況下演變爲盲目搜索,但有可能找
到最優解。
常規用法:使用啓發信息的一種重要方法是採用估價函數。
啓發式搜索例子:
問問問問問 是普通的回溯法+啓發信息?
答:不是,與回溯法區分,它就是用graphsearch算法的一個搜索,只是當估價函數=0的時候變成了寬度優先搜索,然後與後面你的A*算法區分,A*算法的Closed表中的點可能與當前擴展點重複,需要重新判斷更新值,但是比如八數碼的啓發搜索,他是樹的形式,不存在重複,所以只需要考慮將當前節點的後繼全部擴展一遍,放入open然後根據啓發信息排列,進行下一步的循環擴展即可。
利用估價函數f(n)=d(n)+W(n)反向搜索上例八數碼難題。指出反向搜索和正向搜索在什麼地方相遇。
(左優先、淺層的優先)
三、相關搜索概念(正向和反向與搜索策略無關 與初始狀態和目標狀態的先後有關)
1.正向搜索:從初始節點到目標的搜索
2.反向搜索:從目標節點到初始節點的搜索
3.雙向搜索:正向和反向搜索的結合
搜索需要產生的節點數
1.寬度優先搜索,使用雙向搜索要優越許多
2.對於啓發式搜索,評價單向搜索和雙向搜索的優劣很複雜,雙向搜索使用不當可能是單向搜索量的二倍.
3.分階段搜索:爲了完成搜索過程,可對搜索圖進行修剪,釋放出一部分存儲空間。
把OPEN表具有最小f值的一些節點打上標記,記住這些節點和通向這些點的最佳路徑,刪去搜索圖其餘部分。然後恢復節點和路徑,重新開始搜索。分階段搜索並不能保證找到一條解路徑。
四、可採納性
定義:如果一個搜索算法對於任何具有解路徑的圖都能找到一條最佳路徑,則稱此算法爲可採納的。
A*算法的可採納性A*算法是可採納的(如果解路徑存在,A*一定由於找到最佳解路徑而結束):
A*可採納相關定理以及推論:
前要概念:
K(ni, nj) :隱含圖中節點ni到nj最小費用路徑的實際費用。
若ni到nj無路,則函數K(ni, nj) 無定義。
h*(n):設{ti} 是目標節點集合,定義
h*(n)=mini{ K(n, ti) }
表示隱含圖中從n到目標節點的最小費用路徑的費用。
對不能到達目標節點的節點n,h*(n)無定義。
最佳解路徑:從n到目標節點的任何費用爲h*(n)的路徑。
g*(n): g*(n)=K(s,n)
表示隱含圖中從初始節點s到n的最佳解路徑的費用。
f*(n):f*(n)=g*(n)+h*(n)
表示隱含圖中,通過節點n,從s到目標節點的最佳解路徑的費用。
當n是從初始節點到目標節點t的最佳解路徑上的節點時,
f*(n)= f*(s)=f*(t)=h*(s)。
f*(s)指的是從初始節點到目標節點的最佳解路徑費用
A*算法:對任何節點n都有h(n)≤h*(n)的A算法。(理解≤號其實直觀的理解應該是=號,≤是爲了更加的嚴謹,因爲如果是>肯定不是A*所以是≤,但是實際上我們不可能或者是很難找出這樣的A算法,但是如果它能夠找出最佳解路徑,我們也都認爲這一A算法是A*算法,後面的不同A*算法的比較也可以看作是不同的A算法之間的比較)
定理1:GRAPHSEARCH對有限圖必然終止。
引理1 若A*不終止,OPEN表中節點的估價函數值可以
無限變大。
定理2 若存在s到目標的解路徑,則算法A*終止前的任何
時刻,OPEN表中總存在一個節點n’, n’在從s到
目標的最佳解路徑上,且滿足f(n’) ≤f*(s)
定理3 若存在解路徑,則A*算法必終止。
推論 OPEN表中的任一滿足f(n)<f*(s)的
節點n,最終將被算法A*選作擴展節點。
定理4 算法A*是可採納的。(若解路徑存在,A*一定找到最佳解路徑而終止).
(定理4和定理3的區別是存在解路徑的時候某一算法終止不代表找出最佳解路徑)
定理5 算法A*選擇的任意擴展點n都有f(n)≤f*(s)
五、A*算法比較
定義 設A1和A2是兩個 A*算法,分別使用如下兩個估價函數:
f1(n)=g1(n)+h1(n)
f2(n)=g2(n)+h2(n)
其中,h1(n)和h2(n)是h*(n)的兩個下界.若對於所有的非目標節點n,都有h2(n)>h1(n),則稱算法A2比算法A1有較多的信息.
討論:啓發函數的啓發能力在於它所具有的啓發性信息。
1. 當h(n)≡0時,反映了啓發函數完全沒有啓發信息,要擴展較多的節點.
2. 在具有可採納性的前提下, 0≤h≤h*,h*定出了h的上界,當h越接近h*時,它的啓發能力就越大.(注意A*的h(n)和h*(n)應該來看是兩個東西,h*(n)是一個客觀事實,A*的h(n)是一個範圍0≤h(n)≤h*(n),根據這樣子來看兩個A*算法可以比較啓發能力,越近h*(n)啓發能力越大)
例 八碼難題的A*算法的比較.
圖3.7的估價函數:f1(n)=d(n),h1(n)≡0,採用寬度優先搜索 ;
圖3.8的估價函數:f2(n)=d(n)+w(n),h2(n)≡w(n).
對於所有非目標節點,有h2(n)>h1(n),因此,圖3.7所用算法不但比圖3.8所用算法有較多的信息,而且擴展的節點數要少。????不應該是3.8多?
定理6 如果A1和A2是兩個A*算法,算法A2比A1有較多的信息,且它們搜索同一個隱含圖。若該圖存在解路徑,當這兩個算法終止時,A2所擴展的每一節點也必被A1所擴展,即:
A2擴展的節點數≤A1擴展的節點數
六、單調限制及性質
定義 如果啓發函數h對任何節點ni和nj,只要nj是ni的後繼,都有
h(ni)-h(nj)≤c(ni, nj)
h(t)=0 (t是目標節點)
則稱啓發函數h滿足單調限制.
定理7 如果A*算法的啓發函數h滿足單調限制,則當算法A*選擇節點n擴展時,就已經發現了通向節點n的最佳路徑,即g(n)=g*(n).
定理8 如果A*算法啓發式函數h滿足單調限制,則A*所擴展的節點序列的估價函數值是非遞減的
A*算法小結
1. A*算法搜索隱含圖時,有解必停,且必停在最佳解路上;
2. 在滿足h (n) ≤h*(n)的前提下,啓發函數越大,其所包含的啓發信息越多,所擴展的節點越少;
3. 若啓發函數滿足單調限制,則每走一步都在最佳解路上,且估價函數不減,簡化了算法的第7步(調整指針).
七、算法A的啓發能力
定義 設A1和A2是兩個啓發式算法,它們分別使用估價函數f1和f2,如果在尋找解路徑的過程中,A1所用的計算費用比A2少,則稱A1比A2有較強的啓發能力,也可以稱估價函數f1比f2有較強的啓發能力.
影響算法A啓發能力的三個重要因素:(注意啓發信息和啓發能力的區別,啓發信息大不一定啓發能力強)
(1)算法A所找到的解路徑的費用。
(2)算法A在尋找這條解路徑的過程中所需要
擴展的節點數。
(3)計算啓發函數所需要的計算量。
Tips: h(n) ≤ h*(n) 保證了A*的可採納性,可採納性可能意味着算法需要擴展更多的節點,使總的費用提高。
Note1:若能保證高效(增強算法的啓發能力),則犧牲可採納性是可取的。
.
八、啓發能力的度量
1、搜索方法的啓發能力主要依賴於給定問題的具體因素。(影響因素)
2、判斷啓發能力的強弱主要是憑經驗而不是憑計算。(判斷條件)
3、某些實現上的度量是可計算的。這些度量不能完全決定一個算法的啓發能力,在比較各種搜索算法的優劣時是很有用的。(度量作用)
啓發能力的一種度量爲 滲透度 :
滲透度是對一個搜索算法的搜索性能的度量,表示搜索集中指向某個目標的程度,而不
是在無關的方向上徘徊。
定義爲: P = L / T
其中,L是算法發現的解路徑的長度, T是算法在尋找這條解路徑期間所產生的節點數
(不包括初始節點,包括目標節點)
一般搜索的滲透度P<1 ;
無信息的搜索P<<1;
滲透度大,所產生的搜索樹向縱深發展;
滲透度小,所產生的搜索樹沿水平方向發展。
搜索算法的滲透度取決於問題的難度和算法的效率。
當最佳解路短時,可能有較高的滲透度;
當最佳解路長時,算法產生節點的數目將以更快的速度增加,可能有較低的滲透度。
滲透度有時並不能很好地反映搜索向目標方向發展的集中程度。
啓發能力的一種度量爲 有效分枝係數 :
有效分枝係數就是一棵搜索樹的平均分枝數.
設搜索樹的深度是L,算法所產生的總節點數爲T,有效分枝係數是B,則有
B+B2十…+BL=T
或
B(BL-1)/(B-1)=T
有效分枝係數與路徑的長度無關,可以利用這一事實預測不同深度的搜索所需產生的節點個數。
九、AO*算法可採納性(考試時常與四練習)
若s→N集存在解圖,當h(n)≤h*(n)且h(n)滿足單調限制條件時能找到最佳解圖,即在這種情況下,AO*具有可採納性,AO*算法一定。
15、剪枝例題
16、與/或圖搜索
A、與或圖定義:一個可分解的產生式系統定義一個隱含的與/或圖.圖的根節點表示產生式系統的初始狀態描述,連接符表示對一狀態描述應用產生式規則或把這一狀態描述分解成若干組成部分.
B、可分解產生式系統的任務:從隱含的與/或圖出發找出一個從根節點出發到終止節點集的解圖。
C、SOLVED節點
搜索過程還要標記能解節點(SOLVED),爲此給出如下定義:
能解節點(SOLVED)
①終止節點是能解節點;
②若非終止節點有“或”子節點時,其子節點有一能解,則該非終止節點是能解節點;
③若非終止節點有“與”子節點時,若其子節點均能解,則該非終止節點是能解節點。
17、AO*算法(一種可分解產生式系統的搜索策略)
- 兩個圖
G:搜索圖
G’:局部解圖(準部分解圖)(可能變化的)
- 兩個函數
h(n):啓發函數(靜態)對h*(n)的估計
q(n):費用函數(動態變化)
- 兩重循環
外層:從上向下擴展
內層:從下向上修改費用q值、標記指針
AO* Note:
(1)在第6步擴展節點n時,若不存在後繼節點(即陷入死衚衕),則可在第11步中對m(即n)賦一個高的q值,這個高的q值會依次傳遞到s,使得含有節點n的子圖具有高的q(s),從而排除了被當作候選局部解圖的可能性。
(2)如果一個與/或 圖存在解圖,如果對於圖中所有的節點n都有h(n)≤h*(n),並且啓發函數h滿足單調限制,則AO*算法必然終止於找出最佳解圖。(有條件的可採納性)
18、博弈樹搜索
雙人、具有完備信息博弈問題的特點:
(1)雙人對弈,對壘的雙方輪流走步。
(2)信息完備,對壘雙方所得到的信息是一樣的,不存在一方能看到,而另一方看不到的
情況。
(3)零和。即對一方有利的棋,對另一方肯定不利,不存在對雙方均有利、或均無利的棋。
對弈的結果是一方贏,另一方輸,或者雙方和棋。
雙人、具有完備信息博弈的實例有:一字棋、餘一棋、西洋跳棋、國際象棋、中國象棋、圍棋等。
博弈下的截圖實現一種取勝的策略就是搜索一個解圖的問題,解圖就代表一種完整的博弈策略。
缺點:對於簡單的遊戲,採用與尋找 AND/OR圖解圖相類似的技術是可以解決的.但是,對於複雜的遊戲,這種方法是根本行不通的.
靜態估值函數e(p):建立在該棋的各種知識和特徵上。對在一定深度處的節點所代表的局面 進行評價優劣的估計值.
極小極大原則
MAX節點在其MIN子節點的倒推值中選max;
MIN節點在其MAX子節點的倒推值中選min
倒推值
在極小極大過程中,第i層節點根據第i+1層節點的值使用極小極大原則而獲得的值。
極小極大過程存在的問題:
節點數將隨着搜索深度的增加呈指數增長。這極大地限制了極小極大搜索方法的使用。
解決方法:讓搜索樹的產生過程與靜態估值與返回值的過程同時進行,在搜索深度不變的情況下,利用已有的搜索信息減少生成的節點數,從而使搜索效率大爲提高。 ----α-β過程
(1)α剪枝:發生在MIN節點下的剪枝
(2)β剪枝:發生在MAX節點下的剪枝
剪枝效率:在使用相同存儲空間的條件下,α-β過程能把搜索深度擴大一倍.
小結:
博弈問題可用產生式系統來描述,求解過程也是一個對與/或圖進行搜索的問題。
針對雙人完備信息的博弈問題,通常可行的實用策略是搜索被限制在一定的範圍,搜索的目標是確定一步好棋,等對手回手後,再繼續搜索。MINIMAX就是按這種思想建立的過程,而α-β過程是MINIMAX過程的改進,並可提高效率。
第六章 歸結原理
1、Herbrand域
定義(Herbrand域)設S爲子句集,令H0是出現於子句集S的常量符號集。如果S中無常量符號出現,則H0由一個常量符號a組成。
對於i=1,2,…,令
Hi = Hi-1È{所有形如f(t1,…,tn)的項}
其中f(t1,…,tn)是出現在S中的所有n元函數符號,
tjÎ Hi-1,j=1,…,n.
稱Hi爲S的i級常量集,H¥ 稱爲S的Herbrand域,
簡稱S的H域
2、基
基:把對象中的變量用常量代替後得到的無變量符號出現的對象。基項、基項集、基原子、基原子集合、基文字、基子句、基子句集
子句是析取式 短語是合取式
3、原子集、Herbrand底
設S是子句集,形如P(t1,…,tn)的基原子集合,稱爲S的Herbrand底或S的原子集.
其中P(x1,…,xn)是出現於S的所有n元謂詞符號,t1,…,tn是S的H域中的元素.
4、基例
設S是子句集,C是S中的一個子句.用S的H域中元素代替C中所有變量所得到的基子句稱爲子句C的基例。
5、已知S= {Q(a)Ú~P(f(x)),~Q(b)Ú P(g(x,y))}, 求S的原子集, 分別給出Q(a)Ú~P(f(x)) , ~Q(b)Ú P(g(x,y))的一個基例。?????????????????????
理解:Q(),P()兩個裏面都是隻有一個元素,因此它們各自是一元謂詞,因爲有Q(a),Q(b),Q(f(a))…P(a),P(b),P(f(a)),P(g(a,a))…的形式作爲原子集中的元素
比如如下的例子
Q(y,f(y,a))裏面有a常量,但是不用管,f是個二元函數,就將其當成f(t1,t2)正常去替換就可以了
6、H解釋
定義(子句集的H解釋) 設S是子句集,H是S的H域,I*是S在H上的一個解釋.稱I*爲S的一個H解釋,如果I*滿足如下條件:
1) I*映射S中的所有常量符號到自身。
2)若f是S中n元函數符號,h1,…,hn是H中元素,則I*指定映射:
(h1,…,hn) ®f (h1,…,hn)
設A={A1,A2,…,An, … } 是S的原子集。於是S的一個H解釋I可方便地表示爲如下一個集合:
I* ={m1,m2,…,mn,…}
其中,
mi
- 謂詞邏輯中公式G的一個解釋I,是由非空區域D和對G中常量符號,函數符號,謂詞符號以下列規則進行的一組指定組成:
1. 對每個常量符號,指定D中一個元素;
2. 對每個n元函數符號,指定一個函數,即指
定Dn到D的一個映射;
3. 對每個n元謂詞符號,指定一個謂詞,即指
定Dn到{T,F}的一個映射。
例 S={P(x)ÚQ(x), R(f(y)) }
S的H域={a, f(a), f(f(a)), … }
S的原子集:
A={P(a), Q(a), R(a), P(f(a)), Q(f(a)), R(f(a)), … }
S的H解釋:
I1* ={ P(a), Q(a), R(a), P(f(a)), Q(f(a)), R(f(a)), … }
I2* ={ ~P(a), ~Q(a), R(a), P(f(a)), ~Q(f(a)), ~R(f(a)), … }
S={P(x)ÚQ(x), ~P(a), ~Q(b) },
求S的所有H解釋??
7、Herbrand解釋與普通解釋的關係
- 子句集S的H解釋是S的普通解釋。
- S的普通解釋不一定是S的H解釋:普通解釋不是必須定義在H域上,即使定義在H域上,也不一定是一個H解釋。
- 任取普通解釋I,依照I,可以按如下方法構造S的一個H解釋I*,使得若 S在 I下爲真則 S在I*下也爲真。
8、對應於I的H解釋I*
對應於I的H解釋I*是如下的一個H解釋:
任取S中n元謂詞符號P(x1,…,xn),
任取(h1,…,hn)ÎHn,規定
TI*(P(h1,…,hn))=TI(P(h1s,…,hns))
引理 如果某區域D上的解釋I滿足子句集S,
則對應於I的任意一個H解釋I*也滿足S。
9、只考慮子句集的H解釋是否夠用?
定理 子句集S恆假當且僅當S被其所有H解釋弄假。
證明: 必要性顯然。
充分性。假設S被其所有H解釋弄假,而S又是可滿足的。
設解釋I滿足S,於是由引理知,對應於I的H解釋I*也滿足S,矛盾.故S是不可滿足的.
從現在起,如不特別指出,提到的解釋都是指H解釋.
***思考:比如後面的語義樹,它是根據樹結構來找尋能夠弄假S的H解釋來證明不可滿足問題的,對於歸結原理裏面使用的謂詞邏輯,比如你在替換變量的時候其實也是一個在找尋H解釋的過程,只不過在那個情況下有的變量可以不用替換直接用歸結式或者表推演的形式~
結論
l)子句 C的基例 C’被解釋 I滿足,當且僅當
C’中的一個基文字L’出現在 I中.
2)子句C被解釋I滿足,當且僅當
C的每一個基例都被I滿足.
3)子句 C被解釋 I弄假,當且僅當
至少有一個C的基例C’被I弄假。
4)子句集S不可滿足,當且僅當
對每個解釋I,至少有一個S中某個子句C的基例C’被I弄假。
例子:
C=~P(x)ÚQ(f(x))
I1={~P(a),~Q(a),~P(f(a)),~Q(f(a)),~P(f(f(a))),~Q(f(f(a))),…}
I2={P(a),Q(a),P(f(a)),Q(f(a)),P(f(f(a))),Q(f(f(a))),…}
I3={P(a),~Q(a),P(f(a)),~Q(f(a)),P(f(f(a))),~Q(f(f(a))),…}
顯然,I1,I2滿足C,I3弄假C。
10、Herbrand定理
Herbrand定理是符號邏輯中一個很重要的定理.Herbrand定理就是使用語義樹的方法,把需要考慮無窮個H解釋的問題,變成只考慮有限個解釋的問題.
11、互補對
設 A是原子,兩個文字A和~A都是另一個的補,集合{A,~A}稱爲一個互補對.
12、Tautology,重言式: 含有互補對的子句
13、語義樹
14、完全語義樹
設A={A1,…,An,…}是子句集S的原子集.
S的一個語義樹是完全的,當且僅當
對於語義樹中每一個尖端節點N(即從N不再
生出節的那種節點),都有
Ai或~Ai有且僅有一個屬於I(N),i=1,…,k,…
例子:
幫助理解前面的L1…Ln |
謂詞邏輯下的完全語義樹,如果太複雜直接打省略號即可,注意裏面有Q(f(a))也就是說最多擴展完Q(f(a))後打省略號或者這種箭頭,當然想ppt這麼寫更加方便,不然擴展到Q(f(a))會寫不下並混亂 |
15、封閉語義樹相關概念
- 定義(失效點) 稱語義樹T中的節點N爲失效點,如果
(1)I(N)弄假S中某個子句的某個基例;
(2)I(N’)不弄假S中任意子句的任意基例,其中N’是 N的任意祖先節點。
- 定義(推理點)稱封閉語義樹的節點 N爲推理點,如果N的所有直接下降節點都是失效點.
16、使用Herbrand定理的機器證明過程
- Gilmore過程 指數複雜性,改進後得到D-P
- D-P過程(單文字規則 純文字規則 分裂規則)
17、歸結原理相關定理及其證明(可能考,理解即可)
A、定理 設C1和C2是兩個基子句, R(C1, C2) 是C1,C2的歸結式,則R(C1, C2)是C1和C2的邏輯結果。
證明: 設 C1=L ÚC1’, C2=~LÚC2’。於是
R(C1, C2) =C1’ ÚC2’
設I是C1和C2的一個解釋,且滿足C1也滿足C2。因爲L和~L中有一個在I下爲假,不妨設爲L。於是C1’非空,且在I下爲真。故R(C1, C2)在I下爲真。
Note:
邏輯結果的定義:如果C1 C2是真的,則R(c1,c2)是真的
B、定理
如果基子句集S是不可滿足的, 則存在從S推出空子句的歸結演繹
18、替換
A、定義(替換)一個替換是形如{t1/v1, … , tn/vn }的一個有限集合,其中vi是變量符號,ti是不同於vi的項。並且在此集合中沒有在斜線符號後面有相同變量符號的兩個元素,稱ti爲替換的分子,vi爲替換的分母。
例. {a/x, g(y)/y, f(g(b))/z}是替換;
{x/x}, {y/f(x)}, {a/x, g(y)/y, f(g(b))/y}不是替換;
基替換:當t1,…,tn是基項時,稱此替換爲基替換。
空替換:沒有元素的替換稱爲空替換,記爲e。
B、定義(改名) 設替換 s ={ t1/x1, … , tn/xn }
如果t1, … , tn是不同的變量符號,則稱s爲一個改
名替換,簡稱改名。
替換作用對象:表達式(項、項集、原子、原子集、
文字、子句、子句集)
基表達式:沒有變量符號的表達式。
子表達式:出現在表達式E中的表達式稱爲E的子
表達式。
例子:
E=P(x, y, z), q={y/x, z/y}
Eq=P(y, z, z). Eq¹P(z, z, z).
C、替換的乘積
定義(替換的乘積)設q ={ t1/x1, … , tn/xn },l ={ u1/y1, … , um/ym} 是兩個替換。將下面集合 { t1l/x1, … , tnl/xn , u1/y1, … , um/ym } 中任意符合下面條件的元素刪除:
1)ui/yi,當yiÎ{x1, … , xn }時;
2)til/xi,當til = xi 時。
如此得到一個替換,稱爲q與l的乘積,記爲q ×l。
例. 令 q ={f(y)/x, z/y}
l ={a/x, b/y, y/z}
於是得集合
{ t1l/x1, t2l/x2 , u1/y1, u2/y2 , u3/y3 }
= {f(b)/x, y/y, a/x, b/y, y/z }
q 與l的乘積爲:q ×l = {f(b)/x, y/z } note:q×l ¹ l×q
19、合一替換相關定義定理
- 定義(合一)稱替換q是表達式集合{E1,…,Ek}的 合一,當且僅當E1q=E2q=…=Ekq。
表達式集合{E1, … , Ek}稱爲可合一的,如果存在關於此集合的一個合一。
- 定義(最一般合一) 表達式集合{E1, … , Ek}的合一s 稱爲是最一般合一(most general unifier, 簡寫爲mgu),當且僅當對此集合的每一個合一q,都存在替換l,使得
- 例 S={P(x) Ú ~Q(x),~P(y), Q(b)}
{P(x),P(y)}可合一,q={a/x, a/y}是合一,
其mgu s={x/y},有替換 l={a/x},使
q=s×l= {x/y} ×{a/x}
理解:子句集S要合一需要有另一個S1子句集且形式和其一樣,然後再找差異集慢慢推;如果沒有則看子句的合一,S中有若干子句,不同子句之間看是否能合一,若不能則看S中的原子是否能合一,這時找出了P(x)這一謂詞,P(x),P(y)是兩個原子,因爲內部的x,y
W不可合一的三種情況
(1)若D中無變量符號爲元素,則W是不可合一的。
- 例. W={P(f(x)), P(g(x))}
D={f(x), g(x)}
(2)若D中有奇異元素和非奇異元素,則W是不可合一的。
- 例. W={P(x), P(x, y)}
D={⊙, y}
(3)若D中元素有變量符號x和項t,且x出現在t中,則W是不可合一的。
- 例. W={P(x), P(f(x))}
D={x, f(x)}
在這種情況下不能合一,我們可以考慮改名然後進行合一,注意,單純的這倆沒有必要進行合一,是考慮還有其他的合一項,注意一個例子!!!
- 換名:
- {P(f(x), x), P(x, a)};
- 如果不換名:D={f(x), x}.
- 注意f(x),x在差異集合中不可以合一
- 換名: {P(f(y), y), P(x, a)};
- 換名之後的差異項必然是x和f(y)不會進入內部找尋x,y
- 只有說f(x),f(u)這樣出現在兩個謂詞中才會用到x,u是差異集合因爲會根據f無差異網內推到x,u有差異,上面的f(x),x不可合一不是因爲f內是x,x與x無差異導致的不可合一,而是定義出來的它就是不可合一的,與尋找差異項的問題無關
- mgu: {f(a)/x, a/y}
合一算法(Unification algorithm)
步驟1:置 k=0, Wk=W, sk=e
步驟2:若Wk只有一個元素,則停止,sk是W的最一般合一;
否則,找出Wk的差異集合Dk。
步驟3:若Dk非奇異,Dk中存在元素vk和tk,其中vk是變量符號,並且 不出現在tk中,則轉步驟4;
否則,算法停止,W是不可合一的。
步驟4:令 sk+1=sk×{tk/vk},Wk+1=Wk (注:Wk+1=W )
步驟5:置 k=k+1,轉步驟2。
例. 令 W={Q(f(a), g(x)), Q(y, y)}, 求W的mgu。
若令W={Q(f(a), g(x)), Q(y, z)}, W是否可合一?
例 令 W= {P(a, x, f(g(y))), P(z, f(z), f(u))},求出W的mgu。
20、歸結原理前要概念:因子
定義(因子) 如果子句C中,兩個或兩個以上的文字有一個最一般合一s,則Cs稱爲C的因子;
如果Cs是單元子句,則Cs稱爲C的單因子。
例. C=P(x) Ú P(f(y)) Ú ~Q(x)
令 s={f(y)/x},於是
Cs= P(f(y)) Ú ~Q(f(y))
是C的因子。
21、二元歸結式
定義 設C1, C2是兩個無公共變量!!!的子句(稱爲親本子句),
L1, L2分別是C1, C2中的兩個文字。
如果L1和~L2有最一般合一s ,則子句
(C1s- {L1s}) È ( C2s- {L2s})
稱爲C1和C2的二元歸結式,L1和L2稱爲歸結文字。
例. 設C1=P(x) ÚQ(x), C2=~P(a) ÚR(x)
將C2中x改名爲y。取L1=P(x), L2=~P(a), s={a/x},
於是(C1s- {L1s}) È ( C2s- {L2s})
=({P(a), Q(a)}-{P(a)}) È ({~P(a), R(y)}-{~P(a)})
={Q(a), R(y)}= Q(a)Ú R(y) ----C1和C2的二元歸結式.
Note:注意雖然是對P()合一但是應用這個合一替換的但是Q(x)中的x要跟着一起替換,注意他是不會改變之前的意義的
注意事項:
在謂詞邏輯中,對子句進行歸結推理時,要注意
的幾個問題:
(1)若被歸結的子句C1 和C2中具有相同的變元時,需要將其中一個子句的變元更名,否則可能無法合一,從而沒有辦法進行歸結。
(2)在求歸結式時,不能同時消去兩個互補文字對,消去兩個互補文字對所得的結果不是兩個親本子句的邏輯推論。
例.設C1=P(x) Ú~Q(b), C2=~P(a) ÚQ(y)ÚR(z)
求C1和C2的二元歸結式.,只能消去一個。不能消去兩個,如果該歸結式還想繼續歸結則和其他的子句進行歸結!
(3)如果在參加歸結的子句內含有可合一的文字,則在進行歸結之前,應對這些文字進行合一,以實現這些子句內部的化簡。
例. 設
C1=P(x) ÚP(f(y)) ÚR(g(y))
C2=~P(f(g(a))) ÚQ(b)
C1的因子C1’= P(f(y)) ÚR(g(y))。於是C1’和C2的二元歸結式,從而也是C1和C2的歸結式爲
R(g(g(a))) ÚQ(b)
Note:子句中有因子先化簡因子此時得到子句的因子表達式然後再與其他的子句中的文字進行合一,使用歸結原理
幾種常用的歸結的改進方式
一、支架集歸結
定義子句集S的子集T稱爲S的支架集,如果(S-T)是可滿足的。一個支架集歸結是一個不同時屬於(S-T)的兩個子句的歸結。
二、語義歸結
- 想法一
用子句集S的語義解釋將S分成兩部分S1,S2,要求同一部分裏的子句不允許進行歸結,這樣就阻止了很多無用子句的產生。
S1:S中被I弄假的子句組成的集合;
S2:S中被I滿足的子句組成的集合。
上例: 若取I={~P,~Q,~R},
(S:(1) ~P∨~Q∨R (2) P∨R (3) Q∨R (4) ~R)
則 S1={(2),(3)} , S2={(1),(4)}
阻止了(1),(4)的歸結。
- 想法二
使用謂詞符號的順序,要求S1中的子句的歸結文字是該子句中最大謂詞符號。
上例: 若令P>Q>R,
則阻止了(2),(4)之間及 (3),(4)之間的歸結。
三、PI演繹:從S出發的一個演繹稱爲PI演繹,當且僅當演繹中的每一個子句或是S中子句,或是一個PI-歸結式。
定義(語義互撞clash) 設I是子句集S的一個解釋,P是S中謂詞符號的一個順序,有限子句序列 (E1,…,Eq,N) (q³1)稱爲關於P和I的語義互撞(簡稱PI-互撞),當且僅當E1, … , Eq, N 滿足下面條件:
-
- E1, … , Eq在I下爲假;(E1, … , Eq稱爲該互撞的電子)
- 令R1=N(該互撞的核),對每個 i=1, … ,q,存在Ri和Ei的歸結式Ri+1。
- Ei中的歸結文字是Ei中最大謂詞符號。
- Rq+1在I下爲假。
於是,Rq+1稱爲此PI-互撞的PI-歸結式。
四、線性歸結
- 定義(線性歸結演繹)設S是一個子句集,C0是S中的一個子句。以C0爲頂子句,從S到Cn的線性歸結演繹是如下一個演繹:
- 對於 i=0, 1, … ,n-1,Ci+1是Ci和Bi的歸結式。
- 每個Bi或者屬於S,或者是一個Cj,其中j< i。
五、輸入歸結
- 定義:邊子句都屬於S的線性歸結演繹稱爲輸入歸結演繹.
(重點在邊子句屬於S,就是E部分的都是S中的子句即可)
- 結論:輸入歸結在Horn集上完備。
補充:Horn邏輯
- 定義 如果一個子句中最多有一個正文字,則稱此子句爲Horn子句;由Horn子句構成的子句集,稱爲Horn集。
- 三種類型的Horn子句
(1)一個單一原子——常被稱爲一個“事實”。
(2)一個蘊涵——常被稱爲一個“規則”——它的前件由一個肯定文字的合取組成,而它的後件由一個肯定的文字組成。
(3)一個否定文字的集合——寫成帶有一個由肯定文字的合取組成的前件和一個空後件的蘊涵形式。常稱爲一個“目標”。
六、單元歸結
- 定義:若進行歸結的兩個親本子句中,有一個是單元子句或者是一個子句的單元因子,則稱這種歸結爲單元歸結。
結論:單元歸結對Horn子句集完備
七、鎖歸結
- 定義 設C是子句,若將C中每一個文字都附上一個整數,則稱子句C已配鎖。這些整數稱爲這些文字的鎖。
- 定義 如果已配鎖子句C中有多於一個的相同文字,則保存這些文字中有最小鎖的一個,而將其餘的刪除。這種作法稱爲配鎖子句中關於相同文字的合併規則。
- 定義 設C1和C2是兩個配鎖子句,R(C1, C2)是C1和C2的歸結式,如果C1和C2中的歸結文字分別是C1和C2中帶有最小鎖的文字,則稱R(C1, C2)爲C1和C2 的鎖歸結式
- 結論:鎖歸結完備
例. 設S是如下配鎖子句集
- 1P∨2Q
- 3P∨4~Q
- 6~P∨5Q
- 8~P∨7~Q
八、表推演方法(Tableau)
多看幾眼 |
擴展
九、擴展規則推理方法
互補對爲0!!!
練習:
設有如下子句集:
S={~I(x)∨R(x), I(a), ~R(y)∨L(y), ~L(a)}
(1)使用水平浸透法證明S不可滿足。
(2)設支架集T={~I(x)∨R(x)},寫出從S推出空子句的支架集演繹(用支架集歸結法證明S不可滿足)。
22、求解SAT的DP算法的主要框架是DPLL框架,在此基礎上改進的算法有DPLL、CDCL、LA算法,目前大多數的SAT求解器採用衝突驅動子句學習和前向搜索這兩種改進技術。