next up previous
Next: 2.5 推論エンジン Up: 2 プロダクションシステム Previous: 2.3 ルールの保存

2.4 作業記憶

作業記憶は大域変数 *working-memory* の値として保存される. 以下のように,プロダクションシステムを走らせる ps 関数に対して作業記憶 を与える.作業記憶の内容は行動部パターンにより生成されるものと同じ構 造をしている.
(defvar *working-memory* nil)

(defun ps (ruleset-name working-memory goal)
  (setq *working-memory* working-memory)
  (setf *rules* (get '*rules* ruleset-name))
  (initialize-ruleset *rules*)
  (production-system *rules* goal))

(defun initialize-ruleset (ruleset)
  (mapc
   #'(lambda (rule)
       (setf (consequent-instantiation rule) nil)
       (setf (antecedent-instantiations rule) nil)
       (setf (previous-fired-instantiations rule) nil))
   ruleset)
  (mapc
   #'(lambda (rule)
       (setf (get rule 'cycle-last-fired) -1)
       (setf (previous-fired-instantiations rule) nil))
   ruleset))

(defmacro previous-fired-instantiations (rule)
  `(get ,rule 'previous-fired-instantiations))
(defmacro consequent-instantiation (rule)
  `(get ,rule 'consequent-instantiation))
(defmacro antecedent-instantiations (rule)
  `(get ,rule 'antecedent-instantiations))
(defun cycle-last-fired (rule)
  (get rule 'cycle-last-fired))
*working-memory* の更新は推論を行なった際にルールがマッチし, 行動部のパターンを実行したときになされる. 行動部の実行方法としては,make, remove, modifyといった 制御手続きがあればその手続きを実行する機構を組み込むことも 可能である. そのような手続きを設けず単に行動部パターンを追加するという場合には,以 下のようにルールの条件部でマッチした各変数の値を用いて行動部パターン (instantiation)を求めてそれをappendで追加することになる.

generated through LaTeX2HTML. M.Inaba 平成18年5月7日