0

ファクトデータベースとデータベース上の特定のルールを処理する必要があるルール評価システムを設計しています。現在、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です。

4

2 に答える 2

1

CLIPSは、私が知っている限り、少なくとも15年間、条件付き要素をサポートしてきました。例については、CLIPSの基本的なプログラミングガイドとこのCLIPSチュートリアルを確認してください。クリップソースを無料で見る(または変更する)ことができます。

CLIPSはプレフィックス表記を使用するため、条件付きの例は次のようになります。

(defrule fat-boy
    (person-data (name ?name) (weight ?weight))
    (test (> ?weight 100))
=>
    (printout t ?name " weighs " ?weight " kg! " crlf)
)
于 2009-10-02T23:40:04.917 に答える
-1

私が問題を理解している限り、すべてのファジールールは整数または浮動小数点値の範囲を限られた数のサブ範囲に分割します。たとえば、給与を58000、60000、78000の値と比較すると、<58000、58000-60000、60000-78000、>78000の4つの範囲があります。

その場合は、変数を0、1、2、3のいずれかの整数に再定義して、不等式規則を等式規則に変換できる可能性があります。

于 2009-09-30T13:24:05.080 に答える