2017-04-26 43 views
0

规则 “一”Drools的激活组不能按预期

activation-group "Harris" 

salience 10 

when 

    $p : Person(age < 10); 

then 

    $p.setDiscount(0.1); 

规则 “两个”

activation-group "Harris" 

salience 10 

when 

    $p : Person(age > 10); 

then 

    $p.setDiscount(0.2); 

当我插入一些人员工作内存通过KSession.insert(Object),只有第一个Person被评估,其他人只是被忽略。我对Drools激活组的理解是,如果我拥有X个规则属于同一个激活组,并且具有不同的显着性值,那么每个人将按照规则处理,并且具有最高的显着性的那个将被解雇并且其余的将被忽略。一旦完成,下一个人将通过并重复该过程。我所遇到的 什么是第一个触发该激活组的 规则的人将禁用整个激活组,并且不会再处理任何人。 有什么建议吗? “

+0

除了下面的laune答案选项a之外,如果您不需要在多个'Person'实例上执行与其他规则的连接,则可以使用StatelessKieSession,为每个给定的'Person'实例执行 – tarilabs

回答

0

”只有一个激活组中的规则会触发,即第一个激发将取消同一组内其他规则的任何激活。“这很明显。

如果您想对许多Person事实执行相同的操作,请不要使用激活组。 (a)只插入一个,解除所有规则 - 重复。 (b)插入许多人员,解除所有规则,但在每个结果中收回人物事实。

显着性几乎总是不好的。使用逻辑(约束)对规则激发顺序进行细粒度控制。

+0

谢谢,现在我使用方法一,重复插入一个事实并激活,但我认为这是性能低下。方法b究竟是什么?我为每个规则RHS添加了“收回($ p)”,但它没用。 – John

+0

是什么让你认为这是“低性能”? ---“无用”是什么意思?毫无疑问,这个事实并不存在于WM中,并激发了更多规则!? – laune

+0

我为每个规则的RHS添加了“收回($ p)”,但是和以前一样,只有第一个人被解雇,其余的被忽略。 – John