在引出本章的內容之前先介紹一個概念
知識
知識的概念
知識(Knowledge)是人們在改造客觀世界的實踐中形成的對客觀事物(包括自然的和人造的)及其規律的認識,包括對事物的現象、本質、狀態、關系、聯系和運動等的認識。
經過人的思維整理過的信息、數據、形象、意象、價值標准以及社會的其他符號產物,不僅包括科學技術知識----知識中最重要的部分,還包括人文社會科學的知識、商業活動、日常生活和工作中的經驗和知識,人們獲取、運用和創造知識的知識,以及面臨問題做出判斷和提出解決方法的知識。
知識是把有關的信息關聯在一起,形成的關於客觀世界某種規律性認識的動態信息結構。
知識=事實+規則+概念
事實就是指人類對客觀世界、客觀事物的狀態、屬性、特征的描述,以及對事物之間關系的描述。
規則是指能表達在前提和結論之間的因果關系的一種形式;
概念主要指事實的含義、規則、語義、說明等。
知識的分類
1、 按知識的作用范圍分:
(1)常識性知識:通用性知識,適用於所有領域;
如一年有四個季節。
(2)領域性知識:面向某個具體領域的知識,是專業性知識,如疾病診斷的知識。
2 、按知識的作用及表示划分:
(1)事實性知識:用於描述領域內的有關概念、事實、事物的屬性及狀態;
如:太陽從東方升起
(2)過程性知識:與領域相關的、用於指出如何處理與問題相關的信息以及求得問題的解;
如:如果信道暢通,請發綠色信號
(3)控制性知識:又稱為深層知識及元知識,是關於如何運用已有的知識進行問題求解的知識,也稱為關於知識的知識。
如: 問題求解過程中的處理方法、搜索策略、控制結構
3 、按知識的確定性來分:
(1)確定性知識:指其邏輯值為真或假的知識,是精確性知識;
如:他是男的
(2)不確定性知識:是不精確、不完全、模糊性知識的總稱。
如:今天陰天,可能要下雨
4 、按人類的思維及認識方法來分:
(1)邏輯性知識:是反映人類邏輯思維過程的知識,一般具有因果關系或難以精確描述的特點,是人類的經驗性知識和直觀感覺;
如:人的為人處事的經驗與風格
(2)形象性知識:通過事物的形象建立起來的知識。
如:什么是牛?
5、 知識的獲取方式來分:
(1)顯性知識:指可通過文字、語言、圖形、聲音等形式編碼記錄和傳播的知識;
如:教材、音視頻光盤。
(2)隱性知識:指人們長期實踐中積累獲得的知識,不易用顯性知識表達的知識。
如:每個人都有不同的審美觀。
不管從什么角度去划分知識,要用機器對知識進行處理,都必須以適當的形式對知識進行表示,這就是知識表示技術。
在選擇知識表示的方法時應考慮幾個因素:
(1)能否充分表示相關領域的知識;
(2)是否有利於對知識的利用;
(3)是否便於知識的組織和管理;
(4)是否便於理解和實現。
一、產生式規則
1、產生式規則
產生式(Production)一詞, 首先是由美國數學家波斯特(E.Post)提出來的。波斯特根據替換規則提出了一種稱為波斯特機的計算模型, 模型中的每一條規則當時被稱為一個產生式。 后來, 這一術語幾經修改擴充, 被用到許多領域。例如, 形式語言中的文法規則就稱為產生式。產生式也稱為產生式規則, 或簡稱規則。
產生式的一般形式為
前件〉→〈后件〉
其中, 前件就是前提, 后件是結論或動作,前件和后件可以是由邏輯運算符AND、OR、NOT組成的表達式。
產生式規則的語義是: 如果前提滿足,則可得結論或者執行相應的動作, 即后件由前件來觸發。 所以, 前件是規則的執行條件, 后件是規則體。
例如, 下面就是幾個產生式規則:
(1) 如果銀行存款利率下調, 那么股票價格上漲。
(2) 如果爐溫超過上限, 則立即關閉風門。
(3) 如果鍵盤突然失靈, 且屏幕上出現怪字符, 則是病毒發作。
(4) 如果膠卷感光度為200, 光線條件為晴天, 目標距離不超過5米, 則快門速度取250, 光圈大小取f16。
可以看出,產生式與邏輯蘊含式非常相似。是的, 邏輯蘊含式就是產生式, 但它只是一種產生式。除邏輯蘊含式外, 產生式還包括各種操作、規則、變換、算子、函數等等。 比如上例中的(2)是一個產生式, 但並不是一個邏輯蘊含式。 概括來講, 產生式描述了事物之間的一種對應關系(包括因果關系和蘊含關系), 其外延十分廣泛。例如, 圖搜索中的狀態轉換規則和問題變換規則就都是產生式規則。另外還有程序設計語言的文法規則、邏輯中的邏輯蘊含式和等價式、數學中的微分和積分公式、化學中分子結構式的分解變換規則等等, 也都是產生式規則;甚至體育比賽中的規則、國家的法律條文、 單位的規章制度等等, 也都可以表示成產生式規則。
在自然語言表達中,人們廣泛使用的各種“原因→結果”,“條件→結論”,“前提→操作”,“事實→進展”,“情況→行為”等結構,都可歸結為產生式的知識表達形式。
例如,
天下雨,地上濕; “原因→結果”
如果把水加熱到00以上,冰就會溶化為水;“條件→結論”
夜來風雨聲,花落知多少;“事實→進展”
若能找到一根合適的杠桿,就能撬起那座大山;“前提→操作”
才飲長沙水,又食武昌魚;“事實→進展”
剛才開機了,意味着發出了捕獲目標圖像的信號。“情況→行為”
【注意】:謂詞邏輯中的蘊涵式與產生式的基本形式相似,事實上,蘊涵式只是產生式的一種特殊情況。理由如下:
(1)蘊涵式只能表示精確知識,其值非“真”即“假”,而產生式不僅可以表示精確知識,而且還可以表示不精確知識。
例如,MYCIN中有如下產生式:
IF 本微生物的染色斑是革蘭氏陰性 本微生物的形狀呈桿狀 病人是中間宿主 THEN 該微生物是綠膿桿菌,可信度為CF=0.6
CF表示知識的強度,謂詞邏輯中的蘊涵式不可以這樣做。
(2)用產生式表示知識的系統中,“事實”與產生式的“前提”中所規定的條件進行匹配時,可以是“精確匹配”,也可以是基於相似度的“不精確匹配”,只要相似度落入某個預先設定的范圍內,即可認為匹配。但對謂詞邏輯的蘊涵式而言,其匹配必須是精確的。
2、基於產生式規則的推理模式
由產生式的涵義可知,利用產生式規則可以實現有前提條件的指令性操作, 也可以實現邏輯推理。實現操作的方法是當測試到一條規則的前提條件滿足時, 就執行其后部的動作。 這稱為規則被觸發或點燃。利用產生式規則實現邏輯推理的方法是當有事實能與某規則的前提匹配(即規則的前提成立)時, 就得到該規則后部的結論(即結論也成立)。
實際上,這種基於產生式規則的邏輯推理模式, 就是邏輯上所說的假言推理(對常量規則而言)和三段論推理(對變量規則而言), 即:
這里的大前提就是一個產生式規則, 小前提就是證據事實。
其實, 我們也可以把上面的有前提條件的操作和邏輯推理統稱為推理。那么,上面的式子也就是基於產生式規則的一般推理模式。這就是說, 產生式系統中的推理是更廣義的推理。
二、產生式系統
1、系統結構
產生式系統由三部分組成: 產生式規則庫、 推理機和動態數據庫, 其結構如圖所示。
產生式系統的結構
產生式規則庫亦稱產生式規則集, 由領域規則組成, 在機器中以某種動態數據結構進行組織。一個產生式規則集中的規則, 按其邏輯關系, 一般可形成一個稱為推理網絡的結構圖。
推理機亦稱控制執行機構,它是一個程序模塊,負責產生式規則的前提條件測試或匹配,規則的調度與選取,規則體的解釋和執行。即推理機實施推理, 並對推理進行控制, 它也就是規則的解釋程序。
動態數據庫亦稱全局數據庫、綜合數據庫、工作存儲器、上下文、黑板等等,它是一個動態數據結構,用來存放初始事實數據、中間結果和最后結果等。
2、運行過程
產生式系統運行時, 除了需要規則庫以外, 還需要有初始事實(或數據)和目標條件。目標條件是系統正常結束的條件, 也是系統的求解目標。產生式系統啟動后, 推理機就開始推理, 按所給的目標進行問題求解。
推理機的一次推理過程可如圖所示。
推理機的一次推理過程
一個實際的產生式系統, 其目標條件一般不會只經一步推理就可滿足, 往往要經過多步推理才能滿足或者證明問題無解。 所以, 產生式系統的運行過程,就是推理機不斷運用規則庫中的規則, 作用於動態數據庫, 不斷進行推理並不斷檢測目標條件是否滿足的過程。當推理到某一步, 目標條件被滿足, 則推理成功, 於是系統運行結束;或者再無規則可用, 但目標條件仍未滿足, 則推理失敗, 當然系統也運行結束。
由上所述, 產生式系統的運行過程也就是從初始事實出發, 尋求到達目標條件的通路的過程。 所以, 產生式系統的運行過程也是一個搜索的過程。但一般把產生式系統的整個運行過程也稱為推理。那么, 一個產生式系統啟動后,從哪兒開始推理? 下面我們就回答這個問題。
3、控制策略與常用算法
產生式系統的推理可分為正向推理和反向推理兩種基本方式。簡單來講, 正向推理就是從初始事實數據出發, 正向使用規則進行推理(即用規則前提與動態數據庫中的事實匹配, 或用動態數據庫中的數據測試規則的前提條件, 然后產生結論或執行動作),朝目標方向前進;反向推理就是從目標出發, 反向使用規則進行推理(即用規則結論與目標匹配, 又產生新的目標, 然后對新目標再作同樣的處理),朝初始事實或數據方向前進。下面我們給出產生式系統正向推理和反向推理的常用算法:
a. 正向推理
正向推理算法一:
步1 將初始事實/數據置入動態數據庫。
步2 用動態數據庫中的事實/數據, 匹配/測試目標條件, 若目標條件滿足, 則推理成功, 結束。
步3 用規則庫中各規則的前提匹配動態數據庫中的事實/數據, 將匹配成功的規則組成待用規則集。
步4 若待用規則集為空, 則運行失敗, 退出。
步5 將待用規則集中各規則的結論加入動態數據庫, 或者執行其動作, 轉步2。
可以看出, 隨着推理的進行, 動態數據庫的內容或者狀態在不斷變化。如果我們把動態數據庫的每一個狀態作為一個節點的話, 則上述推理過程也就是一個從初始狀態(初始事實/數據)到目標狀態(目標條件)的狀態圖搜索過程。 如果我們把動態數據庫中每一個事實/數據作為一個節點的話, 則上述推理過程就是一個“反向”(即自底向上)與或樹搜索過程。
正向推理的動態數據庫
例6.1 動物分類問題的產生式系統描述及其求解。
設由下列動物識別規則組成一個規則庫, 推理機采用上述正向推理算法, 建立一個產生式系統。該產生式系統就是一個小型動物分類知識庫系統。
規則集:
r1: 若某動物有奶, 則它是哺乳動物。
r2: 若某動物有毛發, 則它是哺乳動物。
r3: 若某動物有羽毛, 則它是鳥。
r4: 若某動物會飛且生蛋, 則它是鳥。
r5: 若某動物是哺乳動物且有爪且有犬齒且目盯前方, 則它是食肉動物。
r6: 若某動物是哺乳動物且吃肉, 則它是食肉動物。
r7: 若某動物是哺乳動物且有蹄, 則它是有蹄動物。
r8: 若某動物是有蹄動物且反芻食物, 則它是偶蹄動物。
r9: 若某動物是食肉動物且黃褐色且有黑色條紋, 則它是老虎。
r10: 若某動物是食肉動物且黃褐色且有黑色斑點, 則它是金錢豹。
r11: 若某動物是有蹄動物且長腿且長脖子且黃褐色且有暗斑點, 則它是長頸鹿。
r12: 若某動物是有蹄動物且白色且有黑色條紋, 則它是斑馬。
r13: 若某動物是鳥且不會飛且長腿且長脖子且黑白色, 則它是駝鳥。
r14: 若某動物是鳥且不會飛且會游泳且黑白色, 則它是企鵝。
r15: 若某動物是鳥且善飛且不怕風浪, 則它是海燕。
規則集形成的部分推理網絡
再給出初始事實:
f1:某動物有毛發。
f2:吃肉。
f3:黃褐色。
f4:有黑色條紋。
目標條件為: 該動物是什么?
易見, 該系統的運行結果為: 該動物是老虎。其推理樹如圖所示。
關於“老虎”的正向推理樹
b. 反向推理
反向推理算法:
步1 將初始事實/數據置入動態數據庫, 將目標條件置入目標鏈。
步2 若目標鏈為空, 則推理成功, 結束。
步3 取出目標鏈中第一個目標, 用動態數據庫中的事實/數據同其匹配, 若匹配成功, 轉步2。
步4 用規則集中的各規則的結論同該目標匹配, 若匹配成功,則將第一個匹配成功且未用過的規則的前提作為新的目標, 並取代原來的父目標而加入目標鏈, 轉步3。
步5 若該目標是初始目標, 則推理失敗, 退出。
步6 將該目標的父目標移回目標鏈, 取代該目標及其兄弟目標, 轉步3。
對於例6.1中的產生式系統, 改為反向推理算法, 則得到下圖所示的推理樹。
關於“老虎”的反向推理樹
可以看出, 與正向推理不同, 這次的推理樹是從上而下擴展而成的, 而且推理過程中還發生過回溯。
反向推理也稱為后向推理、反向鏈、目標驅動的推理等。
從上面的兩個算法可以看出,正向推理是自底向上的綜合過程, 而反向推理則是自頂向下的分析過程。
除了正向推理和反向推理外,產生式系統還可進行雙向推理。雙向推理就是同時從初始數據和目標條件出發進行推理, 如果在中間某處相遇, 則推理搜索成功。
c. 沖突消解策略
上述正向推理算法中, 對所有匹配成功的規則都同時觸發啟用。所以, 它實現的搜索是窮舉式的樹式盲目搜索。 下面我們給出一個正向推理的啟發式線式搜索算法。
正向推理算法二:
步1 將初始事實/數據置入動態數據庫。
步2 用動態數據庫中的事實/數據, 匹配/測試目標條件, 若目標條件滿足, 則推理成功, 結束。
步3 用規則庫中各規則的前提匹配動態數據庫中的事實/數據, 將匹配成功的規則組成待用規則集。
步4 若待用規則集為空, 則運行失敗, 退出。
步5 用某種策略,從待用規則集中選取一條規則, 將其結論加入動態數據庫,或者執行其動作, 撤消待用規則集, 轉步2。
可以看出,該算法與前面的算法僅在步5有所差別。但它已是不可回溯的線式搜索了。該算法的啟發性表現在“用某種策略, 從待用規則集中選取一條規則”。這種選取策略, 也稱為“沖突消解”策略。因為這時可用規則集中的規則都可觸發執行, 但只取其中之一, 因而就產生了沖突或競爭。所以,沖突消解策略對正向推理有重要意義。
常用的沖突消解策略有:優先級法(優先級高者優先)、 可信度法(可信度高者優先)、代價法(代價低者優先)及自然順序法等。當然, 要使用優先級法、可信度法、代價法等策略時, 須事先給規則設定相關的參數, 即優先級、可信度、代價等。
可以看出,上述的兩個推理算法的“啟發”性就體現在沖突消解策略中。如果再采用優先級、可信度、代價等沖突消解策略, 則就是啟發式搜索;但如果采用自然順序法,則就是一種盲目碰撞搜索。
產生式系統的推理方式、搜索策略及沖突消解策略等, 一般統稱為推理控制策略, 或簡稱控制策略。一個產生式系統的控制策略就體現在推理機的算法描述中。
4、程序實現
a. 產生式規則的程序語言實現
上面我們對產生式的討論, 只是用自然語言進行描述並僅在概念層次上進行闡述, 而並未涉及它的具體結構和程序語言實現問題。 現在討論產生式規則的程序語言實現問題。
首先, 討論產生式規則的結構問題。一般來講, 產生式規則的前提和結論部分可以是一個復雜的邏輯表達式, 但為了使表達簡單規范, 且便於推理, 在實踐中人們往往把規則的前提部分作成形如
條件1 AND 條件2 AND … AND 條件n
或
條件1 OR 條件2 OR … OR 條件m
的形式(其中的條件可以帶否定詞);
把規則結論部分作成形如
斷言1/動作1 AND 斷言2/動作2 AND … AND 斷言k/動作k
或
斷言1/動作1 OR 斷言2/動作2 OR … OR 斷言k/動作k
的形式,或者進一步簡化成
斷言/動作
即僅有一項的形式。
由於含OR關系的規則也可以分解為幾個不含OR關系的規則, 所以, 產生式規則也可僅取下面的一種形式:
條件1 AND 條件2 AND … AND 條件n→斷言/動作
即前件是若干與關系的條件, 后件僅有一個斷言或動作。
對規則作進一步細化。其條件、斷言和動作都應該是陳述句。所以, 它們可以用n元謂詞(或子句)形式表示, 或者用 n元組的形式表示, 如“對象-屬性-值”三元組,“屬性-值”二元組,或僅有“值”(符號、字符串或數值)的一元組等, 而且謂詞和元組中的項可以是常量、變量或復合項。 當然, 對於條件還可以用通常的關系式表示。如果規則解釋程序(即推理機)不能直接支持上述的謂詞或元組表示形式, 那么,可用通常的記錄、數組、結構、函數等數據結構來實現規則中的條件和斷言, 用通常的賦值式、運算式、函數、過程等形式實現規則中的動作。
至於規則的語言表示是否一定要有“IF-THEN”, 或者“AND”、 “OR”等連接符, 這倒不一定。 但原則是, 在程序執行時必須能體現出規則前提和結論的對應關系, 必須能體現出前提和結論中的邏輯關系。 例如, 我們完全可以用一個二元組
(〈前件〉, 〈后件〉)
表示一個產生式規則。
上面我們給出了產生式規則在程序中的具體表示方法。 但必須指出的是, 產生式規則的程序語言形式與規則的解釋程序(即推理機)密切相關。 就是說, 規則的解釋程序與規則的語言形式必須是相符的、一致的。所以,一般不能單方面地孤立地談論規則的語言表示形式, 而要與解釋程序統一考慮。
這樣, 就有兩種情況:一種是先確定規則的語言表示形式, 再根據規則形式設計規則解釋程序(推理機);另一種是對已有的解釋程序(推理機), 設計規則表示形式(當然只能采用推理機所約定的規則形式)。
例如, 在PROLOG程序中要表示產生式規則, 至少有兩種形式:
(1) 用PROLOG的規則表示產生式規則。 (2) 用PROLOG的事實表示產生式規則。
對這兩種表示, 對應的推理機是不一樣的。若用方法(1), 則一般就不必編寫顯式的推理機程序, 因為對於這種形式的規則, PROLOG語言的翻譯程序就是它的推理機。但若用方法(2), 則就必須用PROLOG語言編寫顯式的推理機程序。
例6.3 把上一節例6.1中給出的產生式規則用PROLOG的規則可表示如下:
animal_is(″老虎″):-
it_is(″食肉動物″),
fact(″黃褐色″),
fact(″有黑色條紋″).
it_is(″食肉動物″):-it_is1(″哺乳動物″),
fact(″有爪″),
fact(″有犬齒″),
fact(″目盯前方″).
it_is(″食肉動物″):-it_is1(″哺乳動物″),
fact(″吃肉″).
it_is1(″哺乳動物″):-fact(″有奶″).
it_is1(″哺乳動物″):-fact(″有毛發″).
對於這種規則表示形式, 可以不用再編寫推理機程序, 而可直接利用PROLOG自身的推理機,進行推理。
例如,當再給出如下的事實:
fact(″黃褐色″).
fact(″有黑色條紋″).
fact(″吃肉″).
fact(″有奶″).
和目標:
animal_is(Y).
則程序運行后的結果就是:
Y=老虎
但如果把上面的規則表示成如下的形式:
rule([″食肉動物″, ″黃褐色″, ″有黑色條紋″], ″老虎″).
rule([″哺乳動物″, ″有爪″, ″有犬齒″, ″目盯前方″], ″食肉動物″).
rule([″哺乳動物″, ″吃肉″], ″食肉動物″).
rule([″有奶″], ″哺乳動物″).
rule([″有毛發″], ″哺乳動物″).
則就需要用PROLOG語言編寫一個推理機程序。 否則, 無法實施基於上述規則的推理。
還需說明的是, 並非凡是用PROLOG規則表示的產生式規則, 都可直接使用PROLOG的推理機。例如,
rule(X, Y):-Y=X+1.
這是一個含變量的規則, 其中X為前提, Y是結論。也就是說, 在推理時是把rule(X,Y)作為規則使用的。顯然, 對於這種形式的規則, 仍然需要重新編寫推理機。
b. 規則庫的程序實現
規則庫的程序實現分為內存和外存兩個方面。 在內存中規則庫可用鏈表實現, 在外存則就是以規則為基本單位的數據文件。但若用PROLOG程序, 對於用PROLOG的規則表示的產生式規則,規則庫就是程序的一部分; 對於PROLOG事實表示的規則, 則規則庫在內存就是動態數據庫, 在外存就是數據庫文件。
還需說明的是, 對於規則庫實際上還需配一個管理程序, 即知識庫管理系統, 專門負責規則及規則庫的各項管理工作。 知識庫管理系統的設計也與規則的表示形式密切相關。
c. 動態數據庫的程序實現
動態數據庫由推理時所需的初始事實數據、推理的中間結果、 最后結果以及其他控制或輔助信息組成。這些事實數據的具體表示方法與上面所述的規則條件與結論的語言表示方法基本一樣, 區別就是動態數據庫中的事實數據中不能含有變量。 動態數據庫在內存可由(若干)鏈表實現並組成。在PROLOG程序中實現動態數據庫,則可不必編寫鏈表程序, 而利用PROLOG提供的動態數據庫直接實現。
d. 推理機的程序實現
推理機的程序實現, 除了依據某一控制策略和算法編程外, 一般來說, 程序中還應具有模式匹配與變量的替換合一機制。 因為模式匹配是推理的第一步, 同時規則中一般都含有變量, 而變量的匹配必須有替換合一機制的支持。當然, 要實現合一, 就要用合一算法。 那么, 前面歸結推理中的合一算法, 對產生式系統也是適用的(如果不是謂詞公式合一, 則需稍作修改)。
上面我們全面介紹了產生式系統的程序實現方法。最后值得一提的是, 由上所述可以看到: PROLOG的規則恰好能直接表示產生式規則, PROLOG的事實也恰好能表示產生式系統中的事實, PROLOG的動態數據庫也剛好可用來實現產生式系統的動態數據庫, 程序中的目標也就是產生式系統的運行目標, PROLOG的翻譯程序本身就是一個推理機。這就是說, PROLOG語言本身恰好就是一個產生式系統框架或實現工具。 於是, 若用PROLOG實現產生式系統, 則程序員僅需把問題域中的產生式規則用PROLOG的規則表示, 把推理所需證據事實用PROLOG的數據庫謂詞表示, 再給出推理目標即可。
最后需指出的是, 除了PROLOG語言外, LISP語言也是描述產生式規則,實現產生式系統的常用語言。另外, 還有幾種產生式系統的專用語言,如OPS5、CLIPS等, 都是專門的產生式系統語言。用這些語言建立產生式系統,不必編寫推理機程序, 只需按語言的規則語法建立規則庫, 再給出初始事實和推理目標即可。
5、產生式系統與問題求解
分析前面給出的兩個正向推理算法, 可以看出, 它們只能用於解決邏輯推理性問題。那么, 如何用正向推理來求解規划性問題呢? 如果要用正向推理求解規划性問題, 則上述算法中至少還需增加以下功能:
(1) 記錄動態數據庫狀態變化的歷史, 這就需要增設一個CLOSED表。
(2) 若要回溯, 則還需保存與每個動態數據庫狀態對應的可用規則集。因為動態數據庫狀態與可用規則集實際是一一對應的。 當回溯到上一個動態數據庫狀態(節點)后,需從其可用規則集中重新選取一條規則。
(3) 要進行樹式搜索,還需設置一個OPEN表, 以進行新生動態數據庫的狀態保存和當前動態數據庫狀態的切換。
(4) 還要考慮一條規則是否只允許執行一次。若是, 則要對已執行了的規則進行標記。但這樣以來, 產生式系統的推理算法就與第 3 章的圖搜索算法相差無幾了。下面我們再將產生式系統與圖搜索(含狀態圖搜索和與或圖搜索)中的有關概念作一對比(如表 6.1所示)。
可以看出,二者幾乎是一回事。 要說差別的話, 圖搜索主要着眼於搜索算法, 描述了問題求解的方法, 而產生式系統則主要着眼於知識, 並給出了實施這種方法的一種計算機程序系統的結構模式。這樣, 問題求解、 圖搜索和產生式系統三者的關系是: 問題求解是目的, 圖搜索是方法, 產生式系統是形式。
既然基於產生式系統的推理就是圖搜索,那么, 前面關於圖搜索的各種策略, 對於產生式系統也仍然適用。
還需指出的是, 在圖搜索技術中, 與或圖的搜索,一般都是從初始節點出發, 進行“自頂向下”地搜索。這種搜索用產生式系統實現, 一般用反向推理實現。 但同樣的問題, 產生式系統也可用正向推理實現, 即進行“自下而上”地搜索。這就是說, 產生式系統能實施功能更強的搜索。這大概是產生式系統與前面介紹的圖搜索的一個差別吧。
有些文獻中, 把“自下而上”進行推理搜索, 且目標的到達與規則的觸發次序無關的產生式系統稱為可交換的產生式系統; 而把“自上而下”進行推理搜索,且搜索的是與或樹的產生式系統稱為可分解的產生式系統。
由上述產生式系統與圖搜索的關系可見, 產生式系統完全可以作為圖搜索問題求解的一種通用模型。考慮到三種遺傳操作和歸結原理也都是產生式規則, 所以基於遺傳算法的問題求解系統和基於歸結原理的證明或求解系統實際上也都是產生式系統。 不過, 這是兩種特殊的產生式系統, 或者說, 它們是產生式系統的變形(前者含有三條產生式規則, 后者僅含有一條產生式規則)。 這樣, 產生式系統實際上就幾乎成了人工智能問題求解系統的通用模型。
三、產生式系統的優缺點
1、產生式系統的優點
(1)自然性:由於產生式系統采用了人類常用的表達因果關系的知識表示形式,既直觀、自然,又便於進行推理。
(2)模塊性:產生式是規則庫中的最基本的知識單元,形式相同,易於模塊化管理。
(3)有效性:能表示確定性知識、不確定性知識、啟發性知識、過程性知識等。
(4)清晰性:產生式有固定的格式,既便於規則設計,又易於對規則庫中的知識進行一致性、完整性檢測。
2、產生式系統的缺點
(1)效率不高
產生式系統求解問題的過程是一個反復進行“匹配—沖突消解—執行”的過程。由於規則庫一般都比較龐大,而匹配又是一件十分費時的工作,因此,其工作效率不高。此外,在求解復雜問題時容易引起組合爆炸。
(2)不能表達具有結構性的知識
產生式系統對具有結構關系的知識無能為力,它不能把具有結構關系的事物間的區別與聯系表示出來,因此,人們經常將它與其它知識表示方法(如框架表示法、語義網絡表示法)相結合。
3、產生式系統的適用領域
(1)由許多相對獨立的知識元組成的領域知識,彼此之間關系不密切,不存在結構關系。如:化學反應方面的知識。
(2)具有經驗性及不確定性的知識,而且相關領域中對這些知識沒有嚴格、統一的理論。如:醫療診斷、故障診斷等方面的知識。
(3)領域問題的求解過程可被表示為一系列相對獨立的操作,而且每個操作可被表示為一條或多條產生式規則。