附錄 附錄A 理解規則
以下是動物例子的完整基礎規則,我相信是由帕特裏克·溫斯頓(Patrick Winston)和伯索爾德·霍恩(Berthold Horn)提出的:
1. 如果動物有毛發,那麽該動物是哺乳動物。
2. 如果動物能產奶,那麽該動物是哺乳動物。
3. 如果動物有羽毛,那麽該動物是鳥類。
4. 如果動物會飛,並且動物能產卵,那麽該動物是鳥類。
5. 如果動物吃肉,那麽該動物是食肉動物。
6. 如果動物是哺乳動物,並且動物有蹄,那麽該動物是有蹄類動物。
7. 如果動物是哺乳動物,並且動物是食肉動物,並且動物毛發是黃褐色,並且動物有黑色條紋,那麽該動物是老虎。
8. 如果動物是有蹄類動物,並且動物有黑色條紋,那麽該動物是斑馬。
讓我們看看這些規則如何在正向推理下工作的。假設用戶提供的信息是動物產奶,有蹄,有黑色條紋。然後正向推理將按如下方式進行:
1. 動物產奶這個事實會觸發規則2,工作存儲器裏麵會增加“該動物是哺乳動物”的信息。
2. 新增的動物是哺乳動物的信息,再加上動物有蹄,則觸發規則6,工作存儲器裏麵會增加“該動物是有蹄類動物”的信息。
3. 新增加的該動物是有蹄類動物的信息,再加上動物有黑色條紋的事實,則會觸發規則9,工作存儲器裏會增加“該動物是斑馬”的信息。
4. 到了這一步,沒有進一步的規則可以觸發了。
這樣,我們就可以從動物的信息和規則中獲得三項新的知識。
對於反向推理,我們從一些想假設的結論(目標)開始,再使用規則來回溯到更小的知識項。讓我們看看,如果用戶向係統呈現的目標是確定動物是否有蹄類動物,而沒有給出任何信息,係統將如何工作:
1. 推理機試圖尋找一個“該動物是有蹄類”的規則,在本例中,它找到了規則6。
2. 推理機沒有足夠的信息來觸發規則6,因為它不知道前提(“動物是哺乳動物,動物有蹄”)是否正確。因此,它給自己設立了一個目標,確認前提陳述是否屬實。從技術上講,“該動物是哺乳動物”和“該動物有蹄”成為子目標。
3. 首先來看“該動物是哺乳動物”這個子目標,在本例中,能夠尋找到規則1和規則2。這就告訴推理機,這個目標可以通過兩種方式達成:要麽發現動物有毛發(規則1),要麽發現動物產奶(規則2)。因此,推理機取其中的第一個(“動物有毛發”)並將其作為子目標。
4. 推理機查找以“該動物有毛發”為結果的規則,然而,在本例中不存在這樣的規則。我們已經到了規則回溯的盡頭,但這並非死胡同,麵對這樣的情況,推理機可以向用戶詢問特定的語句是否為真。這樣,使用反向推理過程就走到了向用戶詢問信息的階段。現在我們假設用戶並沒有關於動物是否有毛發的信息,因此在回答推理機詢問的時候會說“不知道”。在沒有任何相關信息的情況下,推理機得出的結論是規則1不成立,因此它會繼續以“該動物是哺乳動物”作為結論的規則2的前提進行推理,即以“動物能產奶”作為前提。
5. 推理機將“動物能產奶”作為子目標,然後發現這也是一個回溯到了盡頭的目標。因此它同樣會向用戶提出詢問,假設用戶的回答為“是”,“動物能產奶”的信息會被添加到工作存儲器,然後觸發規則2,“該動物是哺乳動物”的信息被添加到工作存儲器。
6. 到此,推理機已經建立好了規則6前提的第一部分,所以它繼續第二部分,試圖確定“動物有蹄”是否正確,因此,它將此作為子目標。
7.“動物有蹄”同樣也是回溯盡頭的規則,因此推理機會再次向用戶詢問。假設用戶的回答為“是”,這一事實就會被添加進工作存儲器,再加上“該動物是哺乳動物”的信息,係統就能觸發規則6,最終得出結論,該動物是有蹄類動物。達成用戶的原始目標。