Rete算法初解

来源:互联网 发布:ios 执行js脚本 编辑:程序博客网 时间:2024/04/28 04:25

 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,中这里开始遍历网络。当对象匹配一个节点的条件,节点就将它记录到相应的内存中(可以带来更快的性能)(这里是不是就是用索引?为了尽量少用内存)。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩发烧后又吐怎么办 11个月宝宝吐了怎么办 11个月宝宝拉肚子怎么办 2岁宝宝反复呕吐怎么办 1岁半幼儿拉肚子怎么办 宝宝打嗝呕吐胃难受怎么办 3岁宝宝发烧还吐怎么办 孩子喝水都吐怎么办啊 宝宝吃多了呕吐怎么办 3岁宝宝吐怎么办才好 儿童受凉肚子疼发热呕吐怎么办 两岁宝宝半夜呕吐怎么办 两岁宝宝吐了怎么办 2岁宝宝发烧吐怎么办 2岁多宝宝呕吐是怎么办 2周岁宝宝中暑了怎么办 2岁半宝宝着凉呕吐怎么办 3岁宝宝吐了几次怎么办 一岁宝宝恶心吐怎么办 9个月宝宝一直吐怎么办 晚上冻着了呕吐怎么办 2岁宝宝一直吐怎么办 两岁宝宝门牙龋齿怎么办 两岁宝宝得龋齿怎么办 两岁宝宝长龋齿怎么办 宝宝2岁不吃饭怎么办 两岁宝宝总是吐怎么办 3岁儿童受凉呕吐怎么办 两岁宝宝四天没拉大便怎么办 两岁宝宝发烧吐怎么办 四岁宝宝吐了怎么办啊 3岁宝宝突然吐了怎么办 宝宝撑着了吐拉怎么办 2岁宝宝体温37.5怎么办 宝宝2岁乳牙烂了怎么办 孕40周还没入盆怎么办 孕妇脸上长斑了怎么办 七个月宝宝大便干怎么办 两月大婴儿不拉大便怎么办 周岁宝宝大便出血了怎么办 十一个月宝宝大便干燥怎么办