`
chillwarmoon
  • 浏览: 156604 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RETE算法

阅读更多
最近面试的时候,经常被问及自己参加的项目中rete算法的原理,但是RETE算法是一个比较复杂的算法,在短时间内不能阐述的足够清晰,在这里做个简单的介绍。转载请注明来自 http://chillwarmoon.iteye.com
RETE
算法是一个用来实现产生式规则系统的高效模式匹配算法。该算法是由卡内基美隆大学的Charles L. Forgy1974年发表的论文中所阐述的算法。RETE算法提供了专家系统的一个高效实现。
规则推理引擎做为产生式系统的一部分,当进行事实的断言时,包含三个阶段:匹配、选择和执行,称做match-select-act cycleRETE算法可以对匹配阶段进行高效实现,下面从鉴别网络和模式匹配过程两个方面对该算法进行介绍。

鉴别网络(如下图所示):
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是为事实建立的元素,是用于和非根结点代表的模式进行匹配的元素。TokenWME的列表,包含有多个WME,(在Forgy的论文中,把Token看成是WME的列表或者单个WME,为了阐述方便,本文将把Token只看成WME的列表,该列表可以包含一个WME或者多个WME),用于2-input结点的左侧输入。事实可以做为2-input结点的右侧输入,也可以做为1-input结点的输入。
每个非根结点都代表着产生式左部的一个模式,从根结点到终结点的路径表示产生式的左部。
rete


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

1)如果WME的类型和根节点的后继结点TypeNodealpha结点的一种)所指定的类型相同,则会将该事实保存在该TypeNode结点对应的alpha存储区中,该WME被传到后继结点继续匹配,否则会放弃该WME的后续匹配;

2)如果WME被传递到alpha结点,则会检测WME是否和该结点对应的模式相匹配,若匹配,则会将该事实保存在该alpha结点对应的存储区中,该WME被传递到后继结点继续匹配,否则会放弃该WME的后续匹配;

3)如果WME被传递到beta结点的右端,则会加入到该beta结点的right存储区,并和left存储区中的Token进行匹配(匹配动作根据beta结点的类型进行,例如:joinprojectionselection),匹配成功,则会将该WME加入到Token中,然后将Token传递到下一个结点,否则会放弃该WME的后续匹配;

4)如果Token被传递到beta结点的左端,则会加入到该beta结点的left存储区,并和right存储区中的WME进行匹配(匹配动作根据beta结点的类型进行,例如:joinprojectionselection),匹配成功,则该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和结点对应模式的匹配的过程。

分享到:
评论
13 楼 chillwarmoon 2007-12-30  
在jamocha规则引擎中采用了基于插槽位置的模式匹配方法,在建立rete网络时,输入的是规则所对应的对象,对于该对象中的每一个CE,有如下的处理:
一 建立alpha网络
(1)对于第一次出现的变量,建立被绑定元素;
(2)对于出现的字面量约束,建立Alpha结点;如果rete网络中有相同约束的结点,则共享节点;
(3)将建立的所有被绑定元素加入到规则中。

二 建立beta网络
(1)对于非第一次出现的变量,建立绑定元素,并将被绑定元素的属性值填充至绑定元素;
(2)依据不同的CE和约束类型建立不同的beta结点;填充与该CE对应的绑定元素列表到该beta结点;
(3)连接beta结点到rete网络。

PS:目前做为规则引擎jamocha的开发人员,主要负责rete网络和模式匹配。如果大家感兴趣,可以去http://sourceforge.net/projects/jamocha看看。
12 楼 gb1981 2007-12-23  
能不能把Rete网络的编译算法解释一下?
即现在已经给定了一些事实、模式和规则,rete网络是如何构造的?
11 楼 chillwarmoon 2007-12-22  
gb1981 写道
我看过网上的文章,感觉你的文章写的不错。 关于rete算法,我还看过sina博客“小爽的老公”关于rete算法的文章: http://blog.sina.com.cn/s/blog_4a7a7aa30100089g.html。 我对rete算法,其中最开始的一点有疑惑: rete算法中的用来构造alpha节点的模式,他的顺序是有何要求的?如果没有要求,那么这个内存里的rete网络如果遇到模式为P1^P2和P2^P1,是怎么构造beta节点的?
<br/>
<br/>
顺序没有要求,但是对于规则的优化,最好是将具有相同事件类型结点下的模式的顺序保持一致。如果遇到同一事件类型下的,类似于(A)(B) 和(B)(A)这样的模式,一般是不能进行alpha结点共享的。如果有什么好的alpha结点共享的算法,可以一起讨论。
10 楼 gb1981 2007-12-20  
我看过网上的文章,感觉你的文章写的不错。
关于rete算法,我还看过sina博客“小爽的老公”关于rete算法的文章:
http://blog.sina.com.cn/s/blog_4a7a7aa30100089g.html。
我对rete算法,其中最开始的一点有疑惑:
rete算法中的用来构造alpha节点的模式,他的顺序是有何要求的?如果没有要求,那么这个内存里的rete网络如果遇到模式为P1^P2和P2^P1,是怎么构造beta节点的?
9 楼 chillwarmoon 2007-11-28  
fuzidd1212003 写道
能不能通过一个例子,解释一下这个算法..
<br/>
<br/>
这个算法的解释你可以参看一下我写的另外一篇文章http://chillwarmoon.iteye.com/blog/138059<br/>
<br/>
关于怎么由规则生成rete network的过程是很复杂的。估计一月份之后我会把详细的生成过程和模式匹配的过程写到我的博客上。
8 楼 chillwarmoon 2007-11-28  
yangyang 写道
能不能通过一个项目来说明这个算法的使用。
<br/>
<br/>
在AI领域,产生式系统是一个很重要的概念,rete算法是实现产生式系统中模式匹配的一个高效算法。例如Drools引擎就是利用rete算法对规则进行分析,形成rete network,从而进行模式匹配的。
7 楼 fuzidd1212003 2007-11-26  
能不能通过一个例子,解释一下这个算法..
6 楼 yangyang 2007-11-26  
能不能通过一个项目来说明这个算法的使用。
5 楼 free49498445 2007-11-22  
网络术语太多了。。。
4 楼 chillwarmoon 2007-11-16  
shijiyu 写道
能否将RETE算法说的清楚点?有没有相关的资料?
<br/>
<br/>
不知道你哪不清楚,如果有不清楚的地方,可以提出来。
3 楼 shijiyu 2007-11-12  
能否将RETE算法说的清楚点?有没有相关的资料?
2 楼 tornyz 2007-11-07  
图不清晰。
1 楼 laiseeme 2007-11-06  
高深 学习学习

相关推荐

    drools-rete算法简介.docx

    Drools-Rete 算法简介 Drools-Rete 算法是一种前向规则快速匹配算法,其匹配速度与规则数目无关。Rete 算法通过形成一个 Rete 网络进行模式匹配,利用基于规则的系统的两个特征,即时间冗余性(Temporal redundancy...

    Rete 算法PPT

    Rete算法,作为高效模式匹配的核心技术,在IT领域尤其是规则引擎设计中占据着举足轻重的地位。本文将深入解析Rete算法的关键概念、工作原理及其在现代规则引擎中的应用。 ### Rete算法概述 Rete算法是一种公开领域...

    一款基于RETE算法的纯Java规则引擎

    **URULE:基于RETE算法的纯Java规则引擎** URULE是一款强大且灵活的规则引擎,它采用RETE算法作为核心实现,旨在帮助开发者高效地处理业务规则的编写、管理和执行。RETE( Rapid Entrepreneurial Technology ...

    行业分类-设备装置-一种结合Rete算法的RDF数据分布式并行推理方法.zip

    标题中的“行业分类-设备装置-一种结合Rete算法的RDF数据分布式并行推理方法”揭示了这个压缩包文件涉及的主要领域是信息技术,特别是与数据处理和智能设备相关的技术。Rete算法是一种用于快速匹配模式的算法,常...

    基于RETE算法的Java规则引擎URULE设计源码

    RETE算法是一种高效规则匹配算法,最初设计用于专家系统中,它的主要优势在于能够快速处理大量规则,并且在规则更新时能够最小化计算量,从而提高整个系统的性能。URULE利用这一算法,使得它能够在处理复杂的业务...

    智能环境下分布式Rete算法.pdf

    智能环境下的分布式Rete算法研究,主要针对在智能环境中基于Rete算法的规则推理引擎在处理大量数据时,由于需要将数据集中到一个中心节点(sink节点)而带来的数据传输量过大的问题。Rete算法作为一种高效的模式匹配...

    Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值.zip

    Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则,从而便于学习和理解。并且,还可以将 Java 代码直接...

    Rete算法的应用研究

    《Rete算法在故障诊断系统中的应用研究》 在信息技术高速发展的今天,复杂系统的故障诊断已成为保障设备稳定运行的关键。本文主要探讨了如何利用Rete算法优化专家系统,特别是基于规则的专家系统中的模式匹配效率,...

    基于RETE算法的纯Java规则引擎,提供规则集、决策表、决策树、评分卡,规则流等各种规则表现工具及.zip

    标题中的“基于RETE算法的纯Java规则引擎”是指一种使用RETE(Rapid Einstein Truth Maintenance System)算法实现的规则引擎,它完全用Java编程语言编写。RETE算法是一种高效的事实匹配算法,常用于专家系统和业务...

    rusty-rete:Rete 算法在 Rust 中的实现

    《Rust语言实现Rete算法:rusty-rete深度解析》 在计算机科学领域,尤其在人工智能和专家系统中,Rete算法是一个重要的知识表示和推理机制。它以高效的模式匹配能力著称,能快速处理大量规则以进行复杂的逻辑推理。...

    Rete 改进算法 博士论文-Production Matching for Large Learning Systems

    随着机器学习技术的发展,尤其是当系统需要处理大规模数据集时,Rete算法的作用变得尤为重要。但是,随着规则数量的增加,传统Rete算法在处理这些规则时可能会遇到性能瓶颈。 #### Rete算法的关键概念 Rete算法的...

    基于RETE算法的纯Java规则引擎,提供规则集、决策表、决策树、评分卡,规则流等各种规则表现工具及基于网页的可视化设计器

    URule是一款纯Java规则引擎,它以RETE算法为基础,提供了向导式规则集、脚本式规则集、决策表、交叉决策表(PRO版提供)、决策树、评分卡及决策流共六种类型的规则定义方式,配合基于WEB的设计器,可快速实现规则的...

    rete:RETE算法Erlang实验

    在Erlang这种并发并行处理能力强大的编程语言中,实现RETE算法具有很大的潜力。 Erlang是一种静态类型的函数式编程语言,由Ericsson开发,特别适合构建高可用、分布式、容错性强的系统。Erlang的进程模型和消息传递...

    动态演化系统中规则引擎的改进Rete算法

    在本研究论文中,作者对动态演化系统中的规则引擎进行了深入探讨,并针对Rete算法存在的内存限制和快速响应用户需求的问题提出了改进措施。为了更好地理解文章内容,我们需要首先了解几个关键概念:Rete算法、规则...

    Rete 模式匹配算法 的Rust实现_rust_代码_下载

    在Rust编程语言中实现Rete算法可以提供一种强大而高效的规则引擎。 Rete算法的核心在于它的网络结构,由不同的节点类型组成,如Alpha节点、Beta节点和Gamma节点。Alpha节点处理特定事实的测试,Beta节点处理两个或...

Global site tag (gtag.js) - Google Analytics