- 浏览: 915052 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
4.6 连接节点(Join node)
当一个连接节点的alpha内存中加入一个事实时,将引发此连接节点的right activation,当一个连接结点的beta内存中加入一个token时,将引发此连接节点的left activation。
连接节点的数据结构包括:指向其alpha内存和beta内存的指针,变量连接检测的说明,指向子节点的指针。
当一个连接节点的alpha内存中加入某个事实时,引发right activation。此处,因为right activation 的顺序不同,有可能产生冗余tokens(即在同一个beta内存里存储有两个或以上的相同的token)。结果这个问题的方法有:每次在beta内存中加入一个新的token时,都检测是否已存在相同的token。这个方法的缺点就是使系统的处理速度变慢。另外一个较好的方法是把right activation的顺序确定下来。
4.7 去除事实(Removals of facts)
Tambe, M., Kalp, D., and Rosenbloom,P. (1991). Uni-Rete: Specializing the Rete match algorithm for the unique-attribute representation. Technical Report CMU-CS-91-180,School of Computer Science, Carnegie Mellon University. Tambe, M., Kalp, D., and Rosenbloom,P. S. (1992). An effcient algorithm for production systems with linear-time match. In Proceedings of the Fourth IEEE International Conference on Tools with Artiial Intelligence, pages 36-43.) Uni-Rete:一种特有属性表示法(unique-value)的特殊Rete匹配算法 使用上面的右图来说明Uni-Rete的添加和删除某个事实的操作。假设图中的事实w6和w8尚未添加,下面加入事实w6:
当某个事实从工作内存总删除时,需要更新含有此事实的alpha内存和beta内存,有以下几种方法。
在原始的rete算法中,删除操作和添加操作采用同一种方式。称此方式为rematch-based removal。主要思想是给每个添加或删除操作一个tag,用来表明此操作是添加事实或删除事实。删除操作的具体执行过程同上面讨论的添加一个事实的过程类似。此方法与其他方法相比,速度较慢。因为删除操作与添加操作的工作量几乎相同。在添加事实过程中所获得的信息并没有在执行删除操作时加以利用。下面有三种改进的算法。
在scan-based removal中,当一个连接节点的alpha内存中的某个事实w被去除时,把w传给此连接节点的输出内存,在此内存中寻找最后一个元素为w的tokens,将这些tokens删除,并且把这些tokens传给此连接节点的子节点。在在子节点中做类似删除操作。(Scales,1986)通过使用此方法代替原有方法,获得28%的加速。(Barachini,1991)获得了10%的加速。
在list-base removal和tree-based removal中使用了这样一个原理,即给事实集合以及tokens的数据结构上增添额外的指针,当某个事实被删除时,可以沿着这些指针删除需要删除的元素。
在list-based removal(Scales ,1986)中,把每个事实w上添加一个包含此事实的tokens的链表。当w被删除时,只要沿着此链表删除这些tokens。缺点就是需要大量的空间来存储链表,同时在创建一个新token时也可能花费大量的额外时间。
在tree-base removal中,在每个事实w上添加一个链表,这些链表指向把w作为最后一个元素的tokens。同时,在每个tokens上,添加一个指向此tokens的子节点的链表。当w被删除时,遍历以tokens为根的子树,删除子树上的所有元素。当然,这些额外指针将占用更多内存,同时,建立这些指针也耗费时间。经验表明,采用此方法比原始方法要节省时间。
一、 Uni-Rete简介
产生式系统(基于规则的系统)中的组合匹配(the combinatorial match)在许多应用领域中带来了问题:如在实时系统中,人类认知建模,并行系统等。特有属性表示法(unique-attribute representation)可以有效的解决组合匹配问题。Uni-Rete是对Rete匹配算法进行约束,使用了特有属性表示法,实验结果显示其匹配过程的速度比Rete算法快10倍。
[Tambe and Rosenbloom 1989]通过引入特有属性表示法(unique-attribute representation)消除了产生式匹配中的组合问题。使用特有属性,匹配的时间与规则数目成线性关系。Uni-Rete是Rete算法的特例化,在Soar系统中,Uni-Rete比Rete快10倍。
二、 Rete算法
上图是一个通过使用Rete算法进行匹配的例子。
但是,在一个实际的产生式系统中,规则的数目非常多,从而整Rete网络很复杂,如下图所示。从图中可见,网络中的beta内存中可能存在大量的tokens。产生式匹配中的组合问题指beta内存中tokens的组合个数。在最糟糕的情况下,一条产生式可能产生O(WC)个tokens,其中W是事实个数,C是条件个数。Beta内存中有可能存放如此多的tokens,而tokens的数目在编译时无法确定,Rete使用如链表这样的动态结构来存储tokens。通过使用hash表可以对Rete算法进行优化。尽管如此,匹配过程中的主要花费的时间集中在对beta内存的处理中。
三、 特有属性表示法(The Unique-attribute Representation)
产生式匹配过程中的组合问题的是因为不知道到底哪一个事实最终可以匹配某个条件。在一个有很多条件的产生式中,这样的不确定性带来的级联效应(cascading effect)有可能带来与条件个数成指数关系的匹配时间。这种不确定性表现在当对某个条件进行匹配时有可能出现很多对此条件的部分匹配,每个部分匹配都是一个token。采用特有属性表示法可以消除在匹配过程中的不确定性。使用特有属性表示法,每个条件最多只对应着一个token,从而可以消除产生式匹配过程中的组合匹配问题。
这里我们采用(class object attribute value)这样的四元组来表示一个条件,下图所示即为这样的一个产生式。
所谓的特有属性表示法指:给定某个class, object和atrribute,只允许对应某个特定的value。下面a图所示的三个事实不是特有属性表示法,因为三个条件的class,object,attribute均相同,而B1, B2, B3却是三个不同的value。正是因为给定前三个部分相同的字段(field),而却有不同value导致了匹配过程中的不确定性。b图中显示的是特有属性表示法。
另外,特有属性表示法,对产生式中的条件也有约束,即,在object出现的变量必须预先绑定(pre-bound),即,必须在此更前面的条件中出现。
特有属性表示法通过对事实和条件的约束,保证了匹配代价与条件个数成线性关系。即beta内存中最多含有一个token。
特有属性表示法已经成功地运用到Soar中的各种任务中,包括了一些含有500或更多产生式的任务。在这些任务中,特有属性表示法改善了问题解决的性能,去除了代价很高的学习型规则,因此,使研究人员摆脱了产生式系统的效率问题。当然,对Uni-Rete的进一步加速仍然是必要的。
一般来说,特有属性表示法通过牺牲一些表达能力来获得匹配中的效率。这主要表现在两方面,一方面,使用特有属性表示法很难对工作内存中的非结构化数据进行编码,另一方面,特有属性表示法可能削弱学习型产生式(learned production)的归纳能力。
四、 Uni-Rete算法
下面的左图示意了使用Rete算法对使用的特有属性表示法的规则系统处理的过程。图中,每一个beta内存仅包括一个token。尽管如此,Rete算法仍然像以前一样的创建存储tokens,并且同样进行了大量的内存管理。
Uni-Rete充分利用了每一个bete内存中最多有一个token的性质,减少了对token的内存管理。仅有小部分的token存储在给定内存中,大部分的都存储在其前面的beta内存中。如下面的右图所示。左图中存储(w1, w4)的beta内存,在右图中仅仅存储了(w4),因为此beta内存的前面的alpha仅仅包括单独一个事实(w1)。相似的,在左图中存储(w1, w4, w6)的token,在右图中,仅需要存储(w6),剩下的部分隐含在其前面的beta内存之中。因此,通过仅仅存储一个单独的事实,来存储整个token。另外,存储所需的空间可以事先分配好,因为仅含有一个事实,从而可以避免rete算法中的动态内存管理。
Uni-Rete算法仅仅适用于使用特有属性表示法的系统中,因为,如果beta内存中有多个tokens,那么就无法确定哪些事实构成某个token。因此,Uni-Rete的这种隐含存储(implicit storage)不能用在非限制的产生式系统中。
第一步,对w6进行常量测试(constant tests),把w6存入右图所示的alpha内存中。
第二步,检查前一个条件的事实指针是否为空。如果是空则添加事实操作结束,不空则进入第三步,如检查w6对应条件的前一个条件的事实指针,此处指向w4,非空,进入第三步。
第三步,与前面的条件对应的事实进行一致性测试。如,检查w4和w6是否含有一致绑定。
第四步,存储指向新事实的指针。如果第三步检测成功,在相应位置存储指向新事实的指针。如,w4, w6是一致绑定,则存储指向w6的指针。如果测试失败,不进行任何下一步操作。
第五步,匹配下一个条件。检查下一个条件对应的alpha内存,是否匹配。若成功,则存储指向那个事实的指针。如,例子中,检查w6和条件4对应的事实是否一致绑定。如果成功,则存储指向条件4对应的那个事实的指针。重复第五步直道下一个条件不匹配。
如果出现指向最后一个条件的指针,则匹配成功。
当删除某个事实时:
第一步,从alpha内存中删除此事实。例如,删除w6时,通过常量检测发现w6,并从alpha内存中删除。
第二步,检测时候有指针指向被删除的事实。如,检测是否有指针指向w6,如果有,进入下一步,没有,则删除操作结束。
第三步,置被删除事实的对应的指针为空。如,置指w6的指针为空指针。
第四步,置所有后继的指针为空。
对token内存的优化,是Uni-Rete算法对Rete算法对主要的优化。通过此优化,有三方面优点,第一,beta内存节点的空间可以事先分配,避免了Rete算法中的内存分配回收操作。第二,beta内存节点仅仅存储指向事实的指针,从而避免了复制大量事实到当前beta内存中。第三,避免了对tokens的hashing操作。
五、 Uni-Rete网络的双线性(bilinear)组织
以上所讨论的Uni-Rete算法都是基于线性的网络。即,每一个条件加入网络时都是加入到一条产生式的所有前面的条件之后。但是,可以把这个网络组织成双线性(bilinear)的形式。即可以把某个条件加入到其部分前驱条件之前,而不必是所有的前驱条件前。下图说示即为线性Uni-Rete与双线性Uni-Rete的对比图。双线性Uni-Rete中,包括两部分条件链,(CE1,CE2,CE3,CE4)和(CE1,CE2,CE3,CE4)。这两部分被一个super-p-node连接起来。Super-p-node进行在biliner中未能进行的一致性检查。
使用biliner结构的好处实现是更大程度的共享。缺点是增加了在super-p-node 中的一致性检测的操作。
在一般情况下,采用biliner一般会降低Rete算法的性能,这是因为,1、增加了匹配活动;2、实现复杂;3、共用程度可能没有在使用特有属性表示法的系统高。
Uni-Rete是Rete的一个特殊情况,可以很容易的与Rete结合使用。Uni-Rete可以用在部分含有特有属性表示法的系统中。可以有两种方法把Uni-Rete和Rete结合起来使用,一种是把Uni-Rete用于特有属性的产生式,把Rete用于其它产生式;另一种是在一条产生式中,把Uni-Rete用于特有属性表示的条件中,而把Rete用于其它条件中。
Uni-Rete的一个贡献是通过减少对tokens的动态内存管理而提高性能。像Rete这样的匹配算法都假定tokens的数目在匹配时无法确定,因此需要动态分配内存。而在很多情况下,token内存的大小可以预测,Uni-Rete便利用这一特点使用静态数据结构来提高性能。
发表评论
-
不使用/,%,+和*,如何判断一个数能否被3整除
2012-05-30 14:28 1789如果n的二进制末位为0,那么n和n>>1同时被 ... -
一些数学知识
2012-03-31 20:12 859zz:http://hi.baidu.com/imak ... -
高阶幂的求余的方法
2012-03-31 16:41 2785通常会有如下问法: 有两个数,A和B,A的范围 ... -
从N个变量中找出一个错误变量的方法
2012-03-31 12:17 865假设有N包咖啡,里面有一包咖啡是掺和了沙子的,可以将咖啡放到水 ... -
【转】大数据量算法
2012-03-06 16:11 1249第一部分、十五道海量数据处理面试题 1. 给定a、b两个 ... -
链表的一些常见笔试面试问题总结及代码
2010-10-27 13:39 1096先什么也不说,假设链 ... -
Trie Tree
2010-10-26 11:34 1479给你100000个长 ... -
字典树(trie tree)
2010-10-26 11:19 1391今天AC了两题tri ... -
高度为n的平衡二叉树最少需要多少个节点
2010-10-24 13:42 9446递推关系 A(1)=1 A(2)=2 A ... -
如何判断两个单向链表是否有相交,并找出交点
2010-10-24 13:37 1710题比较简单,单向链表有交点意思就是交点后的节点都是 ... -
大数据排序或取重或去重相关问题解决方案
2010-10-21 16:13 2778Q:TC群里有人发消息说在10亿个数据中找出所有的重复数,内存 ... -
分配排序(桶排序..)
2010-10-21 13:39 1888分配排序的基本思想:排序过程无须比较关键字,而是通过&qu ... -
Rete(2)
2010-10-21 09:57 1184使用RETE算法的模块系统 ... -
Rete(1)
2010-10-21 09:53 1066一、 rete概述Rete算法是一种前向规则快速匹配算法,其匹 ... -
[转]海量数据处理面试题
2010-10-20 15:15 10311. 给定a、b两个文件,各存放50亿个url,每个url各占 ... -
用JDBC实现数据的分页
2010-10-20 11:23 1229数据分页主要用到了resultSet的absolute()方法 ... -
如何求N的阶乘所得的数字末尾含有多少个0
2010-10-19 13:13 2190原题是这样: 给定 ... -
数据库笔试题(经典SELECT语句用法)
2010-10-18 22:49 2117问题描述: 为管理岗位业务培训信息,建立3个表: S ... -
Java分页实现
2010-10-18 22:11 1510Java代码 public interf ... -
Linux下大文件的排序和去重复
2010-10-15 10:02 2138Linux下我们用 sort 与 uniq 的命令来实现去重复 ...
相关推荐
### RETE算法:高效解决大规模模式匹配问题 #### 引言与背景 RETE算法,由Charles L. Forgy在1982年提出,旨在解决大规模模式与对象的匹配问题,尤其适用于人工智能(AI)领域中的专家系统或生产规则系统。在这些...
3. **昂贵的比较操作**:模式匹配过程中涉及的比较操作成本较高,重复计算代价大。 4. **条件共享**:规则间往往共享某些条件性比较,这为算法优化提供了可能。 5. **复杂规则系统**:规则系统足够复杂,网络建立...
Drools-Rete 算法简介 Drools-Rete 算法是一种前向规则快速匹配算法,其匹配速度与规则数目无关。Rete 算法通过形成一个 Rete 网络进行模式匹配,利用基于规则的系统的两个特征,即时间冗余性(Temporal redundancy...
3. 阅读`setup.py`文件,了解项目如何被构建和安装。 4. 查看源代码,特别是`py_rete`目录下的`__init__.py`或其他模块,理解库的核心功能。 5. 参考项目提供的示例代码或测试用例来学习如何使用库。 `py_rete`库的...
3. **加法**:可能指的是添加新的规则到规则库中。当新规则加入时,Rete网络需要调整以包含这些规则的条件和动作,这通常涉及创建新的Alpha和Beta节点,以及连接它们以确保正确匹配。 4. **删除 wme**:删除Working...
资源分类:Python库 所属语言:Python 资源全名:py_rete-0.0.1.dev52-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
《PyPI官网下载:探索py_rete-0.0.5.dev3.tar.gz中的Python开发知识》 在Python的世界里,PyPI(Python Package Index)是开发者们分享和获取Python库的重要平台。这次我们关注的资源是“py_rete-0.0.5.dev3.tar.gz...
3. **决策树**:决策树通过图形化的方式,清晰地展示了决策过程中的各种可能路径和结果。在URULE中,决策树可以帮助用户以更直观的方式理解和构建复杂的决策逻辑。 4. **评分卡**:评分卡是金融领域常用的一种风险...
### 3. 数据模型 Rete.js 的数据模型基于工作区(workspace)、节点(nodes)、连接(connections)和组件(components)。工作区是整个编辑界面,包含所有的节点和连接。节点存储了特定的功能或数据,而连接则定义...
3. **网络构建**:Rete网络的构造是一个动态的过程,随着规则的添加和删除,网络会相应地调整。rusty-rete提供了API来支持这种动态性,同时保持了Rust的性能特性。 4. **事实管理**:rusty-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 ...
The Rete Match Algorithm is an efficient method for comparing a large collection of patterns to a large collectionofobjects.Itfindsalltheobjectsthatmatcheachpattern. Thealgorithm wasdevelopedforusein ...
### Rete改进算法在大规模学习系统中的生产匹配 #### 概述 《Rete改进算法博士论文—Production Matching for Large Learning Systems》是一篇探讨如何优化基于规则的专家系统(Expert System)性能的研究工作。该...
3. 生产编译:当你准备部署应用时,运行 `npm run build` 进行优化和压缩。这将把你的源代码转换为生产环境友好的格式,减小文件大小,提高加载速度。 4. 代码质量检查:`npm run lint` 命令用于执行 Linting(代码...
简单-具有Rete.js的Vue应用程序项目设置克隆存储库 git clone https://github.com/Hatead1/simple-rete-vue-app变更目录 cd simple-rete-vue-app/安装npm模块 npm i编译和热重装以进行开发 npm run serve在浏览器中...
3. **结果输出**:当一个对象完全匹配一个规则的所有模式时,就会触发该规则的右手元动作。 #### 五、Rete算法的优势 Rete算法相比于其他模式匹配方法,在效率上有显著优势: - **减少冗余计算**:通过利用模式...