next up previous
Next: 2.10 実行例(2) Up: 2 プロダクションシステム Previous: 2.8 競合解消(conflict resolution)の戦略

2.9 実行例(1)

実行例を示します.

(defvar *verbose* nil)
(defun rule-demo1 (&optional *verbose*)
  (set-up-rules
   'c+q
   '((rule1     (?x is a woman)
                ==> (?x is human))
     (rule2     (?x is a man)
                ==> (?x is human))
     (rule3     (?x is human)
                ==> (?x is a carnivore))
     (rule4     (?x is human)
                (?x eats meat)
                ==> (?x is a carnivore))
     (rule5     (?x is human)
                (?x eats vegetables)
                ==> (?x is a vegetarian))
     (rule6     (?x is a carnivore)
                ==> (?x is a living-thing))
     (rule7     (?x is a vegetarian)
                ==> (?x is a living-thing))))
  (setf *wmcq*
        '((queen-elizabeth is a woman)
          (dad is a man)
          (queen-elizabeth eats meat)
          (dad eats vegetables)))
  (ps 'c+q *wmcq* '(dad is a living-thing))
  )
ここでは7つのルールがあります.それぞれ?xという変数を使ってルールを表 しています.作業記憶には4つの事実が入っています.作業記憶には変数は含 まれません.最後のpsという手続きで最終状態として(dad is a living-thing) が得られたらば推論を終了するということを行なうという記述 になっています. 作業記憶とルールを見て人間が推論してみることにすると, (dad is a man)というのがありますから,rule2が適用でき, (dad is human)が事実として得られ,(dad is human) と(dad eats vegetables)がなり立つことになり,rule5より(dad is a vegetarian)と なります.これによりrule7から(dad is a living-thing)が得られます. このように,人間の場合には,(dad is a living-thing)がゴールなので, dadに纏わるものばかりから推論をしてゆけますが,ここで紹介したシステム では,作業記憶の内容の順に処理を進めることになります. 実行してみると,

<cl> (rule-demo1 t)

0: rule RULE1 adds ((QUEEN-ELIZABETH IS HUMAN)). 
        FIND-FIRST effects.
        (RULE1 RULE2) -> RULE1.
1: rule RULE2 adds ((DAD IS HUMAN)). 
        FIREABLE-RULES effects.
        (RULE1 RULE2 RULE3 RULE4)
                -> (RULE2 RULE3 RULE4).
        SIMPLEST-INSTANTIATIONS effects.
        (RULE2 RULE3 RULE4) -> (RULE2).
        FIND-FIRST effects.
        (RULE2) -> RULE2.
2: rule RULE3 adds ((DAD IS A CARNIVORE)). 
        FIREABLE-RULES effects.
        (RULE1 RULE2 RULE3 RULE5)
                -> (RULE3 RULE5).
        FIND-FIRST effects.
        (RULE3 RULE5) -> RULE3.
3: rule RULE5 adds ((DAD IS A VEGETARIAN)). 
        FIREABLE-RULES effects.
        (RULE1 RULE2 RULE3 RULE5 RULE6)
                -> (RULE5 RULE6).
        FIND-FIRST effects.
        (RULE5 RULE6) -> RULE5.
Rule Interpreter Halted
Goal (DAD IS A LIVING-THING) Achieved
Here are contents of working memory: 
((DAD IS A LIVING-THING)
 (DAD IS A VEGETARIAN)
 (DAD IS A CARNIVORE)
 (DAD IS HUMAN)
 (QUEEN-ELIZABETH IS HUMAN)
 (QUEEN-ELIZABETH IS A WOMAN)
 (DAD IS A MAN)
 (QUEEN-ELIZABETH EATS MEAT)
 (DAD EATS VEGETABLES))
NIL
という具合に,0でまず,作業記憶の(queen-elizabeth is human) がrule1に,(dad is a man)がrule2にマッチします. 2つのルールがマッチするので競合解消手続きが働きます. 競合解消手続きでは,まずfireable-rulesが試されますが,rule1,rule2とも 一度も発火していないので,そのまま次のfind-least-recently-fired-rules へ渡されます.しかし,まだ何も発火していないので,そのまま simplest-instantiationsへ渡されます.simplest-instantiationsでは,行動 処理結果としてできあがるインスタンスのなかのアトムの数を比較しますが, rule1,rul2とも3つのアトムを返すため,(rule1 rul2)のままで次の競合解消 find-firstを行ない,rule1が選ばれることになります. 実行例にも表示されているように,find-firstがeffectsとなり(rule1 rule2) -> rule1が選ばれたとなります. 以下同様に処理を行ないます.
next up previous
Next: 2.10 実行例(2) Up: 2 プロダクションシステム Previous: 2.8 競合解消(conflict resolution)の戦略
generated through LaTeX2HTML. M.Inaba 平成18年5月21日