问题标签 [rete]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
owl - OWL2 RL 通过 RETE 算法
我目前正在尝试通过 Rete 算法实现 OWL2 RL。我遇到了以下问题:如何实现此规则中所需的列表:eq-diff2(W3C 推荐)?
谢谢。
java - JBoss Drools 真的并行执行所有规则吗?
我已经阅读了很多关于 JBoss Drools 的文档,但找不到关于所有规则是否同时执行的明确答案(当然它们是同时触发的)。更具体地说,对于单个输入和例如 1000 条规则的规则集,在每个规则中执行“when”条件和“then”条件,一个接一个地顺序执行,或者同时并行执行。
一方面,rete 算法意味着并行性,尤其是在选择节点折叠时。然而,在节点优化之后,评估是连续的吗?并且 beta 内存和连接节点看起来应该同时执行,但它们是吗?
此外,Drools 文档谈到“顺序模式”,说默认情况下这是关闭的。那么什么是开启的,并行模式呢?并且有一个暗示线程的 maxThreads 选项。
另一方面,有人告诉我,代码不使用线程,因此是并发计算的,但大部分是按顺序执行的。
有没有人看到任何证明这种情况的文件?
谢谢!
concurrency - Rete 算法的并行版本是否有任何实现?
我对 Rete 算法进行了一些研究,发现了几篇关于使其并行化(匹配和规则触发)的论文,其中最早的论文来自 80 年代中期。但是,我在当今市场上的任何规则引擎中都找不到有关任何并行实现的任何信息。我知道并行规则触发是有问题的,但是有几个建议的解决方案。是否有任何规则引擎实现任何并行版本的 Rete?如果是这样,是哪个?如果不是,为什么不呢?实现任何显着的性能提升是否太难了,还是有其他原因?任何指向更多信息的链接表示赞赏。
java - 如何使用 Rete 算法
如何在 Java 中使用 Rete 算法?
我需要编写自己的算法实现吗?
或者是否已经实现了可用的库?
drools - Drools 规则编写最佳实践
我一直在阅读一篇关于 Drools 性能的文章(JBoss Drools – Performance and Memory Internals),它解释了如何创建 Rete 树和节点,Drools 如何对它们进行索引,以及为什么 Drools 中对象数量的增加几乎不会影响执行的总时间它。以智能方式编写的规则可以大大减少 Rete Tree 中的节点数量,从而进一步提高性能。
我想知道是否有 Drools 规则编写最佳实践,所以我可以以一种可以尽可能快地执行它们的方式编写它们。
谢谢。
drools - 当有多个“then”时,rete 算法会发生什么
以此为例,假设有一个条件说-
rete网络应该如何构建?在网络的底部,将有两个节点- 1)免费升级 2)免费饮料
这两个节点应该如何链接到“银”节点?
我见过的所有与 Rete 算法相关的例子都在谈论一个“然后”
eclipse - drools eclipse 插件:无法显示 OR 运算符的 RETE 视图
我正在尝试为 drools 业务规则系统建立一个基准,因为我必须考虑 RETE 算法的特点。Drools eclispe 插件中的 RETE 视图提供了根据 drl 显示相应 RETE 网络的机会。查看下面的代码,使用此代码 RETE 视图可以工作,但如果我用 ||-operator 替换 &&-operator,RETE 视图会显示 NullPointException。有人可以解释这种行为吗?正如我所看到的,这些语句对于 ||-operator 仍然有效。
编辑:我试图准确我的问题。RETE 网络看起来是否相同 || 或 && 被使用?
algorithm - Drools 决策表条件检查算法
我有一个关于如何评估 Drools 决策表的条件的问题。我曾认为条件是从左到右评估的,如果它检查给定规则的最左边的列是假的,它就不会检查剩余的条件。
这对我来说很重要的一个原因是将缩小范围的条件放在最左边的概念。这意味着对象会更快地退出,而不是大多数对象首先满足广泛的条件并继续检查其他条件。
然而,这不是我在单元测试中看到的行为,我将在下面概述。
这个例子很简单,并不是为了演示早期的范围缩小。
在此示例中,isNameEq 和 isValueEq 是来自 java 对象 myObject 的函数。请忽略任何轻微的 Drools 错误/缺少声明的导入,因为我知道我的测试工作正常,这个插图是传达场景的近似值。
这两个函数包括一些简单的日志记录以显示它们何时被调用。对于 name=A 和 value=3 的对象,我希望 isValueEq 函数永远不会被调用名称(最左边)列中带有 B 的规则,因为该对象不符合此条件。
但是,日志记录表明函数调用是按以下顺序进行的:
- isNameEq(A)
- isNameEq(B)
- isValueEq(1)
- isValueEq(2)
- isValueEq(3)
- isValueEq(4)
- isValueEq(5)
- isValueEq(6)
- isValueEq(7)
这听起来正确吗?我的假设是否只是错误的?这是 rete 算法和缓存评估(节点?)的一部分,因为它没有为(B,4),(B,5)调用 isValueEq?
感谢任何可以为我阐明这一点的人!
jess - 停止重新激活
我有一条规则,当满足某个条件时,它会撤回数千个事实。该规则位于一个模块中,该模块包含另外两个使用“not”语句的规则。我的问题是:
- 每次第一条规则撤回一个事实时,rete 网络是否会重新计算?
- 这是因为其他两条规则中的“非”陈述还是会发生这种情况?
- 有没有办法停止重新计算激活,直到第一条规则没有更多的事实可以撤回?
谢谢!
php - 如何在php中实现rete算法?
我的最终项目是在专家系统中实现 rete 算法
我知道rete算法正在使用工作内存,我很困惑如何在编码中实现它
我不明白 php 中的工作记忆一词
与会话相同还是应该使用 shmop?
非常感谢任何帮助或建议
谢谢