我有一条规则可以在满足某个条件时收回成千上万的事实。此规则位于一个模块中,该模块包含两个使用" not"声明。我的问题是:
谢谢!
答案 0 :(得分:1)
如果不知道使用收回事实类型的规则中的模式,就无法获得准确的答案。
显然,如果Fact
是那种类型,而规则#2和#3只包含
not Fact(...constraints...)
直到最后一个事实事实(满足约束条件,如果有的话)从工作内存中删除,才会发生任何巨大的事情:然后可能必须创建一个额外的节点,这取决于不是CE的其他节点);这可以继续取决于非CE之后的内容并导致终端节点,即激活。
如果是
这样的模式Fact(...constraints...)
在任何这些规则中,撤回事实(满足这些约束,如果有的话)会导致对网络中任何待处理的激活和删除节点的一些立即操作,前提是它已被包含在内。
你没有太多办法可以避免在Rete网络中发生的事情。
尽管如此,必须收回成千上万的事实是相当可怕的。剩下多少?选择少数几个并从一个全新的Rete重新开始可能会更便宜。或者使用一种设计模式,不会将所有数千个同时暴露给引擎。或者别的什么。
答案 1 :(得分:0)
我们编写了一个惰性算法,可以避免重新生成部分匹配和激活,直到规则可能已准备就绪。懒惰你可以使用显着性来延迟评估规则。 http://blog.athico.com/2013/11/rip-rete-time-to-get-phreaky.html