`
wangshu3000
  • 浏览: 135834 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Rete算法初解

阅读更多

 Rete匹配算法是一种进行大量模式集合和大量对象集合间比较的高效方法,通过这种方法找出所有匹配各个模式的对象。
        Rete算法以牺牲内存换取高速的策略
        Rete算法分为两个部分:规则编译(rule compilation)、运行时执行(runtime execution).


规则编译
  功能:如何在Production Memory中产生一个有效的辨别网络,它具有过滤数据功能
  方法:数据通过在网络中流通被过滤。在顶端节点(RootNode)会有很多匹配的数据,经过中间的一些节点(**Node)过滤而变少,最后到达终端节点(TerminalNode)。


  在1982年Forgy的论文("Rete: A Fast Algorithm for the Many Pattern/ Many Object Pattern Match Problem", Charles L. Forgy, Artificial Intelligence 19 (1982), 17-37)中,他描述了4种节点:
  RootNode
   所有对象进入网络的入口,进入后立即进入ObjectTypeNode。ObjectTypeNode确保引擎接下来只作它需要做的事情,即对对相进行过滤、分拣。ObjectTypeNode后流入:AlphaNodes, LeftInputAdapterNodes和BetaNodes。


  1-input 通称AlphaNode
    AlphaNode用来评估字面条件(literal conditions),当一个对象有多个字面条件的话,逐条评估顺序进入相应AlphaNode。
    Drools用散列法优化从ObjectTypeNode到AlphaNode的流向。即以字面值(literal value)为Key,以AlphaNode为Value加入HashMap。这样进入ObjectTypeNOde的对象根据HashMap就可以找到确切的AlphaNode.


  2-input 通称BetaNode
    用来对2个队形进行比较,他们可以是同种或不同种类型,分别叫作左边(LHS left-hand-side)和右边(RHS right-hand-side)。一个BetaNode的左边输入通常是一组对象,右边输入是单个对象。
    如果左边输入的是单个对象怎么办?用适配器LeftInputAdapterNode。它将单个对象转化为一个单对象数组(Single Object Tuple),然后再作为左边传到JoinNode。
    Drools中有两种:JoinNode和NotNode。左边输入是一个对象数组。NotNode可以完成“exists”检查。Drools通过将所因应用在BetaNodes上扩展了Rete算法(??)。


  TerminalNode
    用来表明一条规则已经匹配了他的所有条件(conditions),这条规则有了一个完全的匹配(full match)。
    一条规则可以有不止一个TerminalNode,如:带“or”规则。


  多个规则间肯能存在部分相同的条件,在规则引擎编译过程中就表现为存在相同的节点。为了提高性能,Drools进行了节点共享。


 
运行时执行
  当一个应用assert一个对象,引擎将数据传递到root node,中这里开始遍历网络。当对象匹配一个节点的条件,节点就将它记录到相应的内存中(可以带来更快的性能)(这里是不是就是用索引?为了尽量少用内存)。 

分享到:
评论

相关推荐

    RETE算法

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

    Rete 算法PPT

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

    drools-rete算法简介.docx

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

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

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

    URULE是一款基于RETE算法的纯Java规则引擎,提供规则集、决策表、决策树、评分卡,规则流等各.zip

    URULE是一款基于RETE算法的纯Java规则引擎,提供规则集、决策表、决策树、评分卡,规则流等各

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

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

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

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

    Rete算法的应用研究

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

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

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

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

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

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

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

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

    Rete模式匹配算法是一种在人工智能和专家系统领域广泛使用的高效算法,用于动态地维护和更新大量规则库。这种算法能够快速地识别出哪些规则适用于给定的事实数据,并且随着新数据的输入或旧数据的修改,它能有效地...

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

    该项目是URULE规则引擎的源码,采用Java语言开发,辅以JavaScript、HTML、...URULE基于RETE算法,提供规则集、决策表、决策树、评分卡等多种规则表现工具,并支持基于网页的可视化设计,适用于快速开发复杂的业务规则。

    rete:RETE算法Erlang实验

    **rete: RE_TE算法在Erlang中的实现** RETE( Rapid EXpression Temple)算法是一种高效的事实-规则推理系统,广泛应用于专家系统和规则引擎中。它的核心思想是通过构建一个分布式模式网络来减少规则匹配过程中的...

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

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

Global site tag (gtag.js) - Google Analytics