Rete算法

在生成系统中,推论过程可分成三个阶段 : 比对(Match)、冲突解决(Conflict resolution)、执行
(Act)。而在比对的方法中,最直接的方法就是把所有可能的比对条件组合全部以推论式表示,
在输入资料后一一比对所有的推论式,比对成功后进入下一个阶段,这种方式称做naive演算
法。但是这样的方法有明显的缺点,就是只要少许的变数组合就会使得推论数量暴增,变得不
可行。而RETE就是一个改良的演算法。

RETE主要目的是避免在工作记忆(Working Memory)及规则记忆(Rule Memory or Production
Memory)中重复比对。RETE利用单元的串列(List of element)来记录已经比对过的资料,来避免
工作记忆重复比对的问题,而利用树状架构排序网路(tree-structured sorting network)来避免规则
记忆的重复比对。这两种资料结构可以改善原先的问题。

举例来说,有三个变数A(x),B(y),C(z)的AND组合形成rule memory,在naive演算法中,若00暴增。而RETE演算法可避免这种情形。

以上的说明,范例有更详细的解释。但RETE也有其限制。第一、所有规则的单元(pattern)必须
是可编译的,否则无法组成树状架构排序网路。第二、所有的标的(objects) 必须是可掌握的
(constant),树状网路无法处理标的为可变的情形。第三、标的的集合改变不能太快,否则将花
费太多的时间在重组树状网路上。

后续有学者提出了许多的改良方法,例如用平行处理来加快速度,以线性方法降低时间复杂度
等,都是可考虑的方向。

RETE演算法范例
--------------------------------------------------------------------------------

假设在规则记忆中有下列三条规则

if A(x) and B(x) and C(y) then add D(x)

if A(x) and B(y) and D(x) then add E(x)

if A(x) and B(x) and E(x) then delete A(x)

RETE演算法会先将规则编译成下列的树状架构排序网路


而工作记忆内容及顺序为{A(1),A(2),B(2),B(3),B(4),C(5)},当工作记忆依序进入网路后,会
依序储存在符合条件的节点中,直到完全符合条件的推论规则推出推论。以上述例子而言,
最后推得D(2)。

生成系统的平行处理
Parallel rule firing in production systems

--------------------------------------------------------------------------------

在生成系统推论过程的比对(Match)阶段,由于规则记忆的内容数量庞大,我们希望能以平行
(Parallel)方式处理,著名的平行化比对演算法有RETE和TREAT。

而这里主要讨论在执行平行处理方法时,二个主要的问题:干扰分析(interference analysis)及平
行触发(parallel firing)演算法。我们可用资料关系图(Data dependency graph)配合‘全规则条件’
(all-rule condition)来侦测干扰现象的发生。

但是如果直接使用这样的方法,会因为使用全规则条件检查而花费太高的计算成本,所以我们
使用一种‘选择演算法’(selection algorithm)来避免不必要的检查。选择演算法先对新加入的P
节点做编译阶段的部分规则条件(pair-rule condition)检查,若不会形成干扰,则直接加入资料关
系图,若在编译阶段有可能形成干扰,则再进行全规则条件检查。如此便可降低在执行阶段的
计算检查成本。上述说明在范例中有更详细的解说。

而在处理生成系统的平行化模组时,可分成三大部分考虑:规则的平行处理、管道(pipeline)
的平行处理及资料的平行处理在实际发展系统的时候,应顾虑模组内及模组间的干扰问题。


线性前向链结演算法
LFA:A linear forward chaining algorithm for AI production systems

--------------------------------------------------------------------------------

在所有已知的生成系统里,存在着两个主要的共同问题:一个是所有的链结演算法的时间复
杂度(time complexity)会有不同程度的指数增加。另一个是比起检查个别推论的正确性,生成系
统的链结动作复杂且耗时得多。

LFA演算法是解决前述问题的一个方法,这个演算法分成两个部分:首先将生成系统中所有的
规则(rule)予以分类,并建立分类的规则,这种分类规则称做‘概念规则(rule schema)’,而所
属的规则称为‘规则主体’。在一个庞大的生成系统中,我们可先将所得资料直接比对概念规
则是否符合,若被比对的概念规则不符,则所属的规则主体均不比对。这种‘概念规则+规则
主体’的方法,可有效减少比对的次数。

接着将概念规则依条件的数量排序并链结,并依下列步骤检查并调整排序:1.找出并删除死结
回圈。2.解决即时回圈。3.重新排序即重新链结。重复以上步骤直到所有回圈解决为止。此时
若进行比对,可依条件的数量以杂凑法进行搜寻,如此即可迅速进行比对。而进行前向链结时,
也可以线性时间进行链结,达到改善时间复杂度指数增加及链结复杂的问题。在范例中,对
LFA演算法有更详细的介绍。

但是LFA有其限制。其规则记忆必须是静态推论(static inference),而且在开始推论前需搜集所
有可能的资讯及条件,才能使LFA演算法发挥效率。所以LFA特别适用在如电厂管理(所有的
资讯均由侦测器(sensor)提供)等专家系统。

你可能感兴趣的:(智能与算法)