gpt4 book ai didi

java - 为什么 drools 规则引擎即使在循环内给出也只执行一次?

转载 作者:行者123 更新时间:2023-11-30 10:36:56 25 4
gpt4 key购买 nike

我正在尝试学习 drools,以便在需要循环执行许多 boolean 表达式的项目中使用。我当前的代码如下。这只是为了测试和学习概念。语句 kSession.fireAllRules(); 应该多次执行规则文件,因为它在 for 循环内,但它只执行一次。我在这里做错了什么?

Java代码

        List outList = new ArrayList<Boolean>();
kSession.setGlobal("outList", outList);
List rulesList = new ArrayList<Boolean>();
kSession.setGlobal("rulesList", rulesList);

for (int i = 0; i < 10; i++) {

rule1=!rule1;
rule2 =!rule2;
rule3 =!rule3;
rulesList.clear();
rulesList.add(rule1);
rulesList.add(rule2);
rulesList.add(rule3);

kSession.insert(droolsIntroduction);
kSession.fireAllRules();

boolean result1 = (boolean) outList.get(0);
boolean result2 = (boolean) outList.get(1);
boolean result3 = (boolean) outList.get(2);

}

规则文件:

global String topicLevel
global java.util.List rulesList
global java.util.List outList

rule "Drools Introduction"
when
$droolsIntro : DroolsIntroduction( measurename == "measure1")
then

boolean result1= (boolean)rulesList.get(0) && (boolean)rulesList.get(1) && (boolean)rulesList.get(2)
boolean result2= result1 && (boolean)rulesList.get(2);
boolean result3= result1 && (boolean)rulesList.get(2);
//outList.clear();
outList.add(result1);
outList.add(result2);
outList.add(result3);

end
function String getDefaultIfNull(String topicLevel) {
return topicLevel == null ? "Moderate" : topicLevel;
}

最佳答案

规则不会通过调用 Drools 引擎来“执行”。由 Drools 引擎决定要“触发”哪些规则。只要规则中评估的任何事实没有变化,就不会再次触发该规则。

但是,您可以处理 session ,创建另一个 session 并再次执行,可能会在您的数据中发生一些变化。这个扩展循环将包含一些您没有显示的代码,所以我只能在这里画出草图:

for( int i =... ){
KieSession kSession = ...;
List outList = new ArrayList<Boolean>();
kSession.setGlobal("outList", outList);
List rulesList = new ArrayList<Boolean>();
kSession.setGlobal("rulesList", rulesList);
rule1 = ...;
kSession.insert(droolsIntroduction);
kSession.fireAllRules();
boolean result1 = ...;
kSession.dispose();
}

注意 我不确定您是否走在正确的轨道上。使用规则引擎不一定能最好地评估许多 boolean 表达式。

关于java - 为什么 drools 规则引擎即使在循环内给出也只执行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40378581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com