规则推理算法:Treat

来源:互联网 发布:js获取asp控件的值 编辑:程序博客网 时间:2024/05/20 16:35

参考自《Treat: A Better Match Algorithm for AI Production Systems》

引言
文中提出Treat算法并引入了一种新的状态保存方法,叫conflict-set support,并对Treat和rete算法进行了性能比较。结论是在5个不同的OPS5产生式程序中,TREAT优于rete。
通常来说,一个产生式系统由一组规则或产生式作为规则库,和一些事实(working memory elements)wme组成,每个产生式由LHS和RHS组成,LHS包含一组条件也就是pattern来匹配事实,RHS就是规则触发后要执行的动作,包括对working memory的更新等等。产生式系统一直重复执行Match(事实匹配规则)、Select(从触发规则集中选规则执行其RHS)、Act(就是选到的规则执行的动作)。
一般来说,执行过程中很多working memory都不怎么改变,所以递增地计算conflict set及状态保存是有意义的。(也算是rete等算法高效的依据)。rete算法被认为是对于这类问题最好的算法。然而,没有对它和其他算法进行比较的相关的文献,并且McDermott, Newell and Moore三个人提出一个猜测,就是rete中的状态保存机制可能是没有价值的。
匹配算法的发展:
1、类比关系数据库,单个条件的匹配可以看做数据库中一个对象的查询,多个条件一起的匹配,就像数据库中的join操作一样。
2、状态保存减少计算,介绍几种可保存的状态。McDermott, Newell and Moore提出了三种可以合并到算法中的知识和状态信息分别是Condition Membership、Memory Support、Condition Relationship,Treat算法提出第四种conflict-set。
-Condition Membership,每个条件使用一个count变量来记录满足条件的wme,如果一个规则的所有(非否定)条件对应的count都不为0,那这个规则就是active的,匹配算法忽略那些不是active的规则。
-Memory Support,就是每个条件维护一个indexing memory来保存看哪些wme满足该条件,也就是alpha-memory。
-condition relationship,类似数据库的join操作,代表规则中条件之间连接的关系。
-Conflict Set Support,就是匹配成功规则的wme,即如果A 1 B 12 C 2,满足规则的所有条件,就把它们存起来。
3、McDermott et al.‘s conjecture
猜想

Rete算法的优缺点:
优点:大量的状态保存极大减少了重复计算,节点共享。
缺点:当一个WMe移除时,需要进行一系列操作来维护。还有beta memory占用的空间太多,共享网络结构不适合并行环境等等以及没有理由condition support,就是对于所有的规则都进行计算。提出treat算法的主要动机是rete算法在并行环境中的困难。

Treat算法:
A.Conflict set support
实现这个要求假设没有否定条件时候(否定条件的意义就是某个事件不发生,有这种条件会使规则复杂一些),当action是增加一个wme时,这个wme进行计算,如果有这个wme参与的最后匹配规则的实例,加入conflict set中。如果是删除一个wme,则直接找conflict set中包含这个的删掉即可。
B.Negated Condition Elements
加入否定条件复杂化了算法,Treat算法必须考虑4种情况,加入新的wme,触发新的规则或者是使得已匹配的有否定条件的规则删除。删除一个wme,删掉已匹配的规则或触发有否定条件的规则.
C.Treat算法细节
Treat算法利用了condition membership,memory support,和conflict set support。每个条件都对应有标号,来对其相关信息进行索引。alpha mempories就是memory support的部分,这个和rete算法中一样,但是alpha memories在网络中是由一个vector组织的,而不是杂乱无章散布的。alpha-mempory由三部分组成,old,new-delete和new-add。有新的wme增加或者删除时都不是直接操作old,而是先加到new-add或new-delete里。
为引入condition membership,当alpha-memory的old-men部分更新时候,检查它是否由有变为空或者由空变为有,如果检测到这种临界的改变,就更新active rule的集合。(active rule是指所有单个条件对应的alpha memory都有匹配的,这个规则就是active的,当alpha-memory中有临界的改变时候,有的active rule变为not active,有的变为active).

这里写图片描述
Treat算法示意图

流程
Treat算法处理流程

算法流程解释:
1.Act:执行RHS中的动作,对WM进行改变。
2.对于每个WM的改变,进行相应处理。
对于每个条件元组CEi,如果wme匹配条件成功,若是增加到WM的,就加到new-add-men[CEi],若是删除的就加到new-delete-men[CEi].
3.Match:处理删除
4.对于每个非空的del-mem,cur-ce=CE-num,即当前操作的memory,修改old-memory[cur-ce]=old-memory[cur-ce]-new-del-men[cur-ce],如果old-memory大小变为0,then update-rule-active,即调整对应的active-rule。
然后进行匹配,如果wme元组对应的条件是肯定条件,就直接删掉conflict-set中对应有这个元组的实例即可。如果这个条件是否定条件,那就拿它来和满足条件元组的进行匹配,生成新的触发规则的实例,存到conflict-set中
5.Match:处理增加
6.对于每个非空add-mem,cur-ce=CE-num,old-size=size of old-mem。old-mem[cur-ce]=old-mem[cur-ce]+add
-mem[cur-ce].如果old-size=0 then update-rule-active.然后再根据条件来进行操作,和delete的类似。

Treat算法和Rete算法在上面操作中很多都是相同的,但是Treat算法没有保存beta-memory,而是每次重复计算,rete每次只需要计算一次,但是treat算法在删除wme时比rete简化很多。文中在5个OPS5程序上进行了比较。比较rete和Treat算法的比较次数,下面是比较的结果
这里写图片描述
根据结果来看,Treat算法对于delete wme时所进行的操作比rete少的多,add wme时所进行的的操作要超过rete或差不多。

原创粉丝点击