web-dev-qa-db-ja.com

ビジネスルールエンジンと制約プログラミング言語の関係

Droolsやその他のルールエンジンの(おそらく古い)マニュアルを見ると、それらの付加価値の例の1つはMiss Mannersパズル(Droolsのマニュアル)などのパズルを解くことです。現在、このようなパズルは自然に定式化され、Prologまたはより最近の制約プログラミング言語を使用して解決されています。なぜこの目的のためにDroolsを使用するのでしょうか。この場合にPrologとCPLが与える付加価値は、パズルを論理的な述語のセットとして自然に定式化し、ソリューションの空間を自動的に検索する能力です(この点でCPLの方が効率的です)。しかし、Droolsなどの製品の付加価値は何ですか(たとえば、Excelファイルを取得し、それを一連のルールに変換するというベルとホイッスルのほかに)。

より具体的には、Prologはバックトラック検索を実装し、CLPは制約伝播によるバックトラック検索を実装します。したがって、いわば個々の変数の空間のデカルト積全体を検索する代わりに、この積空間の大部分を除去します。これはそれらを効果的かつ有用にするものです。 PrologとCLPの両方は、文献で十分に説明されています。

一方、Reteアルゴリズムは一連のルールをいくつかのデータ構造の形式でキャッシュすることは明らかですが、(私の理解では)入力の一部が変更された場合に出力を評価することがより効果的になります。増分変更のためにこのデータ構造を効果的に更新する手段を与えると、基本的な考え方を理解することは(私にとって)困難であり、さらにその有効性(何に比べて?Prolog?からCLP)を理解することは困難ですか?残念ながら、Reteアルゴリズムをこのより広い文脈で見る良い参考文献を見つけることは困難です。

Droolsのドキュメントは、残念ながらこの点であまり有益ではありません。私が見つけることができた最も多くは、「Reteアルゴリズム、Leapsアルゴリズム、およびDroolsのReteoo(およびLeaps)などの子孫は、ルールパターンをドメインオブジェクトデータに照合する非常に効率的な方法を提供します。これらは、完全に変更しないでください(ルールエンジンが過去の一致を記憶できるため)。これらのアルゴリズムは、戦いで証明されています。」非常に効率的-何と比較して?実証済みの戦い-実世界のアプリケーションを1つ指摘できますか?

この問題にもう少し光を当てるか、有効なリファレンスを提供していただければ幸いです。

20
John Donn

フォワードチェーンエンジン(Droolsなど)とバックワードチェーン(Prolog)を使用する多くの商用ビジネスルールシステムの議論は、多くの "Joeプログラマー"がIF/THEN/ELSEロジックの処理に慣れていることです。大衆に販売するのがはるかに簡単です。技術的なメリットとは関係ないと思います。

これはコミュニティーWikiとして投稿しています。これは、私の意見ではなく実際の回答ではないためです。

7
NealB

Droolsは最近、drl言語にシームレスに後方連鎖を追加しています。これで、両方の単語の利点が得られます。

それはまだプロローグのすべての機能をまだ持っていません、例えば、「カット」はありません。しかし、それは統一であり、派生ツリーの結果は、プロローグの人々が期待するように機能します。つまり、推移的閉包の完全なサポートです。そして、表のサポート、カット、式の統一などの機能は成長し続けます。

フォワード「リアクティブ」またはバックワード「クエリ」ルールを個別に使用することも、一緒に使用することもできます。リアクティブルールはクエリの結果と結合できます。

追加したことの1つは、クエリをリアクティブビューとして完全に具体化できることです。したがって、transititveクロージャークエリを呼び出すことができます。トランジットクロージャークエリは反応的に開いたままになり、根底にあるデータの変化に応答します。クエリを再ポーリングする必要はありません。

「後方連鎖」が追加された時期については、新規およびノー​​トワースのセクションを参照してください。 http://blog.athico.com/2012/05/drools-540final-released.html

Droolsのようなハイブリッド推論システムがある場合、あなたの質問はより良い言葉で書かれていると思います、なぜ他のものを使いたいのですか? http://blog.athico.com/2012/05/drools-54-artificial-intelligence.html

4
Mark Proctor

PrologはDroolsよりも強力であることに同意します。しかし、Droolsは他の一般的なエンタープライズアプリケーションとの高度なフロントエンドツールと統合により、Droolsはエンタープライズクライアントにとって魅力的だと思います。これらのルールはデータベースに永続化され、多くのDroolsエンジンがそれらをすぐに使用できると思います。

ランタイム中にルールを変更することは、Droolsエンジンを使用するかなり動的な方法であり、サポートされています。 Prolog couldにも同様のシステムがあると思いますが、これは私の知る限りではありません。これらのルールまたは編集されたルールはどこに行きますか?プログラムのdbで主張された?再起動すると、これらのルールは失われます。それらを共有データベースに永続化し、必要に応じてプログラムにアサートしますか? Prologは使用できるかもしれませんが、Droolsはすでにエンタープライズアプリケーションスタックにうまく統合されています。


「PrologはDroolsよりも強力であることに同意します。しかし、Droolsは他の人気のあるエンタープライズアプリケーションとの優れたフロントエンドツールと統合により、エンタープライズクライアントにとって魅力的だと思います。」

上記の私のコメントに従って、DroolsはPrologと同じ方法で目標ベースの派生ツリーを実装します。さらに、Droolsは、他のほとんどのPrologシステムではできない、そのdeivationツリーをうまく利用できます。 Droolsは派生ツリーをビューに具体化し、基本的な用語の変更に応じてリアクティブな更新を受け取ることができます。

3
DaveEdelstein

Droolsは [〜#〜] clips [〜#〜] に基づいて開始されました。 CLIPSは古い「 実動システム 」であり、すべての実動システムと同様に、フォワードチェーンシステムです。元祖がアルゴリズムが知的財産である会社に勤めに行くことになったので、Reteに関する多くの研究は「暗くなりました」。 Reteバージョン3は [〜#〜] fico [〜#〜] スコアを作成する人々が所有しているので、そうです、それは「戦いで証明された」ことです。

2
Tangurena