「状態」と「オペレータ」による問題解決の形式化を実現する枠組みとして,プロダクションシステムがある。
プロダクションシステム (production system) は,ワーキングメモリ (working memory) とプロダクションルール (production rule) から構成される。
ワーキングメモリには,問題解決の過程に現れる一連の「状態」が記録されてゆくことになる。
上記の例で言えば,ブロックの配置やクレーンの状態がここに蓄えられる。
IF
条件 1
条件 2
...
THEN
行為 1
行為 2
...
IF 以下の部分をルールの「条件節」と呼び,THEN 以下をルールの「アクション節」と呼ぶ。
ひとつのオペレータは,ひとつのルールによって表現される。
ワーキングメモリとプロダクションルールは,相互に関連しあいながら問題を解決してゆく。その関係を示したのが,以下である。
認知-実行サイクルの前半部分であるワーキングメモリの内容とルールの条件節の照合についてより詳しく見てゆこう。
ワーキングメモリやルールの条件節は,それぞれの状態を規定するリストの組によって構成されている。各々のリストは,そのリストの属性,変数,値から構成されている。
以下では,記述をわかりやすくするために,
例えば,「状態」という属性が「赤」という値を持っていた場合,
(Condition Red)と表現することができる.
(Condition ?x)と表現することができる.
条件節の照合では,マッチングという概念が重要である。上で述べたように,ルールの条件節を構成するリストの中には,変数が含まれている。例えば,
IF節 (Condition1 ?a)とあれば,?aは変数である。ここで,ワーキングメモリの中に
(Condition1 RED)というリストがあったとすると,両者はマッチングに成功し,さらに?aの中にREDという値が代入される。これを,変数「?a」が,値「RED」によって束縛されたという。
さらに,マッチングに関して,具体的に考えてゆこう。ここで,ワーキングメモリの中に,
(Condition1 RED) (Condition2 BLUE)という要素がある場合を考えてみる。
IF節 (Condition1 ?a) (Condition2 ?b) (*test-equal ?a ?b)と書けばよい。
IF節 (Condition1 ?a) (Condition2 ?a)と書くこともできる。
アクションを構成するひとつひとつの行為は,一般にワーキングメモリの内容の書き換えを行う。
例えば,ワーキングメモリの Conditio1 の色を,REDからWHITEに変更したい場合には,アクション節に次のように記述しておけばよい。
THEN節 (*delete (Condition1 RED)) (*deposit (Condition1 WHITE))ここで,*deleteは引数に与えられたリストをワーキングメモリから削除し,*depositは追加する関数である。
条件節で束縛された変数を,アクション節に用いることも可能である。例えば,Condition1の値が何であれそれをWHITEに変更したい場合には,
IF節 (Condition1 ?a) THEN節 (*delete (Condition1 ?a)) (*deposit (Condition1 WHITE))
Condition 1の値とCondition 2の値を交換したい時には,IF節,THEN節をどのように記述すればよいだろうか。(1)と(2)を記述せよ。
IF節 (1) THEN節 (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)[課題]