第2章 プロダクションシステムモデリング


概要

「状態」と「オペレータ」による問題解決の形式化を実現する枠組みとして,プロダクションシステムがある。
プロダクションシステム (production system) は,ワーキングメモリ (working memory) とプロダクションルール (production rule) から構成される。

ワーキングメモリ

ワーキングメモリには,問題解決の過程に現れる一連の「状態」が記録されてゆくことになる。
上記の例で言えば,ブロックの配置やクレーンの状態がここに蓄えられる。

プロダクションルール

第1章の「オペレータ」の一つ一つがプロダクションルールである。ルールは,次のような IF THEN の形式で与えられる。

IF
条件 1
条件 2
...
THEN
行為 1
行為 2
...

IF 以下の部分をルールの「条件節」と呼び,THEN 以下をルールの「アクション節」と呼ぶ。
ひとつのオペレータは,ひとつのルールによって表現される。

なお,あるルールが実行されることを,ルールが発火すると言う。


認知-実行サイクル

ワーキングメモリとプロダクションルールは,相互に関連しあいながら問題を解決してゆく。その関係を示したのが,以下である。


照合

認知-実行サイクルの前半部分であるワーキングメモリの内容とルールの条件節の照合についてより詳しく見てゆこう。
ワーキングメモリやルールの条件節は,それぞれの状態を規定するリストの組によって構成されている。各々のリストは,そのリストの属性,変数,値から構成されている。
以下では,記述をわかりやすくするために,

で,それぞれ表すこととする。

例えば,「状態」という属性が「赤」という値を持っていた場合,

(Condition Red)
と表現することができる.
また,「状態」という属性が「何らかの値」を持っていることを表すには,変数xを使って,
(Condition ?x)
と表現することができる.

条件節の照合では,マッチングという概念が重要である。上で述べたように,ルールの条件節を構成するリストの中には,変数が含まれている。例えば,

IF節
(Condition1 ?a)
とあれば,?aは変数である。ここで,ワーキングメモリの中に
(Condition1 RED)
というリストがあったとすると,両者はマッチングに成功し,さらに?aの中にREDという値が代入される。これを,変数「?a」が,値「RED」によって束縛されたという。

さらに,マッチングに関して,具体的に考えてゆこう。ここで,ワーキングメモリの中に,

(Condition1 RED)
(Condition2 BLUE)
という要素がある場合を考えてみる。
この場合に,ルールの IF 節の中で,Condition1 の色と Condition2の色が同じということを判定したい時には,
IF節
(Condition1 ?a)
(Condition2 ?b)
(*test-equal ?a ?b)
と書けばよい。
ここで,*で始まる記号は関数を示す。*test-equalという関数は,2つの引数を取り,その引数が一致すればIF節の発火の条件を満たす(これを,Trueという値を返すと言う)。
この場合,この条件節は,ワーキングメモリとのマッチングに基づいて,?aがREDに,?bがBLUEに束縛され,条件を満たさないので,発火できない。
また,これを単に,
IF節
(Condition1 ?a)
(Condition2 ?a)
と書くこともできる。
なぜならば,最初にルールの条件節の (Condition1 ?a) とワーキングメモリの (Condition1 RED) とが照合された時点で,?aはREDに束縛されている。次に,ルールの条件節の (Condition2 ?a) とワーキングメモリの (Condition2 BLUE) の照合が行われるが,?aはすでにREDに束縛されているので,?a(すなわちRED) とBLUEの照合が失敗するからである。

実行

アクションを構成するひとつひとつの行為は,一般にワーキングメモリの内容の書き換えを行う。
例えば,ワーキングメモリの Conditio1 の色を,REDからWHITEに変更したい場合には,アクション節に次のように記述しておけばよい。

THEN節
(*delete (Condition1 RED))
(*deposit (Condition1 WHITE))
ここで,*deleteは引数に与えられたリストをワーキングメモリから削除し,*depositは追加する関数である。

条件節で束縛された変数を,アクション節に用いることも可能である。例えば,Condition1の値が何であれそれをWHITEに変更したい場合には,

IF節
(Condition1 ?a)
THEN節
(*delete (Condition1 ?a))
(*deposit (Condition1 WHITE))


問題1

Condition 1の値とCondition 2の値を交換したい時には,IF節,THEN節をどのように記述すればよいだろうか。(1)と(2)を記述せよ。

IF節
(1)
THEN節
(2)
[課題]

問題2

第1章で取り上げた積み木問題において,Operator OP1(x)を,ブロックxが,(A)他のブロックの上に乗っている場合と,(B)テーブルの上に乗っている場合に分けて,プロダクションルールに書き下せ。
ただし,IF節で以下の関数を用いる。

(*test-not-equal ?x ?y)
は,?xと?yが同じでないことを判定する。

Operator1(ブロックの上のブロックを持ち上げる)
IF節
(1)
THEN節
(*delete (On ?x ?y))
(*delete (Clear ?x))
(*deposit (Hold ?x))
(*deposit (Clear ?y))

Operator1(テーブルの上のブロックを持ち上げる)
IF節
(On ?x ?y)
(Clear ?x)
(*test-equal ?y テーブル)
THEN節
(2)
[課題]