由于在公司负责规则引擎产品,而之前对这个领域也不是很熟,所以需要了解下行业其他产品的情况,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: