Drools-RETE算法混乱

Drools-RETE算法混乱,drools,rule-engine,rete,Drools,Rule Engine,Rete,我在理解RETE算法Beta nodeJoinNode和notNode时遇到问题 文件说: 有两个输入节点,JoinNode和NotNode,它们都是 阳极类型。BetaNodes用于比较两个对象及其 田地,彼此之间。对象可以是相同的类型,也可以是不同的类型。 按照惯例,我们将这两个输入称为左输入和右输入。左派 一个对象的输入通常是一个对象列表;在Drools中,这是 元组。右输入是单个对象。可以使用两个节点 执行“存在”检查。阳极也有记忆。左输入 被称为Beta内存并记住所有传入的元组。右翼

我在理解RETE算法Beta nodeJoinNodenotNode时遇到问题

文件说:

有两个输入节点,JoinNode和NotNode,它们都是 阳极类型。BetaNodes用于比较两个对象及其 田地,彼此之间。对象可以是相同的类型,也可以是不同的类型。 按照惯例,我们将这两个输入称为左输入和右输入。左派 一个对象的输入通常是一个对象列表;在Drools中,这是 元组。右输入是单个对象。可以使用两个节点 执行“存在”检查。阳极也有记忆。左输入 被称为Beta内存并记住所有传入的元组。右翼 输入被称为Alpha内存,并记住所有传入的对象

我理解了,Alpha节点:drl规则的各种文字条件,但上面关于BetaNodes的文档让我有点困惑

下面是上图的drl条件:

$person:person(最喜欢的奶酪==$cheddar)

查询:1)正如上面文档中所解释的,两个输入测试节点的这些左输入和右输入是什么?我相信它指的是事实和规则,我相信元组就是事实

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

于2017年9月6日更新问题:


3)我认为上面的图表代表joinNode,如果将上面的工作流更改为适合notNode,notNode将如何表示?

与图表对应的条件是

Cheese( $name: name == "Cheddar" )
Person( favouriteCheese == $name )
一旦有了匹配,一个由匹配的Cheese和Person组成的新元组就被合成了,如果条件中存在第三种模式,那么它可以作为进一步匹配的新元组

not节点将是断言某个事实不存在的节点。它只会开火一次


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

对应于图表的条件是

Cheese( $name: name == "Cheddar" )
Person( favouriteCheese == $name )
一旦有了匹配,一个由匹配的Cheese和Person组成的新元组就被合成了,如果条件中存在第三种模式,那么它可以作为进一步匹配的新元组

not节点将是断言某个事实不存在的节点。它只会开火一次


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

因此,只有经过验证且匹配的Pojo实例才被称为元组,而不是其他不匹配的事实(Person Cheese Pojo实例)?在上述程序中,不使用Cheese和Person对象作为输入。我的意思是,在上面的图表中,根据文档,什么是lhs和rhs输入,当文档说“BetaNode的左输入通常是一个对象列表;在Drools中,这是一个元组。右输入是一个对象。”Laune,你们为人们提供了巨大的帮助,我希望你们不会介意澄清我的基本概念问题:)我相信上面的图表代表joinNode,如果上面的工作流被修改为适合notNode,notNode将如何表示?请理解Rete是一个复杂的主题。您可以使用它,而无需了解网络节点链接的技术细节。知道网络代表了LHS模式和条件的所有(完整的和完整的)事实匹配就足够了。是的,我知道drools库可以在不涉及算法复杂性的情况下实现,但我渴望了解更多关于后端使用的算法的信息,并试图通过官方文档获得清晰性。因此,只有匹配的已验证Pojo实例才被称为元组,而不是其他不匹配的事实(Person Cheese Pojo实例)?在上述程序中,arenot Cheese和Person对象不作为输入。我的意思是,在上面的图表中,根据文档,什么是lhs和rhs输入,当文档说“BetaNode的左输入通常是一个对象列表;在Drools中,这是一个元组。右输入是一个对象。”Laune,你们为人们提供了巨大的帮助,我希望你们不会介意澄清我的基本概念问题:)我相信上面的图表代表joinNode,如果上面的工作流被修改为适合notNode,notNode将如何表示?请理解Rete是一个复杂的主题。您可以使用它,而无需了解网络节点链接的技术细节。知道网络代表所有(完整和完整)事实与LHS模式和条件的匹配就足够了。是的,我知道它可以实现,drools库可以在不涉及算法复杂性的情况下实现,但我渴望了解更多关于后端使用的算法的信息,并试图通过官方文档获得清晰性。