下面我们通过图1从存储空间大小、添加一个工作内存元素的开销以及删除一个工作内存元素的开销三个方面对Rete算法进行分析,通过这样的分析,不仅让我们对Rete鉴别网络的流程有一个直观的认识,而且让我们对Rete算法有一个更深刻的理解。
α0 |
Root |
α1 |
α2 |
αn |
AM forα0 |
AM forα1 |
AM forα2 |
AM forαn |
。。。。。。 。。 |
。。。。。。 |
β1 |
β2 |
。。。。。。 |
βn |
β1存储区 |
β2存储区 |
。。。。。。 |
βn存储区 |
P |
图1一条规则的Rete网络实例
图中AM代表alpha存储器,Root是根节点,αi(0≤i≤n)代表第i个α节点,βj代表第j个β连结节点。在对Rete算法进行分析之前,我们先做一个假设,(1)只考虑肯定的条件;(2)只考虑一条规则;(3)常量匹配的概率约等于连接节点变量的一致性约束;(4)一个标牌只进入一个单一的节点,也就是说它只进入唯一的一个α存储器。
为了讨论的方便,这里我们先规定一些符号:我们用ai(0≤i≤n)代表存储器αi的大小,bj(1≤j≤n)代表存储器βj的大小。用Mm,n表示当一个标牌从第m个α结点进入鉴别网络时的匹配次数,Sn表示在有n+1个α存储器的存储空间的大小。pk(1≤k≤n)表示标牌通过βk连结结点的概率。用C代表一个规则中的条件的个数,P代表一个规则库中规则的数目,W代表工作存储器中事实的数量。在最坏情况下,用归纳法,第i(1≤ i ≤C-1)个双输入结点的β-存储器中有Wi标牌,每个标牌中含有i个工作存储器元素。因此总的比较次数为:
因此Rete算法基于标牌数目的工作存取器效率为O(Wc),同理可得,基于结点数目的规则库执行效率为(P),基于标牌数目的规则库执行效率也为(P),基于一次激活规则的工作存储器时间效率为O(W2c-1),基于一次激活的规则库的时间效率为O(P)。
下面我们来分析Rete算法的存储空间大小,从图3中我们可以得到,联结结点β1的存储区的大小是有α0的存储区和α1存储区的大小决定,则β1的存储区的大小为
b1=a0*a1*p1;b2=b1*a2*p2=a0*a1*a2*p1*p2;b3=b2*a3*p3=a0*a1*a2*a3*p1*p2*p3;
以此递推下去可得:
则整个鉴别网络的存储空间大小为:
下面我们来分析一下当添加及删除一个工作存储器元素(WME)时所需要匹配的次数。首先我们来分析添加一个WME,当一个WME进入α0时,此时相当于a0=1,它要与a1中的内容进行匹配,匹配次数k1=a1,此时b1=a0*a1*p1=a1*p1,然后β1又α2与中的记录进行匹配,匹配次数k2=ba1*p1*a2,此时b2=b1*a2*p2=a1*p1*a2*p2,以此类推下去,可得则有,
,同理可得:
当WME从α2及以后结点开始,它就直接利用之前的匹配结果,如:
当m≥2时,我们用通式来表示当一个标牌从第m个α结点进入鉴别网络时的匹配次数为:
我们假设添加一个标牌的开销为该标牌添加到每个α存储器的平均值,则有:
下面我们来分析删除一个WME的开销,当一个负标牌进入一个连结结点时会产生:(1)和连结结点相对应的存储器进行匹配并生产新的复杂的负标牌,该过程与添加一个WME的过程完全一致。(2)查找当前存储器一删除和该负标牌相匹配的标牌,该额外的操作在添加一个WME中是没有的。因此删除一个WME的开销比添加一个WME的开销多一个查找β存储器的开销。而查找一个β存储器的开销为:
其平均查找开销为:
所以删除一个WME的平均开销为:Mn+Rn