规则"一个"
activation-group "Harris"
salience 10
when
$p : Person(age < 10);
then
$p.setDiscount(0.1);
端
规则&#34;两个&#34;
activation-group "Harris"
salience 10
when
$p : Person(age > 10);
then
$p.setDiscount(0.2);
端
当我通过KSession.insert(Object)将一些人插入工作内存时,只评估第一个Person,其他人只是被忽略。我对Drools激活组的理解是,如果我有X个属于同一激活组的规则,每个规则具有不同的显着值, 人将按规则处理,最高者处理 显着性将被解雇,其余部分将被忽略。一旦这样 完成下一个人将通过并重复该过程。什么 我遇到的是第一个触发任何规则的人 activation-group将禁用整个激活组,不再进一步 人员将被处理。 有什么建议吗?
答案 0 :(得分:0)
&#34;激活组中只有一个规则将被触发,即第一个触发规则取消同一组内其他规则的任何现有激活。&#34;这很明确。
如果您想对许多人事实做同样的事情,请不要使用激活组。
(a)只插入一个,解雇所有规则 - 重复。
(b)插入许多人,解除所有规则,但在每个后果中撤回一个人事实。
显着性几乎总是很糟糕。使用逻辑(约束)来细化控制规则触发顺序。
答案 1 :(得分:0)
激活组在您的情况下不起作用。令人震惊地一个接一个地插入并激活AllAllles,这将起作用,因为考虑到KnowledgeBase中的新更新,它将启动规则。(不推荐)。
但是我建议您编写独特的规则,以避免 activation-group 。您也可以尝试扩展规则以更具建设性。