Drools学习笔记-1

由于在公司负责规则引擎产品,而之前对这个领域也不是很熟,所以需要了解下行业其他产品的情况,drools自然是最有名的,经过了几天的学习,对drools和rete算法有了一个初步的了解。


  1.drools是用于一个产品生系统的规则引擎是一个用来实现产生式规则系统(前边提到的production/inference好像就该翻译为产生式规则)的高效模式匹配算法。它可以被分为两部分:规则编译和运行时执行。规则编译是指根据规则集生成推理网络的过程,运行时执行指将数据送入推理网络进行筛选的过程。

2. 关于rete算法的简单理解:


       1) fact 事实: 我的理解是类似于一个Java pojo

        2)规则: 就是drl文件写的东西,when........then , LHS 是指 when 后面的条件, RHS是指 then 后面的推理结论。

        3)  模式:是指if 后面的条件经过拆分为最小粒度的规则,一个if 可能又多个最小粒度的规则组成,而这个最小粒度的规则就是后面rete算法里面的 TypeNode。

   rete算法的推理过程:

         把所有的规则逐一的进行分解(分解成若干了最小粒度的规则因子),然后用这些分解后的最小粒度的规则因子构建一个网络,这个网络是按照最后的推理结果来构建的,比如说then 1的推理条件 when 1,那么 when 1可能由几个因子构成,那么这几个因子连接起来最后都满足后就可以连接到 then1.

         rete算法的匹配过程:

                 1.首先构建一个root节点,这个是rete网络的入口

                 2. 去除第一个规则,从规则一种取出模式1,也就是说最小粒度的规则因子,

                      a) 检查模式1中的参数类型,如果是新类型,则在rete网络中新建一个节点

                      b)检查模式1中的Alpha 节点是否存在,如果不存在,则在内存中新建Alpha 节点,并在网络中新建Alpha节点,如果存在,则记录下节点位置。我理解这个节点就是用来保存符合这个类型的所有数据

                     c)一直重复上面的步骤,直到所有的规则的所有模式都遍历完成。

                     d)连接beta节点,例如 beta(1)的数据节点是 Alpha(1) 和 Alpha(2)。

                     e)重复d,直到所有的beta节点构建完成

              下面是网上的例子,看了好多个例子,感觉这个比较浅显易懂。


规则P1:

LHS:

C1:(年纪:研2)

C2:(性别:男)

C3:(身材:较瘦)

C4:(身高:大于175cm)

RHS:

韩启超

RETE图如下:

图中各图形与节点的对应关系是:

 

 

TypeNode:

AlphaNode:

  BetaNode:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值