【java规则引擎】模拟rete算法的网络节点以及匹配过程

转载请注明:http://www.cnblogs.com/shangxiaofei/p/6340655.html

本文只用于理解rete算法,通过一个规则的编译成的网络结构,以及匹配过程去理解rete算法的核心思想。具体实现,截止写本文之时,还不了解。只是提供一个rete算法的实现思路。再次重申,只用于理解rete算法。如有不正确,请交流指正,一定会非常感谢。

 

 

(1)规则内容

IF:

年级是三年级以上,

性别是男的,

年龄小于10岁,

身体健壮,

身高170cm以上,

 

THEN:

这个男孩是一个篮球苗子,需要培养

 

(2)规则编译网络和匹配过程

匹配过程:

(1)匹配过程中事实在网络节点中的流转顺序为A-->B-->C-->D-->E-->F-->G-->H-->I--->规则匹配通过

(2)从working-Memory中拿出一个待匹配的StudentFact对象,进入根节点然后进行匹配,以下是fact在各个节点中的活动图

A节点:拿StudentFact的年级数值进行年级匹配,如果年级符合条件,则把该StudentFact的引用记录到A节点的alpha内存区中,退出年级匹配。

B节点:拿StudentFact的性别内容进行性别匹配,如果性别符合条件,则把该StudentFact的引用记录到B节点的alpha内存区中,然后找到B节点左引用的Beta节点,也就是C节点。

C节点:C节点找到自己的左引用也就是A节点,看看A节点的alpha内存区中是否存放了StudentFact的引用,如果存放,说明年级和性别两个条件都符合,则在C节点的Beta内存区中存放StudentFact的引用,退出性别匹配。

D节点:拿StudentFact的年龄数值进行年龄条件匹配,如果年龄符合条件,则把该StudentFact的引用记录到D节点的alpha的内存区中,然后找到D节点的左引用的Beta节点,也就是E节点。

E节点:E节点找到自己的左引用也就是C节点,看看C节点的Beta内存区中是否存放了StudentFact的引用,如果存放,说明年级,性别,年龄三个条件符合,则在E节点的Beta内存区中存放StudentFact的引用,退出年龄匹配。

F节点:拿StudentFact的身体数值进行身体条件匹配,如果身体条件符合,则把该StudentFact的引用记录到D节点的alpha的内存区中,然后找到F节点的左引用的Beta节点,也就是G节点。

G节点:G节点找到自己的左引用也就是E节点,看看E节点的Beta内存区中是否存放了StudentFact的引用,如果存放,说明年级,性别,年龄,身体四个条件符合,则在G节点的Beta内存区中存放StudentFact的引用,退出身体匹配

H节点:拿StudentFact的身高数值进行身高条件匹配,如果身高条件符合,则把该StudentFact的引用记录到H节点的alpha的内存区中,然后找到H节点的左引用的Beta节点,也就是I节点。

I节点:I节点找到自己的左引用也就是G节点,看看G节点的Beta内存区中是否存放了StudentFact的引用,如果存放了,说明年级,性别,年龄,身体,身高五个条件都符合,则在I节点的Beta内存区中存放StudentFact引用。同时说明该StudentFact对象匹配了该规则,形成一个议程,加入到冲突区,执行该条件的结果部分:该学生是一个篮球苗子。

 

时间: 2024-10-25 05:27:20

【java规则引擎】模拟rete算法的网络节点以及匹配过程的相关文章

Java规则引擎与其API应用详解

