深入探究Jess中的Rete算法与知识工程
1. Rete算法性能分析
Rete算法的性能比简单的规则查找事实算法更难精确分析。一般来说,在第一个周期,这两种算法的性能基本相同。因为没有之前的结果可供参考,Rete算法必须对工作内存中的每个事实进行模式匹配。在最坏的情况下,即每个周期中每个事实都发生变化,且规则之间没有网络共享,后续周期的性能也相同。这意味着,如果先填充工作内存,仅运行一个周期的模式匹配器,然后重置工作内存并重新填充,Jess的效率不会很高。
但在工作内存缓慢变化、网络中有适度共享以及有效索引的典型情况下,Rete算法在第一个周期之后的所有周期中都将大大优于简单算法。其运行时间大致与R’F’P’成正比,其中R’是小于规则数量R的一个数,F’是每次迭代中发生变化的事实数量,P’是大于1但小于每条规则平均模式数量的一个数。
2. 节点索引哈希值
Jess使用一种相当复杂的数据结构来表示每个连接节点中的两个内存,它基本上是一个具有固定桶数的哈希表。有趣的是,哈希函数使用每个令牌中与每个连接节点的特定测试最相关的部分,这使得Jess在运行连接节点测试之前对令牌进行预排序。在许多情况下,可以完全避免运行部分或全部测试,因为一旦令牌被排序到哈希桶中,涉及槽数据比较的问题通常可以针对整个桶进行明确回答。
节点索引哈希值是一个与性能相关的可调参数,可以全局设置或按规则设置,它就是每个单独哈希表中使用的桶数。较小的值可以节省内存,但可能会牺牲性能;较大的值会使用更多内存,但(在一定程度上)会加快模式匹配速度。如果不明确声明值,默认值是为了实现最佳性能而选择的。
一般来说,对于可能生成许多部分匹配的规则,可能需要声明一个
超级会员免费看
订阅专栏 解锁全文
113

被折叠的 条评论
为什么被折叠?



