一、 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)操作。
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算法,由Charles L. Forgy在1982年提出,旨在解决大规模模式与对象的匹配问题,尤其适用于人工智能(AI)领域中的专家系统或生产规则系统。在这些...
Drools-Rete 算法简介 Drools-Rete 算法是一种前向规则快速匹配算法,其匹配速度与规则数目无关。Rete 算法通过形成一个 Rete 网络进行模式匹配,利用基于规则的系统的两个特征,即时间冗余性(Temporal redundancy...
Rete算法,作为高效模式匹配的核心技术,在IT领域尤其是规则引擎设计中占据着举足轻重的地位。本文将深入解析Rete算法的关键概念、工作原理及其在现代规则引擎中的应用。 ### Rete算法概述 Rete算法是一种公开领域...
1. 访问PyPI官网(https://pypi.org/)并搜索`py_rete`,阅读项目页面上的描述和文档。 2. 查看`README`文件,通常会提供安装指南和快速入门示例。 3. 阅读`setup.py`文件,了解项目如何被构建和安装。 4. 查看源...
1. **生产添加**:这指的是将新的事实(Working Memory Elements, WMEs)添加到工作内存中。在Rete算法中,这涉及到将WMEs传播到相应的Alpha节点进行初步匹配,然后根据匹配结果在Beta节点中进行进一步处理。 2. **...
1. **规则集**:规则集是将多个相关规则组合在一起的逻辑单元,它们通常共享相同的上下文和条件。URULE允许用户定义规则集,便于管理和执行一组相关的规则,确保业务逻辑的一致性和完整性。 2. **决策表**:决策表...
### 1. 可视化编程 可视化编程是一种编程范式,它允许开发者通过图形元素(如节点、连接线)代替传统的代码编写。这种方式降低了编程的入门门槛,尤其对非专业程序员来说更为友好。Rete.js 提供了一种直观的方式来...
为框架框架的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 ...
1. **节点类型**:Rete网络中的节点分为几种类型,如Alpha节点、Beta节点和Theta节点。Alpha节点处理事实(facts),Beta节点处理模式匹配,Theta节点用于连接Alpha和Beta节点,实现快速的匹配过程。 2. **模式匹配...
The Rete Match Algorithm is an efficient method for comparing a large collection of patterns to a large collectionofobjects.Itfindsalltheobjectsthatmatcheachpattern. Thealgorithm wasdevelopedforusein ...
资源分类:Python库 所属语言:Python 资源全名:py_rete-0.0.1.dev52-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
### Rete改进算法在大规模学习系统中的生产匹配 #### 概述 《Rete改进算法博士论文—Production Matching for Large Learning Systems》是一篇探讨如何优化基于规则的专家系统(Expert System)性能的研究工作。该...
简单-具有Rete.js的Vue应用程序项目设置克隆存储库 git clone https://github.com/Hatead1/simple-rete-vue-app变更目录 cd simple-rete-vue-app/安装npm模块 npm i编译和热重装以进行开发 npm run serve在浏览器中...
1. 安装:在你的项目目录中,打开终端并运行 `npm install` 命令,这将下载 Rete.js 库及其依赖项到你的项目中。这一步是构建基于 Rete.js 应用的基础。 2. 开发环境:为了进行开发和实时调试,你可以运行 `npm run...
1. **初始匹配**:当一个新对象进入工作存储器时,它会被送入Rete网络的入口节点,开始匹配过程。 2. **模式传播**:如果一个对象与某个节点的模式匹配,则该对象会沿着对应的边传递到下一个节点进行进一步的匹配。 ...
智能环境下的分布式Rete算法研究,主要针对在智能环境中基于Rete算法的规则推理引擎在处理大量数据时,由于需要将数据集中到一个中心节点(sink节点)而带来的数据传输量过大的问题。Rete算法作为一种高效的模式匹配...