详解 本文对Java规则引擎与其API(JSR-94)及相关实现做了较详细的介绍,对其体系结构和API应用有较详尽的描述,并指出Java规则引擎,规则语言,JSR-94的相互关系,以及JSR-94的不足之处和展望 本文对Java规则引擎与其API(JSR-94)及相关实现做了较详细的介绍,对其体系结构和API应用有较详尽的描述,并指出Java规则引擎,规则语言,JSR-94的相互关系,以及JSR-94的不足之处和展望 复杂企业级项目的开发以及其中随外部条件不断变化的业务规则(business l

详解什么是Java规则引擎(上)

问题描述 本文对Java规则引擎与其API(JSR-94)及相关实现做了较详细的介绍,对其体系结构和API应用有较详尽的描述,并指出Java规则引擎,规则语言,JSR-94的相互关系,以及JSR-94的不足之处和展望 复杂企业级项目的开发以及其中随外部条件不断变化的业务规则(businesslogic),迫切需要分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地方,让它们能在运行时(即商务时间)可以动态地管理和修改从而提供软件系统的柔性和适应性.规则

【java规则引擎】之Drools引擎中模拟ReteooStatefulSession内部设计结构

该片文章只是抽取drools中java代码实现的一些代码结构,帮助我们理解drools是如何实现rete算法的. 该部分只是抽取ReteooStatefulSession工作过程中的代码架构        利用了多线程设计的一个代理模式(自己起的名字) 利用了23中设计模式中的命令模式 一:模拟drools中ReteooStatefulSession的实现对象StatefulSession 1 package com.nonbankcard.drools.module; 2 3 4 5 /**

Java规则引擎工作原理及其应用

摘 要 Java规则引擎是一种嵌入在Java程序中的组件,它的任务是把当前提交给引擎的Java数据对象与加载在引擎中的业务规则进行测试和比对,激活那些符合当前数据状态下的业务规则,根据业务规则中声明的执行逻辑,触发应用程序中对应的操作. 引言 目前,Java社区推动并发展了一种引人注目的新技术--Java规则引擎(Rule Engine).利用它就可以在应用系统中分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地方,让它们能在运行时可以动态地管理和修

Java规则引擎工作原理及应用

引言 目前,Java社区推动并发展了一种引人注目的新技术--Java规则引擎(Rule Engine).利用它就可以在应用系统中分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地方,让它们能在运行时可以动态地管理和修改,从而为企业保持灵活性和竞争力提供有效的技术支持. 规则引擎的原理 1.基于规则的专家系统(RBES)简介 Java规则引擎起源于基于规则的专家系统,而基于规则的专家系统又是专家系统的其中一个分支.专家系统属于人工智能的范畴,它模仿人类

【java规则引擎】之规则引擎解释

转载:http://www.open-open.com/lib/view/open1417528754230.html 现实生活中,规则无处不在.法律.法规和各种制度均是:对于企业级应用来说,在IT技术领域,很多地方也应用了规则,比如路由表,防火墙策略,乃至角色权限控制(RBAC),或者Web框架中的URL匹配.不管是那种规则,都规定了一组确定的条件和此条件所产生的结果. 举一个例子: IF 汽车是红色车是运动型的驾驶员是男性驾驶员在16-25岁之间THEN 保险费用增加20% 从这个例子可以看

Java规则引擎与其API(JSR-94)

简介:本文对Java规则引擎与其API(JSR-94)及相关实现做了较详细的介绍,对其体系结构和API应用 有较详尽的描述,并指出Java规则引擎,规则语言,JSR-94的相互关系,以及JSR-94的不足之处和展望 复杂企业级项目的开发以及其中随外部条件不断变化的业务规则(business logic),迫切需要分离 商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地 方,让它们能在运行时(即商务时间)可以动态地管理和修改从而提供软件系统的柔性和适应性.

【java规则引擎】之Drools之Rete算法

一:规则引擎--->规则引擎的核心是Pattern Matcher(模式匹配器).不管是正向推理还是反向推理,首先要解决一个模式匹配的问题. --->对于规则的模式匹配,可以定义为: 一个规则是一组模式的集合.如果事实/假设的状态符合该规则的所有模式,则称为该规则是可满足的. 模式匹配的任务就是将事实/假设的状态与规则库中的规则一一匹配,找到所有可满足的规则. 二:什么是模式匹配 对于模式匹配我们都应该不陌生,我们经常使用的正则表达式就是一种模式匹配. 正则表达式是一种"模式(pat

【java规则引擎】简单规则的rete网络示意图

一个Fact通过Session添加到规则网络中,如何进行规则匹配的大致过程如下 (1)通过根结点对象从EntryPointNode的Map集合中找到相应的EntryPointNode对象 (2)EntryPointNode对象有一个ObjectTypeNode的Map集合,把fact的class转化成ClassObjectType,从该集合中找到ObjectTypeNode (3)OjectTypeNode对象的sink属性引用着这个fact事实的规则网络 (4)从sink属性中的链表中拿出一个