博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【java规则引擎】模拟rete算法的网络节点以及匹配过程
阅读量:6936 次
发布时间:2019-06-27

本文共 1376 字,大约阅读时间需要 4 分钟。

转载请注明:

本文只用于理解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对象匹配了该规则,形成一个议程,加入到冲突区,执行该条件的结果部分:该学生是一个篮球苗子。

 

你可能感兴趣的文章
Linux设备驱动程序学习之分配内存
查看>>
JSON格式要求
查看>>
【IOS 开发】Object-C 运算符
查看>>
原博客链接,CSDN和科学网
查看>>
【温故知新】形态学操作
查看>>
my13_mysql xtrabackup备份的时间点
查看>>
java死锁详解
查看>>
[模板] 最近公共祖先/lca
查看>>
解析函数论 Page 8 $\log (1+x)$的泰勒展开
查看>>
如何创建一个 mongo 数据库并为它添加一个认证用户?
查看>>
工具使用——VMware安装及使用
查看>>
视频直播关键技术:流畅、拥塞和延时追赶
查看>>
OC面向对象—封装
查看>>
NGUI的anchors属性的使用
查看>>
从扩展方法到匿名方法再到LINQ
查看>>
Widows2003开机取消按CTRL+ALT+DEL
查看>>
小程序请求豆瓣API报403解决方法
查看>>
异或运算、与运算、或运算 运用在 多项选择题
查看>>
SQLITE3 使用总结(3~5)(转)
查看>>
WTL学习笔记——树形控件与XML结合
查看>>