規則系統是使用許多規則作為專家知識,處理輸入問題而產生解答。規則系統的架構本來有講究,但國內學習環境很容易將規則誤解為一般程式語言中的 if-then-else 程式流程。所以,在此來看看一套規則系統如何處理「猴子與香蕉」問題。
「猴子與香蕉」是人工智慧與生物知能領域喜歡討論的例子,在一組空間中,有香蕉、猴子及其他物品散置各處,問猴子如何取得香蕉。假設我們有一套規則系統,系統中建立規則如下: (=W =C =P =O 為變數, = 為萬用變數, #P 為 =P 的否定變數,帶負號項目為否定條件。)(以上資料摘自 Charles L. Forgy 於 1979 年發表的博士論文,第 11 到 13 頁。)
勘誤: MB8 規則的右手側誤植為 Near ,完整正確規則應為 ((Want =O Near =P)) (Light =O)(=O Near #P) --> (Want (Monkey Holds =O)))
指定問題如左:目標為想要猴子取得香蕉,而各項物件的位置及情況列在下方。
(左列資料摘自 Charles L. Forgy 於 1979 年發表的博士論文,第 13 頁。)
參考以上規則,規則系統的處理過程如下圖所示: (WMEs 為 Working Memory Elements ,工作空間項目。規則啟動 (fire) 的原則為,若曾經啟動過此規則則不啟動,否則,由多項符合比對的同一類規則中,啟動規則條件(左手側)較嚴格的規則。任何一項 WME 右側標有 X n(X 右接一個數),表示此項是在進入 WMEs n 之前的一條規則啟動時被刪除。)
規則系統應該做下列工作:
- 做好幾次的循環,每次都要做規則比對、判斷哪條規則該啟動、並執行啟動的規則。
- 每一次循環,有多條規則同時符合比對,有多條規則可以被啟動,多條啟動規則改變了工作空間。
- 循環工作的終點,是當沒有一條規則符合比對的時候,才可以結束規則判斷工作。
規則系統的使用者,在此指知識專家或知識工程師,所做的事情有下列的情形:
- 使用者只要撰寫簡單的規則;簡單的規則不需要有巢狀的構成,即不必寫一條規則中包含另一條規則。
- 使用者必須撰寫完整、能夠解題的規則集合;解題的完成仰賴於規則知識,甚於仰賴程式演算法。
- 使用者可能沒把解題規則寫得完整;規則的部份不完整,會導致解題完成到一半。
- 使用者必須小心處理遞迴規則。
- 為了完成解題工作,使用者除了提供一般解題規則之外,有時還要增添輔助規則。例如上例的第十條規則 MB10 是輔助規則,避免有些已達成目標、卻沒有清除目標的情況。
- 知識規則可提供非知識專家手寫做解題,但是人力操作解題可能犯錯,例如將規則或符號看錯及謄寫錯誤;由規則系統操作知識規則,則不容易犯錯。
No comments:
Post a Comment