问题标签 [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.

0 投票
1 回答
87 浏览

r - 在模拟中快速处理规则

如果您在离散事件模拟中只有几条规则,这并不重要,但如果您有很多规则并且它们可能相互干扰,您可能想要跟踪它们的“哪个”和“哪里”被使用。

  • 有人知道如何像原始函数一样快速获取下面的代码吗?
  • 有比 更好的选择eval(parse(...)吗?

这是一个简单的例子,它表明我的速度降低了 100 倍。假设您运行模拟并且(许多规则中的一个)是:选择时间少于 5 的状态:

注意:我不认为我需要一个额外的rete 包来有效地做簿记。但如果有其他意见,请告诉我...

0 投票
0 回答
79 浏览

magento - 如何在 Magento 中扣除根西岛的增值税?

如果客户来自根西岛,我的 Magento 不会从订单中扣除增值税。Magento 隐藏TAX 但不扣除?有什么建议么?

0 投票
1 回答
74 浏览

clips - CLIPS- How to understand constructs-to-c output files?

I'm using constructs-to-c command in top-level to convert my constructs to c code. Till the moment I know how to use these source files as black boxes. I think in these files, CLIPS implement the RETE algorithm, right? I'd like to know how can I understand the name convention and the contents of these files? I found no explanation to this in the reference manuals. This is the only explanation I found to this point but I didn't understand a lot from the second point. I have a good understanding of RETE algorithm, though. Also is there someway to visualize the RETE network CLIPS creates for my constructs? Thanks

0 投票
1 回答
50 浏览

drools - Drools 是否跟踪上一次运行的比赛?

让我描述一下我的用例的抽象,这样问题的意图就会很清楚。

用例:

我只想将 Drools 用于检查工作内存中的匹配项,因此仅用于查询部分。对象创建部分不受 Drools 控制。我只问 Drools (i) 或 (ii) 中的哪一个匹配(或两者都匹配),然后决定要做什么。

因此,首先我创建了一个 A 类型的 objA 并将其放入工作内存中。

现在我向 Drools 查询匹配项。

状态 0) 只会匹配 (i),我将创建另一个 A 类型的对象并放入工作内存中。

状态 1) 现在情况 (i) 和 (ii) 都匹配。假设我只使用 (ii) 并创建 objB 并放入工作内存中。

状态 2) 在这个阶段,Drools 是否会再次进行计算以检查条件 (i) 是否匹配,或者它将使用之前运行的查询中的匹配信息?

从理论上讲,我想知道 Drools 如何管理增量模式匹配。

  • 另外,我如何要求 Drools 给我模式匹配并使用上一次运行的匹配?
  • 如果 Drools 给我一个匹配并且我不使用它,例如状态 1 中的 match (i),Drools 可以将匹配保留在一边并跳过重新计算吗?

请让我知道我是否应该提供更多信息。

0 投票
1 回答
197 浏览

clips - 没有beta网络的rete网络?

我正在尝试为一个示例规则绘制一个 Rete 网络,该规则在不同模式的变量之间没有绑定。我知道 beta 网络用于确保不同模式的弯曲变量是一致的。

在 R1 中,两种模式之间没有绑定变量,那么我应该如何在 Rete 网络中组合它们的结果呢?在 R2 中,两条规则绑定了变量,而第三条则没有。如何在网络中结合三个规则?对于这种情况,我搜索了 Rete 网络示例,但没有找到。我试图绘制网络,下面是我的网络。这样对吗?

更新:基于加里回答的新网络

在此处输入图像描述 谢谢

0 投票
1 回答
702 浏览

drools - Drools RETE 算法混淆

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

在此处输入图像描述

文档说:

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

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

下面说是上图的drl条件:

$person : Person( favouriteCheese == $cheddar )

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

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

2017 年 6 月更新的问题:

3)我相信上面的图表代表了joinNode,如果上面的工作流程被改变以适应notNode,那么notNode将如何表示?

0 投票
2 回答
1150 浏览

prolog - Prolog backtracking VS Rete backtracking

In my class I have been taught the Prolog backtracking algorithm and the Rete forprop algorithm, but I have also been told that Rete can be used to do backprop.

How does that work? In which ways is it similar / different to Prolog backtracking?


For example, this is one of the exercises I have been given:

The goal is given the following facts find the origin of the alien:

In Prolog, we would solve it by pattern matching the goal origin(X) against the RHS of the rules. The rule matches against R1, R2 and R3, so first R1 will be triggered, and we would try to resolve the subgoals 24fingers and antennas which would fail.

Then we would go backtrack to the beginning and trigger R2, which eventually will fail, and finally backtrack and trigger R3, which succeeds.

So X ends up binded to venus in a successful query, and the algorithm ends.


Now, how would we solve the same exercise using the rete backprop algorithm?

I naively assume that we would use a list of subgoals, starting with origin(X), to start triggering rules whose RHS matches the subgoals.

But it isn't clear to me how the Rete algorithm would take care of backtracking when some subgoals fail, or how would it know that it has succeed once it resolves a certain subset of goals.

0 投票
1 回答
181 浏览

java - 如何读取 Drools 内存以检测部分匹配的规则

我希望能够以这样一种方式读取 Drools 内存,即使该规则最终没有触发,我也可以检测到哪个条件匹配。

说我有这个规则:

如果我只在内存中插入一个对象“FirstFact”并调用 fireAllRules(),则不会触发该规则。但是,我仍然想追查这条规则的第一个条件是否匹配。

我知道这是一个奇怪的要求,可能需要一些时间来开发,因为它可能并不简单,但如果有办法做到这一点,我很感兴趣。

我正在考虑访问 Drools 内存并访问 Rete 树中包含的所有条件,但我不确定这是否是一个好方法甚至可能。

谢谢 !

0 投票
1 回答
65 浏览

ibm-odm - 如何更新列表状态,以便 Rete 拾取其中添加的对象以重新评估规则

我正在使用 IBM 8.9.2,我们有一个场景,我需要根据列表 Y 中的值创建列表 X,同时对这些值进行分组。
例如,假设我有一个城市列表,并且每个City对象(在cityList列表中)都有一个属性 - 国家。现在我想反转关系并创建一个国家列表,该列表由具有包含城市列表的国家对象组成。

我的规则是


将国家添加到 countryList 不会更新其对象状态,因此不会在为 cityList 的第一个城市运行规则后将其重新引入议程以重新评估规则。
因此,结果是一个国家列表,其中为每个城市创建了一个新的 Country 对象,而不是计划的分组。
我的目标是在内存中插入 cityList 和 countryList 并打开 Rete 以便模式匹配可以在内存中即时发生。

寻找有关如何实现这一目标的指示。

0 投票
1 回答
342 浏览

algorithm - Rete算法的时间复杂度是多少?

Rete 算法是一种高效的模式匹配算法,可以将大量模式集合与大量对象集合进行比较。它还用于我现在正在探索的专家系统外壳之一:is drools.

基于我拥有的规则数量,算法的时间复杂度是多少?

这是 Rete 算法的链接:http ://www.balasubramanyamlanka.com/rete-algorithm/ 也适用于 Drools:https ://drools.org/