转载请注明: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对象匹配了该规则,形成一个议程,加入到冲突区,执行该条件的结果部分:该学生是一个篮球苗子。

最新文章

  1. java关于ArrayList中toArray方法的使用
  2. javase基础复习攻略《七》
  3. 如何在ZBrush中添加毛发
  4. chubu
  5. 未完全关闭数据库导致ORA-01012: not logged的解决
  6. JavaScript部分总结
  7. UIScrollview不全屏,解决方案
  8. android贴士Toast
  9. Solr搜索技术
  10. Linux系统查找
  11. Linux 大爆炸:一个内核,无数发行版
  12. Windows代替touch命令
  13. WPF中TreeView.BringIntoView方法的替代方案
  14. 【iCore4 双核心板_ARM】例程十九:USBD_MSC实验——虚拟U盘
  15. SQLGetEnvAttr
  16. mysql 查两个表之间的数据差集
  17. DDT模块
  18. MySQL crash-safe replication(1)
  19. Linux(Centos7)下安装 zookeeper docker版 集群
  20. selenium IDE常用命令

热门文章

  1. ggplot2学习总结
  2. Pro*C基础
  3. 【Flask】Flask-Sqlalchemy使用笔记
  4. 《Inode与Block重要知识总结核心讲解》【转】
  5. JMeter学习(一)目录介绍
  6. TortoiseSVN教程级别指南
  7. maven 中pom.xml文件依赖包从本地加载如何配置?
  8. Codeforces Round #275 (Div. 2) D
  9. Android之动画1
  10. 《Advanced Bash-scripting Guide》学习(十八):[[ ]]与[ ]的一些特殊情况