CLIPS语言与RETE network

上篇大致介绍了一下RETE算法的基础,本文采用CLIPS语言来进行规则的描述,简单阐述一下由规则生成rete network的过程。转载请注明来自:http://chillwarmoon.iteye.com
每一个产生式系统都必须有一种或者几种相应的语言用来描述产生式, CLIPS 是一种用于专家系统的计算机语言, 该语言能够描述规则、自定义函数和泛型函数、面向对象编程三种知识。

在CLIPS语言中,deftemplate关键字类似于Pascal中的记录结构,也就是说deftemplate以一种类似于Pascal定义记录的方式定义了一组相关的字段。这些字段在CLIPS中用slot关键字表示。举例来说:

  1. (deftemplate LinkError
  2. (slot computer_name (type STRING))
  3. (slot ipaddress (type STRING))
  4. (slot usr_name (type STRING))
  5. (slot dest_ipaddress (type STRING))
  6. )

定义了一个链接错误,该链接错误有三个属性,computer_name指定了发起链接的计算机名,ipaddress指定了发起链接的计算机地址,usr_name指定了发起链接的计算机用户名,dest_ipaddress指定了所要链接的目标计算机ip地址。

defrule是CLIPS语言中定义规则的关键字,举例来说:

RULE
  1. (defrule find_unaccessable_host ;规则头
  2. (LinkError
  3. ( dest_ipaddress ?dest_variable ) ;
  4. ( dest_ipaddress ?source_variable ) ;
  5. )
  6. (LinkError
  7. ( dest_ipaddress ?dest_variable ) ;
  8. ( dest_ipaddress ~?source_variable ) ;
  9. )
  10. => (printout t "the computer whose ip address is" ?dest_variable "has fault")
  11. )

该规则的目的是找到不能够访问的主机,主机A连接B时,产生LinkError定义的事件实例e1;主机C链接B时,产生LinkError定义的事件实例e2;如果两个事件都发生,那么根本原因可能是:IP地址为BIP(B主机的IP)的主机链接故障;则将该故障做为一个可能的故障假设。在该规则中dest_variable是CLIPS语言定义的变量,用于连接两个事件实例。

以上是利用CLIPS语言描述规则的情况,这里举出两个规则信息,然后给出其对应的鉴别网络图。

规则1:

 

(defrule joinConversion1(EventOne(intAttr ?intA))(EventTwo(strAttr ?intB&:(> ?intA ?intB))(shortAttr 100))=>(printout t "joinConversion1 fired and there may be an fault in the harddisk." crlf))

规则2:

 

(defrule joinConversion2(EventOne(intAttr ?intA))(EventTwo(strAttr ~?intA)(shortAttr 101))=>(printout t "joinConversion2 fired and int to string eval was good" crlf))

生成的鉴别网络如图所示:

RETE_NETWORK

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值