2014-09-01 194 views
0

我有一条规则,可以在满足特定条件时收回数千条事实。该规则位于包含两个使用“not”语句的其他规则的模块中。我的问题是:停止激活激活

  1. 每当第一条规则收回事实时,rete网络是否得到重新计算?
  2. 这是因为其他两条规则中的“不”的陈述,或者会发生什么呢?
  3. 有没有办法停止重新计算激活,直到第一个规则没有更多的事实要收回?

谢谢!

回答

1

如果不知道使用收回事实类型的规则中的模式,则不可能得到精确的答案。

显然,如果Fact是类型和规则#2,#3只包含

not Fact(...constraints...) 

什么巨大的应该发生的,直到最后这些事实的事实(即满足约束条件,如果有的话)被移除从工作记忆:然后可能必须创建一个额外的节点,取决于什么是不是CE);这可以继续,取决于非CE之后的内容并且导致终端节点,即激活。

如果像

Fact(...constraints...) 

的图案是在任何的这些规则,缩回事实(满足这些约束,如果有的话)会导致在网络中的节点的任何待决的激活和去除一些立即采取行动,前提是它已经被包括在内。

你不能在Rete网络中避免发生事件。

也就是说,必须收回成千上万的事实是非常可怕的。剩下多少?挑选少数几个并从一个全新的Rete开始,可能会更便宜。或者使用一次不会将所有数千个数据同时公开给引擎的设计模式。或者是其他东西。