プロダクション実行
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/11/13 07:33 UTC 版)
「Reteアルゴリズム」の記事における「プロダクション実行」の解説
衝突の解決を行った後、エンジンは最初に選択されたプロダクション・インスタンスに対応したアクションリストに従って実行する。アクションはプロダクション・インスタンスの WME リストで表されるデータに対して行われる。 通常、エンジンは全てのプロダクション・インスタンスを順次実行していく。各プロダクション・インスタンスは1回のパターンマッチングサイクルで1回だけ実行される。このような特徴を「屈折; refraction」と呼ぶ。しかし、プロダクション・インスタンスの実行シーケンスはワーキングメモリの何らかの更新によって割り込まれることがある。ルールアクションにはワーキングメモリに WME を追加/削除するものもある。実行中のプロダクション・インスタンスがそのような更新を行うと、エンジンは新たなパターンマッチングサイクルに移行する。他にもワーキングメモリ上の WME の内容を更新する場合もある。更新は WME を一旦削除して追加する形で実現される。エンジンはデータの変更に対応してマッチングの見直しを行い、結果としてアジェンダ上のプロダクション・インスタンスのリストにも変化が及ぶこともある。従って、あるプロダクション・インスタンスのアクションを実行することによって、前に活性化されていたインスタンスが不活性となってアジェンダから削除され、別のインスタンスが活性化されることもある。 新たなパターンマッチングサイクルの一部として、エンジンは再度アジェンダ内での衝突の解決を行い、再度最初のインスタンスを実行する。このような繰り返しをアジェンダ上のインスタンスが無くなるまで続ける。その時点でエンジンは処理を終えて停止する。 より洗練された屈折戦略を採用するエンジンもあり、前のサイクルで実行されたプロダクション・インスタンスが(たとえまだアジェンダ上にあったとしても)新たなサイクルで再実行しない。 アジェンダが空にならず、エンジンが無限ループに陥る場合もある。このため、プロダクションのアクションリストに明示的な停止指示を書き込めるようになっていることが多い。また、無限ループに陥っていることをある程度の繰り返し後に検出する機能を持つ場合もある。エンジンによっては、アジェンダが空になったら停止するという方式ではなく、新たな事実が入ってくるまで待ち状態になるものもある。 衝突の解決と同様、活性化したプロダクション・インスタンスの実行は Reteアルゴリズムの機能ではない。しかし、Reteを使ったエンジンの基本機能の1つである。Reteネットワークによる最適化は、推論エンジンが複数回のパターンマッチングサイクルを実行する場合に有効である。
※この「プロダクション実行」の解説は、「Reteアルゴリズム」の解説の一部です。
「プロダクション実行」を含む「Reteアルゴリズム」の記事については、「Reteアルゴリズム」の概要を参照ください。
- プロダクション実行のページへのリンク