5

数万台のシステムがあります。各ユニットには5〜10メートルがあり、各メーターにはそれに関連付けられた値があります。これらのメーターの値は変化します。これらの変化にリアルタイムで対応できるようにするには、ルールエンジンが必要です。

「ユニット#1の最初のメーターが10より大きく、ユニット#1の2番目のメーターが30より小さい場合は...」という種類のルールがありますが、ルールはこれよりはるかに長くなる可能性があります。各ユニットのルールは完全に独立しているため、2つの異なるユニットからの2つの異なるメーターの値を条件とするルールはありません。

すべてのユニットで同じルールが約30個あり、各ユニットには約5〜15個のカスタムルールがあります。これらのルールは、ルールエンジンの実行中に動的に追加する必要があります。ユニットは、サインアップ時に5〜10のルールを追加し、その時点から週に1回のようなルールを追加または削除する可能性があります。

これにはDroolsを使用することにしました。私は、それを実装するための最良の方法を見つけようとしています。私はDroolsに本当に慣れていないので、ちょっと混乱しています。各ユニットが独自の知識ベースを持つことは理にかなっていますか?もしそうなら、各ユニットで同じルールを共有する方法はありますか?

これらすべてのルールを保存するのに十分なメモリがないのではないかと心配しているので、ユニットごとにナレッジベースがあれば、すべてのナレッジベースをシリアル化してデータベースに入れ、取得するときに取得できると考えていました。それらが必要です。それは合理的でしょうか?

ユニットごとに個別のナレッジベースを使用することを考えたもう1つの理由は、各ユニットのルールが他のすべてのユニットのルールから完全に独立しているため、すべてを同じナレッジベースに配置するとパフォーマンスが低下する可能性があるためです。これは正しいですか、それともReteアルゴリズムはそれを理解するのに十分賢いですか?

また、エンジンの実行中に動的にルールを追加することは可能ですか?すべてのルールを再コンパイルする必要がありますか?エンジンがメーターの変化にリアルタイムで応答する必要がある場合、どのくらいの時間がかかりますか?これは実現可能ですか?

みんなありがとう。

4

1 に答える 1

2

各ユニットが独自の知識ベースを持つことは理にかなっていますか? もしそうなら、ユニットごとに同じルールを共有する方法はありますか?

独自の知識ベースについては、各ユニットについて以下を参照してください。整理するために、それらを別々のパッケージに入れることを考えることができます。パッケージ間でルールを共有するには、グローバル領域でルールを作成してインポートできます。これは一般的なルールを共有するのに役立ちますが、いくつかの欠点があります。

  • 多数のパッケージがある場合は、最初に手動でインポートする必要があります。
  • 特定のパッケージでインポートされたルールを変更すると、グローバル ルールが変更されるため、その変更はルールがインポートされた他のすべてのパッケージに影響します。Guvnor UI では、ルールがインポートされているか、パッケージに固有であるかを視覚的に判断する方法がありません。

これらすべてのルールを保存するのに十分なメモリがないのではないかと心配しているので、ユニットごとにナレッジ ベースがあれば、すべてのナレッジ ベースをシリアル化し、データベースに入れ、必要なときに取得できると考えていました。それらが必要です。それは合理的でしょうか?

これはオプションですが、ルールが変更された場合は、ナレッジ ベースを再作成する必要があります。

ユニットごとに個別のナレッジ ベースを使用することを考えていたもう 1 つの理由は、各ユニットのルールが他のすべてのユニットのルールから完全に独立しているためです。それらをすべて同じナレッジ ベースに配置すると、パフォーマンスが低下する可能性があります。これは正しいですか、それとも Rete アルゴリズムはそれを理解できるほどスマートですか?

Drools JBoss Rules 5.0 Developer's Guide by Michal Baliによると

Rete アルゴリズムのパフォーマンスは、知識ベース内のルールの数とは理論的には無関係です。

さらに遠く、

興味があり、いくつかのベンチマークを確認したい場合は、Drools Web サイトからダウンロード可能な drools-examples モジュールで見つけることができます。また、よく知られている数学的問題 (通常は「Miss Manners」テストと「Waltz」) を解決するさまざまなルール エンジンのベンチマークを定期的に発行している Web サイトもあります (たとえば、 http://illation.com.au/benchmarks/ ) 。Drools のパフォーマンスは、他のオープン ソース エンジンや商用エンジンに匹敵します。

また、エンジンの実行中にルールを動的に追加することは可能ですか? すべてのルールを再コンパイルする必要がありますか? エンジンがメーターの変化にリアルタイムで応答する必要がある場合、どれくらいの時間がかかりますか?また、これは実行可能ですか?

ここには具体的なアイデアはありませんが、使用できるようにするにはルールを再コンパイルする必要があると確信しています。以前に作成した kbase は、新しいパッケージを再コンパイルするときに引き続き使用できます。それらは独立しています。

于 2012-09-11T08:29:09.387 に答える