ファクトデータベースとデータベース上の特定のルールを処理する必要があるルール評価システムを設計しています。現在、RETEの修正バージョンがありますが、これは部分的に正しく機能しますが、いくつかの欠点があります。
問題は、ルールが完全一致に限定されないことですが、不等式(より小さいなど)や他の種類のあいまいな計算もサポートする必要があります。
例、あなたがこの事実を持っていると仮定します
(Salary John 58000)(Salary Sara 78000)(Employee John)(Boss Sara)(Married John Sara)(Works John Stackoverflow)
次のようなルールがあるかもしれません。
(給与?w <60000)/ \(既婚?w)/ \(作品?w Stackoverflow)==>何でも
明らかに、結果は「John」の?w値でルールをトリガーしますが、これを実行する方法は、最初の式(Salary XX)の開始に一致するファクトベースの各要素をループし、次にループすることです。比較を行い、結果をファクトベースに保存します。たとえば、最初のパスの後、ファクトベースに次のアイテムが追加されます。
(給与ジョン58000 <60000)
それが行われると、通常のRETEの方法で結合を実行します。そうすれば、ファクトベースで多くのスペースを占有します。特に、ルールは任意の数を参照できるため、ルールがアクティブである限り、これらの「計算された」ファクトがあります。
一方、最初の式でいくつかのルールを適用でき、標準のマッチングアルゴリズムを使用してルールをトリガーし続けることができます。
この種の動作を処理するパターン、参照、またはメソッドを知っている人はいますか?通常のLEAPS、TREATS、RETEアルゴリズムは、(私が知る限り)「正確な」マッチングのみを処理します。
ちなみに、これはC#.NETです。