2

ビジネスルールエンジンを評価しています。Drools で少し遊んでみましたが、クエリ駆動型の後方連鎖システムを探しているようです。

より具体的に言うと、次のような単純なビジネス ルールを見てみましょう。

when
    (amount > 1000 AND amount < 2000 AND currency == USD)
    OR
    (amount > 750 AND amount < 1500 AND currency == EUR)
then
   approve loan

このルールだけを使用して、Drools に次の質問に答えるよう「尋ねる」ことは可能ですか?

  1. 通貨が米ドルの場合、ローンが承認されるために必要な条件は何ですか? 私は次のような結果を期待していました:(amount > 1000) AND (amount < 2000)

  2. 2000ユーロのローンを組むことは可能ですか? (予想される答え: false)

  3. 可能でない場合、却下の主な理由は何ですか? (予想される答え: amount >= 1500)

Drools は、1 つのルールだけを使用して、そのような種類の質問に答えることができるでしょうか? 理論的には、これらの情報はすべてルールに格納されていますが、そこから「抽出」する方法がわかりません。

Drools がこのシナリオに最適なルール エンジンではない場合、この種の機能を提供するエンジンはありますか?

4

2 に答える 2

0

RETE エンジンでは、プロダクションに複数の条件が含まれるため、基本的にルールを次のように定義できます。

P1= C1 ^ C2 ^ C3 ここで、C1=金額 > 1000; C2=金額 < 2000;C3=通貨 == 米ドル

OR 条件を 2 つの異なるプロダクションに分割することもお勧めします。P2=C4 ^ C5 ^ C6 ここで、C4=金額 > 750; C5=金額 < 1500; C6=通貨 == ユーロ;

(本番システムでは、実際には OR がなく、トレーサビリティ要件のために OR 条件を記述できないものもあります)

そしてあなたの質問に答えるために:

  1. 条件の一部として C3 を共有するすべてのプロダクションを照会するだけです。
  2. 入力でルールを実行すると、結果が得られます
  3. トークンを持たず、C5 の識別条件がネットワークの対応するアルファ メモリに渡されたベータ メモリに対してクエリを実行します。

すべてのルール エンジンで、ベータ メモリとトークンに対してクエリを実行できるわけではありません。Drools でアルファ、ベータ メモリ、および保存されているトークンを取得できるかどうかを確認します。基本的に、内部の RETE グラフをトラバースする必要があります。

于 2013-09-24T06:34:36.277 に答える
0

Drools は、他の多くのルール エンジンと同様に、RETE アルゴリズムを使用して実行する結果を決定します。ルールの when 部分はすべて、実行する then 部分と一致する必要があります。

質問 1 と 2 の場合:複数の「回答」が必要な場合は、複数のルールを使用するか、累積機能を使用できます。

3 の場合: ルールが呼び出されなかった理由がわからない場合は、拒否ケースの特定の条件が満たされたときに起動する別のルールとして拒否ケースを表現する必要があります。

于 2012-10-09T21:01:34.713 に答える