首页 文章

Drools激活组不能按预期工作

提问于
浏览
0

规则“一”

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个属于同一激活组的规则,具有不同的显着值,则每个Person将由规则处理,而具有最高显着性的那个将被解雇,其余的将被忽略 . 一旦完成,下一个人将会通过并重复该过程 . 我所遇到的是,触发该激活组中任何规则的第一个人将禁用整个激活组,并且不会处理其他人员 . 有什么建议吗?

1 回答

  • 0

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

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

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

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

    突显几乎总是坏的 . 使用逻辑(约束)对规则触发顺序进行细粒度控制 .

相关问题