【问题标题】:Drools RETE algorithm confusionDrools RETE 算法混淆
【发布时间】:2017-09-05 17:39:35
【问题描述】:

我在理解 RETE 算法 Beta 节点 JoinNodenotNode 时遇到问题?

文档说:

有两个双输入节点,JoinNode 和 NotNode,两者都是 BetaNode 的类型。 BetaNodes 用于比较 2 个对象,它们的 领域,彼此。对象可以是相同的或不同的类型。 按照惯例,我们将两个输入称为左输入和右输入。左边 BetaNode 的输入通常是对象列表;在 Drools 这是 一个元组。正确的输入是单个对象。 两个节点可用于 实施“存在”检查。 BetaNodes 也有内存。左侧输入 被称为 Beta Memory 并记住所有传入的元组。正确的 input 被称为 Alpha Memory,它会记住所有传入的对象。

我明白了,Alpha 节点:drl 规则的各种文字条件,但上面的 BetaNodes 文档让我有点困惑。

说下面是上图的drl条件:

$person : Person( favouriteCheese == $cheddar )

查询:1) 与上述文档中解释的完全一样,两输入 Beta 节点的左右输入是什么? 我相信它指的是我认为元组是事实的事实和规则?

2) notNode 基本上是 drl 条件匹配文字条件与 not?

2017 年 9 月 6 日更新问题:

3)我相信上图代表joinNode,如果将上面的工作流程更改为适合notNode,将如何表示notNode?​​strong>

【问题讨论】:

    标签: drools rule-engine rete


    【解决方案1】:

    对应图表的条件是

    Cheese( $name: name == "Cheddar" )
    Person( favouriteCheese == $name )
    

    一旦有匹配,就会组成一个由匹配的 Cheese 和 Person 组成的新元组,如果条件中有第三个模式,则可以作为新元组进行进一步的匹配。

    非节点是断言某些事实不存在的节点。它只会触发一次。

    您可能会在网络上找到更好的“rete”描述。

    【讨论】:

    • 那么,只有经过验证的匹配的 Pojo 实例才被称为元组,而不是其他不匹配的事实(Person Cheese pojo 实例)?
    • 在上面的程序中,没有 Cheese 和 Person 对象作为输入。我的意思是在上图中,根据文档,当文档说“BetaNode 的左侧输入通常是对象列表;在 Drools 中,这是一个元组。右侧输入是单个对象时,什么是 lhs 和 rhs 输入。”
    • Laune,你为人们提供了很大的帮助,我希望你不会介意澄清我的基本概念问题 :) 我相信上图代表 joinNode,如果更改上述工作流程以适应 notNode,将如何表示 notNode ?
    • 请理解Rete是一个复杂的话题。您无需了解网络节点链接的技术细节即可使用它。知道网络代表所有(完全和完全)事实与 LHS 模式和条件的匹配就足够了。
    • 是的,我知道它可以是 drools 库,可以在不涉及算法复杂性的情况下实现,但我热衷于了解更多关于后端使用的算法并试图通过官方文档获得清晰度。跨度>
    猜你喜欢
    • 2015-12-25
    • 2011-06-28
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 2021-12-21
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多