`

Rete(1)

阅读更多

一、 rete概述
Rete算法是一种前向规则快速匹配算法,其匹配速度与规则数目无关。Rete是拉丁文,对应英文是net,也就是网络。Rete算法通过形成一个rete网络进行模式匹配,利用基于规则的系统的两个特征,即时间冗余性(Temporal redundancy)和结构相似性(structural similarity),提高系统模式匹配效率。
二、 相关概念
2.1  事实(fact):
事实:对象之间及对象属性之间的多元关系。为简单起见,事实用一个三元组来表示:(identifier ^attribute  value),例如如下事实:
w1:(B1  ^ on B2)     w6:(B2  ^color blue)
w2:(B1  ^ on B3)     w7:(B3  ^left-of B4)
w3:(B1  ^ color red)   w8:(B3  ^on table)
w4:(B2  ^on table)    w9:(B3  ^color red)
w5:(B2  ^left-of B3)
2.2  规则(rule):
由条件和结论构成的推理语句,当存在事实满足条件时,相应结论被激活。一条规则的一般形式如下:
(name-of-this-production
LHS /*one or more conditions*/
-->
RHS /*one or more actions*/
)
其中LHS为条件部分,RHS为结论部分。
下面为一条规则的例子:
(find-stack-of-two-blocks-to-the-left-of-a-red-block
(^on)
(^left-of)
(^color red)
-->
...RHS...
)
2.3  模式(patten):
模式:规则的IF部分,已知事实的泛化形式,未实例化的多元关系。
(^on)
(^left-of)
(^color red)
三、 模式匹配的一般算法
规则主要由两部分组成:条件和结论,条件部分也称为左端(记为LHS, left-hand side),结论部分也称为右端(记为RHS, right-hand side)。为分析方便,假设系统中有N条规则,每个规则的条件部分平均有P个模式,工作内存中有M个事实,事实可以理解为需要处理的数据对象。
规则匹配,就是对每一个规则r, 判断当前的事实o是否使LHS(r)=True,如果是,就把规则r的实例r(o)加到冲突集当中。所谓规则r的实例就是用数据对象o的值代替规则r的相应参数,即绑定了数据对象o的规则r。
规则匹配的一般算法:
1) 从N条规则中取出一条r;
2) 从M个事实中取出P个事实的一个组合c;
3) 用c测试LHS(r),如果LHS(r(c))=True,将RHS(r(c))加入冲突集中;
4) 取出下一个组合c,goto 3;
5) 取出下一条规则r,goto 2;
四、 RETE算法
Rete算法的编译结果是规则集对应的Rete网络,如下图。Rete网络是一个事实可以在其中流动的图。Rete网络的节点可以分为四类:根节点(root)、类型节点(typenode)、alpha节点、beta节点。其中,根结点是一个虚拟节点,是构建rete网络的入口。类型节点中存储事实的各种类型,各个事实从对应的类型节点进入rete网络。

4.1  建立rete网络
Rete网络的编译算法如下:
1) 创建根;
2) 加入规则1(Alpha节点从1开始,Beta节点从2开始);
a. 取出模式1,检查模式中的参数类型,如果是新类型,则加入一个类型节点;
b. 检查模式1对应的Alpha节点是否已存在,如果存在则记录下节点位置,如果没有则将模式1作为一个
Alpha节点加入到网络中,同时根据Alpha节点的模式建立Alpha内存表;
c. 重复b直到所有的模式处理完毕;
d. 组合Beta节点,按照如下方式:
   Beta(2)左输入节点为Alpha(1),右输入节点为Alpha(2)
   Beta(i)左输入节点为Beta(i-1),右输入节点为Alpha(i)  i>2
  并将两个父节点的内存表内联成为自己的内存表;
e. 重复d直到所有的Beta节点处理完毕;
f. 将动作(Then部分)封装成叶节点(Action节点)作为Beta(n)的输出节点;
3) 重复2)直到所有规则处理完毕;
可以把rete算法类比到关系型数据库操作。
把事实集合看作一个关系,每条规则看作一个查询,将每个事实绑定到每个模式上的操作看作一个Select
操作,记一条规则为P,规则中的模式为c1,c2,…,ci, Select操作的结果记为r(ci),则规则P的匹配即为r(c1)◇r(c2)◇…◇(rci)。其中◇表示关系的连接(Join)操作。

规则引擎研究(一)鈥斺擱ete算法(1)

4.2  使用rete网络进行匹配
使用一个rete的过程:
1) 对于每个事实,通过select 操作进行过滤,使事实沿着rete网达到合适的alpha节点。
2) 对于收到的每一个事实的alpha节点,用Project(投影操作)将那些适当的变量绑定分离出来。使各个新的变量绑定集沿rete网到达适当的bete节点。
3) 对于收到新的变量绑定的beta节点,使用Project操作产生新的绑定集,使这些新的变量绑定沿rete网络至下一个beta节点以至最后的Project。
4) 对于每条规则,用project操作将结论实例化所需的绑定分离出来。

下面为的图示显示了连接(Join)操作和投影(Project)的执行过程。

4.3  Rete算法的特点
Rete算法有两个特点使其优于传统的模式匹配算法。
1、状态保存
事实集合中的每次变化,其匹配后的状态都被保存再alpha和beta节点中。在下一次事实集合发生变化时
,绝大多数的结果都不需要变化,rete算法通过保存操作过程中的状态,避免了大量的重复计算。Rete算法主要是为那些事实集合变化不大的系统设计的,当每次事实集合的变化非常剧烈时,rete的状态保存算法效果并不理想。
2、节点共享
另一个特点就是不同规则之间含有相同的模式,从而可以共享同一个节点。Rete网络的各个部分包含各种
不同的节点共享。

分享到:
评论

相关推荐

    RETE算法

    ### RETE算法:高效解决大规模模式匹配问题 #### 引言与背景 RETE算法,由Charles L. Forgy在1982年提出,旨在解决大规模模式与对象的匹配问题,尤其适用于人工智能(AI)领域中的专家系统或生产规则系统。在这些...

    drools-rete算法简介.docx

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

    Rete 算法PPT

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

    PyPI 官网下载 | py_rete-0.0.7.dev5.tar.gz

    1. 访问PyPI官网(https://pypi.org/)并搜索`py_rete`,阅读项目页面上的描述和文档。 2. 查看`README`文件,通常会提供安装指南和快速入门示例。 3. 阅读`setup.py`文件,了解项目如何被构建和安装。 4. 查看源...

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

    1. **生产添加**:这指的是将新的事实(Working Memory Elements, WMEs)添加到工作内存中。在Rete算法中,这涉及到将WMEs传播到相应的Alpha节点进行初步匹配,然后根据匹配结果在Beta节点中进行进一步处理。 2. **...

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

    1. **规则集**:规则集是将多个相关规则组合在一起的逻辑单元,它们通常共享相同的上下文和条件。URULE允许用户定义规则集,便于管理和执行一组相关的规则,确保业务逻辑的一致性和完整性。 2. **决策表**:决策表...

    RetejsJavaScript可视化编程节点编辑器开发框架

    ### 1. 可视化编程 可视化编程是一种编程范式,它允许开发者通过图形元素(如节点、连接线)代替传统的代码编写。这种方式降低了编程的入门门槛,尤其对非专业程序员来说更为友好。Rete.js 提供了一种直观的方式来...

    rete4frames:框架的Clojure RETE实现

    为框架框架的Clojure RETE实现礼节基准表测试CLIPS v 6.24(毫秒) rete4frames v 5.3.0(毫秒) 礼仪8 1.316599 82 x 61 礼仪16 18岁247 x 14 礼貌32 272 1427 5倍礼仪64 8939 9635 x 1.1 礼仪128 324396 88690 x ...

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

    1. **节点类型**:Rete网络中的节点分为几种类型,如Alpha节点、Beta节点和Theta节点。Alpha节点处理事实(facts),Beta节点处理模式匹配,Theta节点用于连接Alpha和Beta节点,实现快速的匹配过程。 2. **模式匹配...

    CMU-CS-79-forgy-RETE.pdf

    The Rete Match Algorithm is an efficient method for comparing a large collection of patterns to a large collectionofobjects.Itfindsalltheobjectsthatmatcheachpattern. Thealgorithm wasdevelopedforusein ...

    Python库 | py_rete-0.0.1.dev52-py2.py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:py_rete-0.0.1.dev52-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

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

    ### Rete改进算法在大规模学习系统中的生产匹配 #### 概述 《Rete改进算法博士论文—Production Matching for Large Learning Systems》是一篇探讨如何优化基于规则的专家系统(Expert System)性能的研究工作。该...

    simple-rete-vue-app:带有rete.js的Vue应用

    简单-具有Rete.js的Vue应用程序项目设置克隆存储库 git clone https://github.com/Hatead1/simple-rete-vue-app变更目录 cd simple-rete-vue-app/安装npm模块 npm i编译和热重装以进行开发 npm run serve在浏览器中...

    rete.js.org:示例和文档

    1. 安装:在你的项目目录中,打开终端并运行 `npm install` 命令,这将下载 Rete.js 库及其依赖项到你的项目中。这一步是构建基于 Rete.js 应用的基础。 2. 开发环境:为了进行开发和实时调试,你可以运行 `npm run...

    Rete: A Fast Algorithm for the Many Pattern/Many Object Pattern Match Problem*中文

    1. **初始匹配**:当一个新对象进入工作存储器时,它会被送入Rete网络的入口节点,开始匹配过程。 2. **模式传播**:如果一个对象与某个节点的模式匹配,则该对象会沿着对应的边传递到下一个节点进行进一步的匹配。 ...

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

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

Global site tag (gtag.js) - Google Analytics