Drools激活组无法按预期工作

时间:2017-04-26 08:18:12

标签: drools

规则"一个"

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将禁用整个激活组,不再进一步 人员将被处理。 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

&#34;激活组中只有一个规则将被触发,即第一个触发规则取消同一组内其他规则的任何现有激活。&#34;这很明确。

如果您想对许多人事实做同样的事情,请不要使用激活组。

(a)只插入一个,解雇所有规则 - 重复。

(b)插入许多人,解除所有规则,但在每个后果中撤回一个人事实。

显着性几乎总是很糟糕。使用逻辑(约束)来细化控制规则触发顺序。

答案 1 :(得分:0)

激活组在您的情况下不起作用。令人震惊地一个接一个地插入并激活AllAllles,这将起作用,因为考虑到KnowledgeBase中的新更新,它将启动规则。(不推荐)。

但是我建议您编写独特的规则,以避免 activation-group 。您也可以尝试扩展规则以更具建设性。