專家系統實驗

動物識別系統by prolog

一、實驗描述:

本實驗仿照書中例題,用prolog語言實現了一個簡單的動物識別專家系統。該系統可以識別老虎、金錢豹、斑馬、長頸鹿、鴕鳥、企鵝、信天翁這7種動物及根據一些特徵識別部分物種。

二、實驗原理與內容:

知識庫
在本系統當中,知識庫中的知識用產生式規則來表示,共有如下15條規則。
R1 IF該動物有奶THEN該動物是哺乳動物
R2 IF該動物有毛髮THEN該動物是哺乳動物
R3 IF該動物有羽毛THEN該動物是鳥
R4 IF該動物會飛AND會下蛋THEN該動物是鳥
R5 IF該動物有爪AND有犬齒AND眼盯前方THEN該動物是食肉動物
R6 IF該動物喫肉THEN該動物是肉食動物
R7 IF該動物是哺乳動物AND有蹄THEN該動物是有蹄類動物
R8 IF該動物是哺乳動物AND嚼反芻THEN該動物是有蹄類動物
R9 IF 該動物是哺乳動物 AND 該動物是食肉動物 AND 是黃褐色 AND身上有
黑色條紋 THEN 該動物是虎
R10 IF該動物是哺乳動物 AND 該動物是食肉動物AND是黃褐色AND身上有暗斑點THEN該動物是金錢豹
R11 IF該動物是有蹄類動物AND有長脖子AND有長腿AND身上有暗斑點THEN該動物是長頸鹿
R12 IF該動物是有蹄類動物AND身上有黑色條紋THEN該動物是斑馬
R13 IF該動物是鳥AND有不會飛AND有長腿AND長脖子AND是黑白二色THEN該動物是鴕鳥
R14 IF該動物是鳥AND不會飛AND會游泳AND是黑白二色THEN該動物是企鵝
R15 IF該動物是鳥AND善飛THEN該動物是信天翁

三、實驗代碼與截圖:

/* animal.pro
  animal identification game.  

    start with ?- go.     */

go :- hypothesize(Animal),
      write('I guess that the animal is: '),
      write(Animal),
      nl,
      undo.

/* hypotheses to be tested */
hypothesize(cheetah)   :- cheetah, !.    // 獵豹
hypothesize(tiger)     :- tiger, !.
hypothesize(giraffe)   :- giraffe, !.
hypothesize(zebra)     :- zebra, !.
hypothesize(ostrich)   :- ostrich, !.  //鴕鳥
hypothesize(penguin)   :- penguin, !.
hypothesize(albatross) :- albatross, !.  //信天翁
hypothesize(unknown).             /* no diagnosis */

/* animal identification rules */
cheetah :- mammal, 
           carnivore, 
           verify(has_tawny_color),
           verify(has_dark_spots).
tiger :- mammal,  
         carnivore,               // carnivore--肉食動物
         verify(has_tawny_color), 
         verify(has_black_stripes).
giraffe :- ungulate,        //giraffe--長頸鹿
           verify(has_long_neck), 
           verify(has_long_legs).   // zebra-- 斑馬
zebra :- ungulate,         // ungulate--有蹄類
         verify(has_black_stripes).
ostrich :- bird,  
           verify(does_not_fly), 
           verify(has_long_neck).
penguin :- bird, 
           verify(does_not_fly), 
           verify(swims),
           verify(is_black_and_white).
albatross :- bird,
             verify(appears_in_story_Ancient_Mariner),
             verify(flys_well).

/* classification rules */
mammal    :- verify(has_hair), !.
mammal    :- verify(gives_milk).
bird      :- verify(has_feathers), !.
bird      :- verify(flys), 
             verify(lays_eggs).
carnivore :- verify(eats_meat), !.
carnivore :- verify(has_pointed_teeth), 
             verify(has_claws),
             verify(has_forward_eyes).
ungulate :- mammal, 
            verify(has_hooves), !.
ungulate :- mammal, 
            verify(chews_cud).

/* how to ask questions */
ask(Question) :-
    write('Does the animal have the following attribute: '),
    write(Question),
    write('? '),
    read(Response),
    nl,
    ( (Response == yes ; Response == y)
      ->assert(yes(Question)) ;
        assert(no(Question)), fail).
:- dynamic yes/1,no/1.

/* How to verify something */
verify(S) :-
   (yes(S) ->true ;
    (no(S)->fail ;
     ask(S))).

/* undo all yes/no assertions */
undo :- retract(yes(_)),fail. 
undo :- retract(no(_)),fail.
undo.

這裏寫圖片描述

有6個error,調試成功後,運行截圖如下,運行成功。

這裏寫圖片描述


附錄[0]本篇報告下載鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章