9

私は意思決定エンジン/ルール評価エンジンに取り組んでいます。例えば:

入力:顧客および顧客によって行われたすべての違反

出力:違反の結果

サンプルケースは次のようになります。

入力:顧客(Jhonny Chimpo、999-00-1111)、オフェンス(ウィンドウを壊し、ボスを平手打ち、股間でチームリードを蹴った)

出力:ピンクのスリップを取得します

したがって、私が書きたいコードは、各オフェンスと複合オフェンスのルールに基づいてさまざまなオフェンスを評価します。現在のコードは、ifステートメントとelseステートメントの単なる迷路です。そのようなビジネス上の問題はよくあることだと思います。このような問題を解決するために通常使用されるデザイン/エンタープライズパターンは何ですか?

仕様パターンですか?コードを拡張用に開いて、クリーンで柔軟にしたいと思います。

4

6 に答える 6

3

同様の問題を解決するために使用したツールを提案できます。

JBoss Droolsを見てください:http ://www.jboss.org/drools/

それはBRMSです:ビジネスルール管理システム

これが紹介ビデオです:http ://www.jboss.com/products/platforms/brms/

于 2010-01-24T11:28:21.250 に答える
3

基本的にビジネスルールは次のようになります

forall rules:
  if <condition> then doAction();

スコアを使用してすべての違反を重大度で分類する場合はどうでしょうか。おそらく、頻繁な「悪行者」に対する追加のボーナスであり、一部の違反は時間制限があり、必要なものは何でもあります。

次に、アルゴリズムの大まかなドラフトは次のようになります。

  • 顧客のすべてのスコアの合計(加重)
  • 最大と比較する

これは、多くの(場合によっては深くネストされた)if..then..elseの代わりに、データ構造を使用することで簡単になります。

于 2010-01-24T13:15:15.647 に答える
1

上記の回答のいずれかがそれほど役に立ったかどうかはわかりません。

式ツリーを使用して同様のコンポーネントを作成しました。述語を表すラムダ式を作成し、それらをすべて動的にコンパイルして実行し、それに応じて何らかのアクションをトリガーできます。このアプローチは強力で柔軟性があり、すべてのif / elseホラーを取り除きます(これは間違いなく進むべき道ではありません)。

しかし、あなたが本当に話しているのは論理プログラミングです。Prologover.NETには多数の実装があります。Prologはロジックベースの言語であり、AIアプリケーションに多く使用されており、そのパラダイムに頭を悩ませると、非常に強力になり始めます。

これらのいくつかを見てください..

于 2010-02-08T00:22:04.010 に答える
0

この「イベントベース」のルールエンジンに似たものを試すことができます

于 2010-03-06T06:28:51.560 に答える
0

RETEアルゴリズムベースのルールエンジンならどれでもあなたのケースでうまくいくと思います。あなたはよだれを試すことができます。

于 2010-05-17T17:02:14.340 に答える
-1

あなたはエキスパートシステムを開発しようとしていると思います。用語を確認してから、プロローグなどの適切なプログラミング言語を確認できます。

于 2010-01-24T11:25:00.893 に答える