2

droolsデシジョンテーブルのドキュメント(リンク)には、デシジョンテーブルで最初に一致する行を選択できると記載されています。

各行はルールであるため、同じ原則が適用されます。ルールエンジンがファクトを処理するときに、一致するルールが発生する可能性があります。(これに混乱する人もいます。ルールが実行されたときにアジェンダをクリアし、最初の一致のみがアクションに影響を与える非常に単純なデシジョンテーブルをシミュレートすることができます。)

これはどのように行われますか?設定Sequential=trueしましたが、他に何をする必要があるのか​​わかりません。

4

2 に答える 2

2

Drools は、デシジョン テーブル ルール セットでアクティベーション グループを定義することにより、この問題 (最初に一致した行のみを選択する) を解決する方法を提供します。

回避策 maxrules=1 は、drools デシジョン テーブルをルックアップ テーブルとして使用する場合にのみ機能する可能性があります。このシナリオでは、実行できるルールは 1 つだけであるため、drools を使用しても、従来のデータベース ルックアップ テーブルを使用するよりも利点がなく、複雑さが増すだけです。

drools または一般的なルール エンジンを使用することにした場合は、「ルール」または「決定」をルール定義に移動して、その利点 (RETE エンジン、柔軟性、アプリケーション コードからのルールの分離など) を最大限に活用する必要があります。 .)

于 2013-01-12T10:03:26.560 に答える
0

最大ルールを 1 に設定して、バッチ実行の一部として FireAllRulesCommand を追加する必要があります。

   StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();

    Transaction tx = new Transaction();
    tx.setSenderBin("12345");

    List<Command<?>> commands = new ArrayList<Command<?>>();     
    commands.add(CommandFactory.newInsert( tx ));
    commands.add(new FireAllRulesCommand(1));

    ExecutionResults results = ksession.execute(
        CommandFactory.newBatchExecution(commands));

-- 編集: これを行う好ましい方法については、受け入れられた回答を参照してください。

于 2013-01-10T16:51:59.177 に答える