最近面试的时候,经常被问及自己参加的项目中rete算法的原理,但是RETE算法是一个比较复杂的算法,在短时间内不能阐述的足够清晰,在这里做个简单的介绍
。转载请注明来自 http://chillwarmoon.iteye.com
RETE算法是一个用来实现产生式规则系统的高效模式匹配算法。该算法是由卡内基美隆大学的Charles L. Forgy在1974年发表的论文中所阐述的算法。RETE算法提供了专家系统的一个高效实现。
规则推理引擎做为产生式系统的一部分,当进行事实的断言时,包含三个阶段:匹配、选择和执行,称做match-select-act cycle。RETE算法可以对匹配阶段进行高效实现,下面从鉴别网络和模式匹配过程两个方面对该算法进行介绍。
鉴别网络(如下图所示):
由RETE算法在进行模式匹配时,是根据生成的鉴别网络来进行的。网络中非根结点的类型有1-input结点(也称为alpha结点)和2-input结点(也称为beta结点)两种。1-input结点组成了Alpha网络,2-input结点组成了Beta网络。
每个非根结点都有一个存储区。其中1-input结点有alpha存储区和一个输入口;2-input结点有left存储区和right存储区和左右两个输入口,其中left存储区是beta存储区,right存储区是alpha存储区。存储区储存的最小单位是工作存储区元素(Working Memory Element,简称WME),WME是为事实建立的元素,是用于和非根结点代表的模式进行匹配的元素。Token是WME的列表,包含有多个WME,(在Forgy的论文中,把Token看成是WME的列表或者单个WME,为了阐述方便,本文将把Token只看成WME的列表,该列表可以包含一个WME或者多个WME),用于2-input结点的左侧输入。事实可以做为2-input结点的右侧输入,也可以做为1-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)所示的方法进行匹配;
以上是RETE算法对于不同的结点,来进行WME或者token和结点对应模式的匹配的过程。
分享到:
相关推荐
Drools-Rete 算法简介 Drools-Rete 算法是一种前向规则快速匹配算法,其匹配速度与规则数目无关。Rete 算法通过形成一个 Rete 网络进行模式匹配,利用基于规则的系统的两个特征,即时间冗余性(Temporal redundancy...
Rete算法,作为高效模式匹配的核心技术,在IT领域尤其是规则引擎设计中占据着举足轻重的地位。本文将深入解析Rete算法的关键概念、工作原理及其在现代规则引擎中的应用。 ### Rete算法概述 Rete算法是一种公开领域...
**URULE:基于RETE算法的纯Java规则引擎** URULE是一款强大且灵活的规则引擎,它采用RETE算法作为核心实现,旨在帮助开发者高效地处理业务规则的编写、管理和执行。RETE( Rapid Entrepreneurial Technology ...
URULE是一款基于RETE算法的纯Java规则引擎,提供规则集、决策表、决策树、评分卡,规则流等各
标题中的“行业分类-设备装置-一种结合Rete算法的RDF数据分布式并行推理方法”揭示了这个压缩包文件涉及的主要领域是信息技术,特别是与数据处理和智能设备相关的技术。Rete算法是一种用于快速匹配模式的算法,常...
智能环境下的分布式Rete算法研究,主要针对在智能环境中基于Rete算法的规则推理引擎在处理大量数据时,由于需要将数据集中到一个中心节点(sink节点)而带来的数据传输量过大的问题。Rete算法作为一种高效的模式匹配...
Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则,从而便于学习和理解。并且,还可以将 Java 代码直接...
《Rete算法在故障诊断系统中的应用研究》 在信息技术高速发展的今天,复杂系统的故障诊断已成为保障设备稳定运行的关键。本文主要探讨了如何利用Rete算法优化专家系统,特别是基于规则的专家系统中的模式匹配效率,...
标题中的“基于RETE算法的纯Java规则引擎”是指一种使用RETE(Rapid Einstein Truth Maintenance System)算法实现的规则引擎,它完全用Java编程语言编写。RETE算法是一种高效的事实匹配算法,常用于专家系统和业务...
该项目是URULE规则引擎的源码,采用Java语言开发,辅以JavaScript、HTML、...URULE基于RETE算法,提供规则集、决策表、决策树、评分卡等多种规则表现工具,并支持基于网页的可视化设计,适用于快速开发复杂的业务规则。
《Rust语言实现Rete算法:rusty-rete深度解析》 在计算机科学领域,尤其在人工智能和专家系统中,Rete算法是一个重要的知识表示和推理机制。它以高效的模式匹配能力著称,能快速处理大量规则以进行复杂的逻辑推理。...
随着机器学习技术的发展,尤其是当系统需要处理大规模数据集时,Rete算法的作用变得尤为重要。但是,随着规则数量的增加,传统Rete算法在处理这些规则时可能会遇到性能瓶颈。 #### Rete算法的关键概念 Rete算法的...
URule是一款纯Java规则引擎,它以RETE算法为基础,提供了向导式规则集、脚本式规则集、决策表、交叉决策表(PRO版提供)、决策树、评分卡及决策流共六种类型的规则定义方式,配合基于WEB的设计器,可快速实现规则的...
在Erlang这种并发并行处理能力强大的编程语言中,实现RETE算法具有很大的潜力。 Erlang是一种静态类型的函数式编程语言,由Ericsson开发,特别适合构建高可用、分布式、容错性强的系统。Erlang的进程模型和消息传递...
在本研究论文中,作者对动态演化系统中的规则引擎进行了深入探讨,并针对Rete算法存在的内存限制和快速响应用户需求的问题提出了改进措施。为了更好地理解文章内容,我们需要首先了解几个关键概念:Rete算法、规则...