Drools-使用事实类的嵌套规则

阿努

这篇文章建议添加一些事实类作为嵌套规则的一种方式。http://drools.46999.n3.nabble.com/How-can-I-nested-rules-td4020488.html#a4020681

我想知道的是-是否可以保证“年龄和性别的女性”在“孕妇”之前执行,“孕妇”在“孕妇2”之前执行?到目前为止,我注意到我的应用程序总是如此。但是,它是在流口水文档中的某个地方记录的,还是只是等待崩溃的纸牌屋?

    rule "Age and gender women" 
    when 
        $p : Person(p1 >= 12 && p2 = 1) 
    then 
        insertLogical( new CouldHaveBeenPregnant($p) ); 
end 

rule "Pregnant" 
    when 
        $p : Person(p3 > 1) 
        CouldHaveBeenPregnant( person == $p ) 
    then 
        insertLogical( new HasBeenPregnant($p) ); 
end 

rule "Pregnant2" 
    no-loop 
    when 
        $p : Person(p4 <= P3) 
        HasBeenPregnant( person == $p ) 
    then 
        $p.setStatus("OK"); 
        update($p); 
end 

预先感谢您的帮助

编辑:我的问题出现在我必须添加一条新规则,比如说“不怀孕”时,当person不是HasBeenPregnant(person == $ p)时,我必须做些事情。推断原理有时不起作用(正如预期的那样)。因为有时“不怀孕”规则首先被执行,后来又证明该人怀孕了,即“怀孕”后来才成立。但是“未怀孕”的结果已经开始。

那么,关于如何克服这一点的任何建议?

史蒂夫

当规则全部匹配时,不能保证评估规则的顺序。但是,在上面的示例中,订单以最佳方式被强制执行。

当工作记忆中存在具有适当属性的“人”事实时,将激活第一条规则。

第二条规则只有在工作记忆中存在一个Person引用该人的事实CouldHaveBeenPregnant时才会激活仅在激活并插入规则1后,CouldHaveBeenPregnant才会在工作内存中。

同样,只有在具有匹配属性的Person引用该Person的HasBeenPregnant事实时,第三条规则才会激活HasBeenPregnant事实仅由第二条规则插入。

即,规则3直到规则2之后才能激活,规则3直到规则1之后才能激活。

这就是所谓的“推理”,是进行良好规则设计的重要工具。Mark Proctor(Drools的负责人)在这里写了一篇不错的博客文章:

http://blog.athico.com/2009/11/what-is-inference-and-how-does-it.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Drools规则填充DTO

来自分类Dev

Drools中的规则的多端

来自分类Dev

如何让Drools KnowledgeAgent检测事实?

来自分类Dev

Drools 与我的事实不符

来自分类Dev

关于积累事实的Drools复杂规则建议

来自分类Dev

当事实数据更改时,Drools 规则触发顺序

来自分类Dev

不同用户的Drools规则

来自分类Dev

Drools规则错误“意外的全局”

来自分类Dev

使用Drools Fusion计算滑动窗口中的事实数

来自分类Dev

使用Java代码访问Drools返回的事实对象

来自分类Dev

使用Drools Fusion计算滑动窗口中的事实数

来自分类Dev

使用Java代码访问Drools返回的事实对象

来自分类Dev

从主要范围(Scala)检索Drools事实

来自分类Dev

不推荐使用Drools KnowledgeBase

来自分类Dev

Drools规则语言:规则不总是被触发

来自分类Dev

Drools规则逻辑未按预期工作

来自分类Dev

Drools规则左侧的“ this”等效关键字

来自分类Dev

Drools规则有什么问题?

来自分类Dev

在Drools Expert中结合规则逻辑

来自分类Dev

如何在Drools规则中声明列表

来自分类Dev

单个规则级别的异常处理 - Drools

来自分类Dev

在 Drools 中为组执行单个规则

来自分类Dev

Optaplanner - Drools 规则列表<> memberOf List<>?

来自分类Dev

我如何在Drools中嵌套allalls?

来自分类Dev

Drools DSL-如何在规则中使用括号

来自分类Dev

使用Drools Fluent API即时更改规则的示例

来自分类Dev

找不到评估人员定义的Drools类

来自分类Dev

Drools为什么不使用Java 8?

来自分类Dev

是否有用于使用Drools的GUI?