在”Rete算法和逻辑推理“中介绍了基于规则的Rete网络的构建和数据匹配,进行数据筛选等。本文详细介绍Rete算法的执行及其推理过程。
H1
准备规则和数据
先假设有下面两个规则:
IF (?person 想要 ?item)
(?store 销售 ?item)
THEN (?person 去了 ?store)
IF (?person 去了 ?store)
(?employee 工作在 ?store)
THEN (?person 看见了 ?employee)
为了表述方便,规则描述使用英文:
IF (?person wants ?item)
(?store sells ?item)
THEN (?person visits ?store)
IF (?person visits ?store)
(?employee works-at ?store)
THEN (?person sees ?employee)
初始化有以下10条数据:
1.张伟想要汽水
2.王芳想要鞋子
3.李娜想要汽车
4.张敏想要汽车
5.张三工作在4S店
6.李四工作在士多店
7.王五工作在百货商场
8.百货商场销售鞋子
9.4S店销售汽车
10.士多店销售汽水
上面的规则使用rete图来表示就是:
由于R3规则是B12的结果,所以也可以表示为:
使用=>来表示THEN后面的结果。
H1
Rete算法的执行
使用简单的表格来记录每一步执行时需要存储的推断数据。下图针对每一个规则设置一个表格,其中上面的表格存储每个规则匹配的数据;下面表格是规则执行的结果部分,严格来说这里的R1,R2只是规则中的一个模式(Patern)。方便说明我们直接将该模式视为一个规则。
逐个读取事实数据,在读取完前7条数据时,并没有触发需要推断的事实,可以得到:
在读取第8条数据"百货商场销售鞋子"时:
在读取“百货商场销售鞋子”匹配规则R2,同时也触发了规则一中的THEN部分,也就是"Join R1, R2, with B=D => A visits C”。因此在下面的表格规则一THEN部分,增加了一条“王芳 鞋子, 百货商场”的三元组。由于规则一的结果的触发,同时触发了规则R3和,执行了规则二的结果,也就是“Join R3, R3 with F=H ==> E sees G", 在下面的规则二的THEN部分,增加了”(王芳 百货商场 王五)的三元组。该过程可以理解为“王芳想要鞋子,百货商场卖鞋子,所以王芳去了百货商场,由于王五在百货商场工作,所以王芳在百货商场看到了王五。”
继续读取数据,在读取“4S店销售汽车”后推断数据发生了如下变化:
最后在读取“士多店销售汽水”后,推断数据的结果如下:
H1
推理结果
在将所有数据匹配完成后,可以看到规则匹配的结果也就是Rete算法根据规则推理的结果,也就是规则一和规则二的执行结果,上述表格,可以这样描述推理结果:
张伟想要汽水,去了士多店,看到了李四。
王芳想要鞋子,去了百货商店,看到了王五。
李娜,张敏想要汽车去了4店,看到了张三。