我有一条规则,可以在满足特定条件时收回数千条事实。该规则位于包含两个使用“not”语句的其他规则的模块中。我的问题是:停止激活激活
- 每当第一条规则收回事实时,rete网络是否得到重新计算?
- 这是因为其他两条规则中的“不”的陈述,或者会发生什么呢?
- 有没有办法停止重新计算激活,直到第一个规则没有更多的事实要收回?
谢谢!
我有一条规则,可以在满足特定条件时收回数千条事实。该规则位于包含两个使用“not”语句的其他规则的模块中。我的问题是:停止激活激活
谢谢!
如果不知道使用收回事实类型的规则中的模式,则不可能得到精确的答案。
显然,如果Fact
是类型和规则#2,#3只包含
not Fact(...constraints...)
什么巨大的应该发生的,直到最后这些事实的事实(即满足约束条件,如果有的话)被移除从工作记忆:然后可能必须创建一个额外的节点,取决于什么是不是CE);这可以继续,取决于非CE之后的内容并且导致终端节点,即激活。
如果像
Fact(...constraints...)
的图案是在任何的这些规则,缩回事实(满足这些约束,如果有的话)会导致在网络中的节点的任何待决的激活和去除一些立即采取行动,前提是它已经被包括在内。
你不能在Rete网络中避免发生事件。
也就是说,必须收回成千上万的事实是非常可怕的。剩下多少?挑选少数几个并从一个全新的Rete开始,可能会更便宜。或者使用一次不会将所有数千个数据同时公开给引擎的设计模式。或者是其他东西。
我们编写了一个懒惰算法,避免重新生成部分匹配和激活,直到规则可能准备好触发。懒惰,你可以使用突出显示来评估规则时延迟。 http://blog.athico.com/2013/11/rip-rete-time-to-get-phreaky.html