随机开始流口水

random start in drools

目前我的 drl 文件看起来像这样有 100 多个规则。

rule "check 0"
when
   .....
then
..........
end


rule "check 1"
when
   .....
then
..........
end

rule "check 2"
when
   .....
then
..........
end

.
.
.
.

rule "check 100"
when
   .....
then
..........
end

我已经设置了sessionObject.fireAllRules(1);

所以这基本上遍历了从 rule 'check 0'rule 'check 100' 和 returns 的所有规则,只要它符合某些规则。

他们是一种让我可以从某个随机规则开始而不是每次都开始 rule 'check 0' 的方法。

我正在寻找这样的东西。

从说 rule 'check 34' 开始迭代直到 rule 'check 100' 并从规则 'check 0' 迭代到 rule 'check 33'.

测试条件并在条件为真时执行操作的想法与计算机一样古老。同样,排序动作的概念也同样古老。两者都已在现在称为 "procedural programming".

的各种版本中实现

您描述的要求满足,并且"procedural programming"正面满足。

当然,可以使 Drools 的行为非常像过程程序。因此,回答您的问题:是的,通过使用显着性是可能的。

rule "to  be fired first"
salience 999999999
when ... then ... end

只需使用递减值,这就定义了顺序。

编辑 随机触发规则的想法也不在基于规则的编程范例中。但是你可以通过从事实属性中导出显着性来模仿这个(你为什么不使用过程编程??)。

创建 class 排名的 100 个对象,字段为 int orderint rank。将 order 设置为 1..100 并将 rank 设置为 1..100.

的随机排列
rule "number 49"
salience $rank
when
    Ranking( order == 49, $rank: rank )
    ...
then ... end

对于下一个 运行,只需使用另一个排列。幸运地获得 rank==100 排名的规则将首先触发。