
SmallOPS(Small Official Production System)は、 OPS5(Official Production System 5)を参考にして C/C++で製作した自前の前向き推論型プロダクションシステムである。 プロダクションシステムとしてシンプルな機能しか備えていないが、 プログラムがわかりやすいのが特徴である。 このプロダクションシステムの簡単な仕様を以下に示す。
- OPS5に似たOAV形式の文法を持つ。
- 属性値として使えるのはアトム・整数・変数の3種類のみ。
- 行動として使えるのはmakeのみ。
- 競合解消戦略は、refraction+first matchを採用。
- refraction
- first match
一度実行した例化を二度以上実行しない。
最初にマッチした例化を実行する。 マッチングはルールベースにプロダクションルールを入れた順序で行われるため、 早く入れたプロダクションルールほど早く発火する。
単純な実装ではあるが、拡張を考慮した設計がなされており 単純であるが故に自分で新しい属性値や行動を追加したり、 別の競合解消戦略を採用したりといった改善を施しやすい状態に仕上げているつもりである。 SmallOPSこれ自体は、シンプルであることが重要なのでバグの修正などを除きこれ以上の開発は行わない。
SmallOPSをコンパイルするための補足的な情報としては、 SmallOPSの概要を参考にすること。
本ソースを元に SourceForge.JP にプロジェクトを立てて開発の継続を検討中。
本題に入る前にプロダクションシステムとはどういうものか、 そしてその一つの実装としてOPS5を取り上げて概要を説明する。
プロダクションシステムとして単純な実装を持つSmallOPSについて取り上げて概要を説明する。
SmallOPSの全体を構成するクラスについて、プロダクションシステムの概念と対比しながら説明を行う。
SmallOPSの文法にも取り入れられているOAV形式のデータをどのように構成するか。 まずは、OAV形式のデータがSmallOPSの文法の中でどのように使われているのかを説明し、 またそれぞれを表すクラスについて説明する。
SmallOPSが扱う値には、アトム・整数・変数の3種類ある。 これらはOAV形式のデータの中に埋め込まれるものであるが、これらをどのように扱えばいいか、 またそれぞれを表すクラスについて説明する。
SmallOPSが扱う行動は、makeのみである。 しかし、SmallOPSは行動に関して拡張を許す設計がなされている。 makeに関するクラスを説明すると共に拡張を行うための方法を示す。
SmallOPSは競合解消戦略にfraction・first matchのアルゴリズムを採用しているが、 その他の戦略アルゴリズムを考慮に入れた効果的な競合集合の求め方の説明を行う。 その上でfraction・first matchのアルゴリズムがどのように実装されるのか、 また他の競合解消戦略を実装するための指針を示す。
SmallOPSのこれからを示して終わりとする。

- 2003/07/28(version 1.0.1)
- 2003/07/01(version 1.0.0)
ルールベースにプロダクションルールが一つも入っていない状態で、 競合集合を求めようとするとエラーがでるバグを修正した。
公開。