当前位置: 代码迷 >> 综合 >> 本体推理算法 RETE 算法研究
  详细解决方案

本体推理算法 RETE 算法研究

热度:2   发布时间:2023-12-28 00:28:58.0

       RETE算法是当前比较流行的本体推理算法,目前效率最高的前向链推理(演绎法Forward—Chaining)算法,其核心思想是将分离的匹配项根据内容动态构造匹配树,以达到显著降低计算量的效果,是由美国卡耐基.梅隆大学的Charles L.Forby(1979年)在其博士论文中提出。

1.RETE算法来源

        在推理系统中,效率是一个重要的问题,不管一个系统的其他方面如何好,如果推理匹配过程较长,导致用户响应时间过长,则这个系统就不会被使用。RETE算法正是为了解决规则模式如何快速匹配事实这一核心问题,它是作为Markov算法的改进而提出来的。Markov算法是由Markov发明,其基本思想就是把一组按优先级排序的规则顺序作用于输入串,如果最高优先级的规则不适用,则尝试次高优先级的规则,依次类推。如果最低优先级的规则不适用输入串或使用了一个终止规则,则算法结束。Markov算法具有明确的规则控制策略,它总是严格按照规则的优先级别来进行匹配,这对于规则数量较多或规则复杂的推理系统来说就是低效的,因为其每一次匹配过程都是针对整个知识库内容将其所有规则严格按照优先级别重新匹配一次。

2.RETE算法基本描述

        RETE模式匹配算法是在模式利用推理机的时间冗余性和规则结构的相似性,通过保存中间去处来提高推理效率的一种模式匹配算法。它的实现就是通过存储不断循环匹配过程的状态,并且只重新匹配事实库中的新事实。

        在模式匹配中,规则的前提中可能会有很多相同的模块,因此在匹配规则前提时,将进行大量的重复计算,这样就带来了时间冗余性问题。例如:

        RULEl:if(A>B)and D or C then E=100
        RULE2:if(A>B)and(B<C)then E=200
        RULE3:if(!(A>B))or(B<C)then E=300
        若要匹配这3条规则时,则要对(A>B)进行3次匹配,对(B<C)进行2次匹配。
        而RETE采用的方法为令MI=A>B:M2=B<C:则对应规则可变为
        RULEl:if M1 and D or C then E=100
        RULE2:if M1 and M2 then E=200
        RULE3:if(!M1)or M2 then E=300

        这样的推理避免了在每次进行模式匹配都重复计算相同表达式,而只要检测相关系数是否发生变化来决定是否更新表达式。

3.算法基本原理

        RETE在拉丁语中是“Net",有网络的意思。RETE算法可以分为两部分:规则编译(rule compilation)和运行时执行(runtime execution)。编译算法描述了规则如何在Production Memory中产生一个有效的辨别网络。用一个非技术性的词来说,一个辨别网络就是用来过滤数据。方法是通过数据在网络中的传播来过滤数据。在顶端节点将会有很多匹配的数据。当我们顺着网络向下走,匹配的数据将会越来越少。在网络的最底部是终端节点mlf261。
规则编译:

        网络中非根结点的类型有1-input结点(也称为alpha结点)和2-input结点(也称为beta结点)两种。l-input结点组成了Alpha网络,2一input结点组成了Beta网络。

        每个非根结点都有一个存储区。其中1-input结点有alpha存储区和一个输入口:2-input结点有left存储区和right存储区和左右两个输入口,其中left存储区是beta存储区,right存储区是alpha存储区。存储区储存的最小单位是工作存储区元素(Working Memory Element,简称WME),WME是为事实建立的元素,是用于和非根结点代表的模式进行匹配的元素。Token(令牌)是WME的列表,包含有多个WME,用于2-input结点的左侧输入。事实可以做为2一input结点的右侧输入,也可以做为I-input结点的输入。每个非根结点都代表着产生式左部的一个模式,从根结点到终结点的路径表示产生式的左部。

运行时执行:

        推理引擎在进行模式匹配时,先对事实进行断言,为每一个事实建立WME,然后将WME从RETE鉴别网络的根结点开始匹配,因为WME传递到的结点类型不同采取的算法也不同,所以需要对alpha结点和beta结点处理WME的不同情况而分开讨论。

       1)如果WME的类型和根节点的后继结点TypeNode(alpha结点的一种)所指定的类型相同,则会将该事实保存在该TypeNode结点对应的alpha存储区中,该WME被传到后继结点继续匹配,否则会放弃该WME的后续匹配;
        2)如果WME被传递到alpha结点,则会检测WME是否和该结点对应的模式相匹配,若匹配,则会将该事实保存在该alpha结点对应的存储区中,该WME被传递到后继结点继续匹配,否则会放弃该WME的后续匹配:
         3)如果WME被传递到beta结点的右端,则会加入到该beta结点的right存储区,并和left存储区中的Token进行匹配(匹配动作根据beta结点的类型进行,例如:join,projection,selection),匹配成功,则会将该WME加入到Token中,然后将Token传递到下一个结点,否则会放弃该WME的后续匹配:
        4)如果Token被传递到beta结点的左端,则会加入到该beta结点的left存储区,并和right存储区中的WME进行匹配(匹配动作根据beta结点的类型进行,例如:join,projection,selection),匹配成功,则该Token会封装匹配到的WME形成新的Token,传递到下一个结点,否则会放弃该Token的后续匹配;
        5)如果WME被传递到beta结点的左端,将WME封装成仅有一个WME元素的WME列表做为Token,然后按照 4) 所示的方法进行匹配:
        6)如果Token传递到终结点,则和该根结点对应的规则被激活,建立相应的Activation,并存储到Agenda当中,等待激发。

        7)如果WME被传递到终结点,将WME封装成仅有一个WME元素的WME列表做为Token,然后按照 6) 所示的方法进行匹配;

4.RETE算法的不足

        RETE算法使用了存储区存储已计算的中间结果,以空间换取时间,从而加快系统的速度。然而存储区根据规则的条件于事实的数目成指数级增长,所以当规则与事实很多时,会耗尽系统资源。

  相关解决方案