专家系统中基于Jess的推理研究

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:xinguan701
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:介绍了专家系统开发平台Jess,并把Jess运用到民航机务维修差错预警专家系统中进行研究。该系统中维修差错以规则形式表示,推理机使用基于规则的不确定性推理方法进行推理,使系统达到有效预测和控制可能发生的维修差错,从而保证飞行安全。
  关键词:专家系统;Jess;规则;可信度;不确定性推理
  中图分类号:TP18 文献标识码:A文章编号:1009-3044(2007)16-31102-02
  Reasoning Research Based on Jess in Expert System
  YANG A-qin,GAO Shu
  (College of Computer Science & Technology,Wuhan University of Technology,Wuhan 430063,China)
  Abstract:The paper introduces development platform for expert system -Jess,and applies Jess to early warning expert system for maintenance errors in civil aviation.Maintenance errors in the system are represented in the form of rule, and the reasoner adopts the method of Rule-Based uncertainty reasoning to forecast and control possible occurrences of maintenance errors effectively, and thus guarantees the safety of the fligt.
  Key words:expert system;Jess;rule;uncertianty reasoning
  
  1 引言
  
  随着计算机技术和人工智能技术的飞速发展,专家系统也有了新的重大发展,出现了一种新技术――基于Java的规则引擎技术,如:JBoss Rules、JLisa等开源项目和JRules、Jess等商业产品都是基于Java的规则引擎技术产品。Jess是1995年由美国Sandia国家实验室分布式系统计算组成员Ernest J. Friedman-Hill用JAVA语言开发的专家系统内核。Jess非常小巧、灵活,并且是已知规则引擎中最快的。本文针对Jess在民航机务维修差错预警专家系统中的应用进行研究。
  
  2 Jess的概述
  
  Jess(Java Expert System Shell)是一个扩展CLIPS的基于Java平台的规则引擎。它以CLIPS的设计原理为基础进行编写,除继承了CLIPS的优点外,还具有许多自己独特的特征,如支持正向和逆向推理,可以在系统运行环境下直接调用Java的类库等。
  尽管Jess可以作为一个独立程序运行,但是常常把Jess库嵌入到Java代码中,通过使用Jess的API或Java规则引擎API(由javax.rules包定义)来实现Jess相应的功能。
  Jess提供了一个交互式的、命令行的开发环境,也可以使用文本编辑代码成为脚本,以批处理方式装入Jess引擎。开发Jess脚本文件的工具很多,可以采用任一款文本编辑器,或以插件的形式附加到Eclipse平台来构建Jess的集成开发环境[1]。
  2.1 Jess的基本组成与知识表示
  Jess的核心也是由事实库(也称为工作内存)、规则库、推理机三大部分组成,并采用产生式规则作为基本的知识表达模式。
  (1)事实:在Jess中,事实分为三类:有序事实(Ordered facts)、无序事实(Unordered facts)、对象事实(Object facts)。每个事实都有一个模板(template),而每个模板有一个模板名和一系列槽(slots)组成。事实根据模板获取它的事实名称和一系列槽列表。创建模板可以使用deftemplate结构或defclass函数。其中有序事实类似于仅有一个多槽(multislot)的有无序事实。对象事实可通过defclass函数和definstance函数定义,对象事实相应类的定义由Java语言书编写,编译通过后即可动态地加入系统中。对象事实相似与Java Beans。对象事实的槽对应Java Beans中的属性,因而具有Java Beans的一些特性。
  (2)规则:在Jess中,规则的表达形式沿用了CLIPS的语法结构,Jess也支持面向过程的编程方式,它提供了一些语句来控制规则后件的操作流程,如使用if…then…else和while…do…语句[2]。Jess定义规则使用了defrule函数,规则的前件由与事实匹配的模式组成,不能包含函数调用,规则后件由函数调用组成。
  
  3 Jess的推理引擎
  
  Jess支持前向和逆向推理两种方式,Jess的规则引擎利用著名算法Rete的改进形式根据知识库进行规则匹配来提高规则条件匹配效率。Rete算法其核心思想是将分离的匹配项根据内容动态构造匹配树,以达到显著降低计算量的效果[3]。
  4 基于Jess的民航机务维修差错预警推理的研究
  4.1 不确定性推理
  对待一般规则e-> h,使用确定性因子描述规则强度,定义为CF(h,e) 。原始证据的确定性因子由用户在系统运行时提供,非原始证据的确定因子由不确定性推理算法得出,在实际应用中,规则强度的值由领域专家主观给出。通常使用如下算法:
  (1)若已知规则强度CF(h,e)和前提可信度CF(e),则结论h的可信度为:
  CF(h)=CF(h,e)×CF(e)
  (2)若前提条件e是子条件ei的逻辑组合,则:
  CF(e)=CF(e1 AND e2 AND … AND en)=min{CF(e1),CF(e2),…,CF(en)}
  CF(e)=CF(e1 OR e2 OR … OR en)=max{CF(e1),CF(e2),…,CF(en)}
  (3)若系统中有两个规则得到同样的结论,每个结论都会有一个可信度,则该结论的可信度是:(设CF1(h),CF2(h)表示从不同的规则得出的某个结论的两个可信度)
  ①当CF1(h)和CF2(h)≥0时:
  CF(h)=CF1(h)+CF2(h)-CF1(h)×CF2(h)
  ②当CF1(h)和CF2(h)≤0时:
  CF(h)=CF1(h)+CF2(h)+CF1(h)×CF2(h)
  ③否则:CF(h)=CF1(h)+CF2(h)
  若有多个规则得到同样的结论,则可反复使用如上公式[4]。
  4.2 Jess在机务维修差错预警系统中的进行不确定性推理的实现
  由机务维修差错引起的航空灾害经常发生,且航空维护、修理是确保航空公司安全、准点运营的重要因素,同时,机务维修差错的发生很多是由人为因素引起的,人为因素引起的差错是不可以预料的、模糊的、层次不穷的、不确定的,因此利用Jess进行基于规则的不确定性推理方式,根据专家的经验知识进行快速而准确地推理,分析和识别出引发差错或不安全事件的诱因,并给出相关的对策,以避免同类差错或隐患的再次发生,消除机务维修系统的隐形失效,切断不安全事件发生链,从而提高维修质量,保障飞行安全。
  4.2.1 Jess推理部分的组织结构
  机务维修差错预警专家系统中有关Jess推理部分的组织结构如图1所示。
  图1 Jess推理部分的组织结构
  4.2.2 知识库的组织
  知识库由事实库和规则库组成。在航空维修差错研究中,针对差错,分析差错的诱因,提供差错预控对策,把这些差错信息整理成规则形式来描述和表示,且这些规则应具有典型性和概括性,利用Jess实现不确定性推理。系统采用JavaBean的形式将事实和结论封装成类,对类的成员的操作不以成员方法的形式完成,而是以规则后件的形式完成,例如对于可信度的计算以规则后件的形式完成。定义的JavaBean类中CausationBean存储各种诱因,ConclusionBean存储可能导致的差错和相应对策,其中 CausationBean定义如下:
  import java.io.Serializable;
  public class CausationBean implements Serializable
  {private String m_name = "";//诱因名
  private float m_cf=0.00f;//诱因事实的可信度
  public float getCf() { return m_cf; }
  public void setCf(float f) { m_cf = f; }
  public String getName() { return m_name; }
  public void setName(String s) { m_name = s; }}
  ConclusionBean定义如下:
  import java.io.Serializable;
  public class ConclusionBean implements Serializable
  {private String m_error = "";//差错
  private String m_measure = "";//预控对策
  private float m_cf=0.00f;//结论的可信度
  public float getCf() { return m_cf ;}
  public void setCf(float f) { m_cf = f; }
  public String getError() { return m_error; }
  public void setError(String s) { m_error = s; }
  public String getMeasure() { return m_measure; }
  public void setMeasure(String s) { m_measure = s; }}
  4.2.3事实模板的定义与事实
  在使用Java Beans之前,首先要定义相关联的模板。而注册Java Beans是为了生成相应的模板(deftemplate),Beans的属性对应与模板的槽。利用defclass函数可以通知Jess自动生成一个特定的模板来表示特定类型的Java Beans,如。
  (defclass causation examples.rules.CausationBean)
  (defclass conclusion examples.rules.ConclusionBean)
  在Jess中等价的模板为:
  (deftemplate causation (slot cf) (slot class) (slot name) (slot OBJECT))
   (deftemplate conclusion (slot cf) (slot class) (slot error) (slot measure) (slot OBJECT))
  因为每个对象类都继承java.lang.Object,getClass()是java.lang.Object的方法,所以以上模板有槽“class”。槽“OBJECT”是由Jess添加的,它是与模板关联的Bean的引用。
  definstance函数功能是向事实库中加入Java Beans对象事实。由于Java Beans有支持java.beans.PropertyChangeListeners特性,如果只要Bean属性发生改变,都需通知Jess,则需在definstance函数中,指定为dynamic,否则指定为static。若definstance指定为static,Java Beans对象的属性发生改变,Jess不会被通知,若需Java Bean对象属性随之发生改变,Jess中对应的对象事实的槽值也需要更新,可以使用update函数。update函数就是通知Jess更新相关联的对象事实更新槽值。
  4.2.4 应用实例
  在Jess中,使用defrule构造型来定义规则。根据本系统的实际情况,一条规则主要由规则前件,规则后件,规则前件的可信度,规则强度(前件对后件的支持度),结论的可信度和判断是否结论成立的阈值组成。
  例如,规则库有如下规则,其规则前件由两个存在“与”关系的子条件组成,它们分别为 (causation(name "时间和人力不足") (cf?c0))和 (causation(name "工作交接不清") (cf?c1)),这两个子条件的可信度分别是变量?c0和?c1,根据3.1节第二种情况可知,规则前件的可信度为?c0和?c1中最小值;此规则的规则强度为0.8,则规则后件(结论)的可信度为0.8乘以规则前件的可信度;结论成立的阈值为0.5,如果结论的可信度大于阈值,结论成立,否则结论不成立;实现上述规则的Jess代码如下:
  (defrulepppp001
  ?fact1 <- (causation(name "时间和人力不足") (cf?c0))
  ?fact2 <- (causation(name "工作交接不清") (cf?c1))
  =>
  (bind ?c2(* 0.8(min?c0?c1))
  (if(> ?c20.5)
  then
  (bind ?sb2 (new examples.rules.ConclusionBean))
  (definstance conclusion ?sb2 static )
  (call ?sb2 setError"未安装所需的设备/零件" )
  (call ?sb2 setCf?c2 )
  (call ?sb2 setMeasure "1.增加维修人员,减少时间上的压力.2. 严格执行工作交接班制度,工作交接要有文字记录.")
  (update ?sb2)
  (printout t "事实: " (fact-slot-value ?fact1 name) "、" (fact-slot-value ?fact2 name) crlf)
  (printout t "应用了规则pppp001 (规则强度为0.8):" crlf)
  (printout t "条件1:" (fact-slot-value ?fact1 name) crlf)
  (printout t "条件2:" (fact-slot-value ?fact2 name) ";" crlf)
  (printout t "推出结论:" (call ?sb2 getError))
  (format t ",可信度为:%.2f%n" ?c2 crlf)
  (printout t "相应措施:" (call ?sb2 getMeasure) crlf crlf)))
  本系统还利用了Java Swing 组件和jess的API函数来编写Jess推理过程中涉及到的用户界面,其中涉及到的jess API主要类有:jess.Rete、 jess.swing.JTextAreaWriter 、 jess.awt.TextReader。jess.Rete表示规则引擎,jess.swing.JTextAreaWriter 和jess.awt.TextReader作为Jess推理过程所需的输入输出流。通过界面输入事实到事实库中,如:工作交接不清,可信度为0.89和时间和人力不足,可信度为0.85。Jess推理的实现效果如图2所示。
  5 结束语
  Jess引擎是根据事实和规则来推理,且推理速度是已知规则引擎中最快的。把Jess应用到机务维修差错预警专家系统中进行不确定性推理,能有效地控制同类差错或隐患的再次发生。结合其它推理技术,如基于案例推理、基于模型推理等技术来研究航空机务维修差错预警专家系统也是目前研究的方向。
  参考文献:
  [1]http://www.jessrules.com/jess/docs/index.shtml.
  [2]基于Java规则引擎的汽车发动机故障诊断专家系统研究与开发[J]. 交通与计算机.2005(23),5.
  [3]张渊,夏清国.基于Rete算法的JAVA 规则引擎[J]. 科学技术与工程. 2006(11),6.
  [4]高曙,王群,罗帆.民航机务维修差错及其预警专家系统构建[J].武汉理工大学学报(交通科学与工程版).2007(31),2.
  
  注:“本文中所涉及到的图表、公式注解等形式请以PDF格式阅读原文。”
其他文献
摘要:深入研究Apriori算法,针对Apriori算法的性能瓶颈,以Apriori算法的运行事实为前提,给出了约简事务数据库中事务记录的理论,提出了一种利用事务地址索引表来有效约简事务数据库中事务记录的Apriori优化算法,以提高Apriori算法的执行效率。  关键词:关联规则;Apriori算法;事务地址索引表;约简事务  中图分类号:TP301.6 文献标识码:A文章编号:1009-30
期刊
摘要:建筑CAD技术的广泛应用,给建筑业带来了巨大的变革,它改变了人们传统的设计思维和模式,极大地提高了设计的效率。本文分析了CAD技术的发展现状及建筑CAD技术的应用特征,在此基础上,分析了建筑CAD技术的发展前景。  关键词:建筑CAD;应用;发展  中图分类号:TP317文献标识码:A文章编号:1009-3044(2007)16-31167-03  Briefly Analyzing CAD
期刊
摘要:图像增强是图像处理的一个重要分支,它对图像整体或局部特征能有效地改善;直方图是图像处理中最重要的基本概念之一,它能有效地用于图像增强。本文主要讨论了直方图均衡化和规定化处理的图像增强技术,并给出了相关的推导公式和算法;同时用MATLAB语言加以实现,给出标准的数字图像在各种处理前与处理后的对照图像、具体算法、实验结果及直方图。结果表明,用直方图均衡化和规定化的算法,能将原始图像密集的灰度分布
期刊
摘要:标量量化多描述编码(MDSQ)算法能有效提高信息的传输接收效果。结合Matlab工具在矩阵处理上的灵活性,用程序实现了MDSQ算法,并通过实验结果的分析证明该算法的可行性。  关键词:多描述编码;标量量化;Matlab;码率  中图分类号:TP391文献标识码:A文章编号:1009-3044(2007)16-31148-01  Image MDSQ Arithmetic And Its Im
期刊
摘要:生活中LED显示屏的应用越来越广,本文重点对大型室外LED显示屏的智能控制做了初步的研究,就控制回路做了详细介绍,对整个显示屏的智能环节做了分析,希望大家能通过本文对LED显示屏有更多的了解。  关键词:LED显示屏;屏内温度;屏内湿度;传感器;检测;控制  中图分类号:TP18文献标识码:A文章编号:1009-3044(2007)16-31123-02  Large Outdoor LED
期刊
摘要:随着信息技术的发展,计算机日益走进人们的工作、学习和生活,成为不可或缺的工具。在疾控工作中接触最多的是Microsoft Office,其中常用的办公软件有Microsoft Office Word 2003 文字处理,Microsoft Office Excel 2003 表格处理,Microsoft Office PowerPoint 2003 幻灯片等。本文从实际工作出发,着重介绍了办
期刊
摘要:嵌入式开发需要良好的软硬件环境,目前ARM公司的开发工具ADS、RealView以及Keil与ARM核处理器结合的较好,但硬件开发平台昂贵。Proteus软件较好的解决了硬件仿真的问题,它支持外围数字电路和模拟电路与处理器协同仿真,可以随意搭建硬件虚拟仿真平台。针对Keil for ARM编译器,结合Proteus软件,以ARM处理器LPC2124介绍了如何构建ARM嵌入式开发平台进行源代码
期刊
摘要:针对Flash存储器的特点,设计了一种适合开源实时操作的嵌入式文件系统,首先详细介绍了μC/OS-II内核在ARM7TDMI上的移植过程,其次介绍了基于此上的简易嵌入式文件系统设计方案.最后经测试得出结论:该嵌入式文件系统代码精简,占用系统资源少,执行效率高,有较高的安全性。  关键词:Flash存储器;μC/OS-II;嵌入式文件系统  中图分类号:TP311文献标识码:A文章编号:100
期刊
摘要:本文介绍了使用Photoshop软件中的切片工具切割网页直观图的具体方法和应注意的有关事项,因每切割一个方框就是一个表格,所以可以结合Dreamweaver软件来轻松布局网页表格。  关键词:切片;Photoshop;Dreamweaver;表格  中图法分类号:TP317文献标识码:A文章编号:1009-3044(2007)16-31179-02  Using Photoshop and
期刊
摘要:开发了一套c语言实现的小型实时图形用户界面工具,介绍了GUI系统的基本设计思路。系统已成功应用于一款继电保护机产品。  关键词:实时;GUI工具;窗口;控件;继电保护机  中图分类号:???文献标识码:?文章编号:1009-3044(2007)16-31078-02  Design of tidy real-time GUI tools  FANG Wen-kai, ZHONG Rui  (
期刊