我有一条规则,当满足某一条件时,收回成千上万的事实。此规则位于一个模块中,其中包含两个使用"not“语句的其他规则。我的问题是:
谢谢!
发布于 2014-09-01 15:43:40
如果不知道规则中使用撤回事实类型的模式,就不可能得到准确的答案。
显然,如果Fact是那种类型,并且规则#2和规则#3只包含
not Fact(...constraints...)在从工作内存中删除最后一个满足约束的事实(如果有的话)之前,不应该发生巨大的事情:然后可能必须创建一个额外的节点,这取决于其他什么是非CE);这种情况可能会继续下去,取决于非CE之后的内容,并导致终端节点,即激活。
如果像这样的模式
Fact(...constraints...)在任何这些规则中,撤回一个事实(如果满足这些限制,如果有的话)将导致对网络中任何未决的激活和节点的删除立即采取一些行动,前提是它之前已经包括在内。
在Rete网络中,没有什么可以避免发生的事情。
尽管如此,必须收回成千上万的事实是相当可怕的。还有多少人?这可能是比较便宜的挑选少数,并重新开始在一个全新的Rete。或者使用一种设计模式,它不会同时将所有的数千人暴露给引擎。或者别的什么。
发布于 2014-09-15 22:38:50
我们已经编写了一个延迟算法,它避免了部分匹配和激活的复制,直到规则可能已经准备好触发为止。由于懒惰,您可以在评估规则时使用显着性来延迟。http://blog.athico.com/2013/11/rip-rete-time-to-get-phreaky.html
https://stackoverflow.com/questions/25607578
复制相似问题