-新一代专家系统工具——基于Java的Jess

来源:百度文库 编辑:神马文学网 时间:2024/04/20 03:16:13
新一代专家系统工具——基于Java的Jess
北京理工大学计算机科学与工程系 吴沁奕 陈英 吴鹤龄
01-11-16 上午 09:33:54
近10年来,随着计算机技术和人工智能技术的飞速发展,尤其是网络技术的进步,专家系统也有了新的重大发展,出现了以Java为核心技术的专家系统开发工具。由美国Sandia实验室推出的专家系统外壳Jess(Java expert system shell)就是其中的一个出色代表,本文将介绍它的来龙去脉和主要特点,以及围绕Jess我们所做的初步工作。
从LISP到CLIPS
专家系统工具,即专家系统语言,是一种比LISP或C语言层次更高的语言,它提供一个推理机去执行该语言的语句。早期的专家系统工具大都由LISP开发,20世纪80年代中至90年代初是LISP的黄金时期。但随着LISP的广泛应用,其问题也逐渐暴露。一是LISP的运行速度。直到1989年,LISP应用程序只有在用LISP编写的操作系统上才具有较好的运行效率,所以,一些计算机公司专门设计了运行人工智能语言程序的专用机器,但这使每次软件的更新或升级都要付出巨大的代价。二是LISP的嵌入性。当要解决一个非常复杂的问题时,LISP显得极其无能为力。这两点限制了LISP的发展,它只被使用在某些特定的应用领域。
CLIPS(C Language Integrated Production System)正是为解决这些问题而出现的。它于1984年由美国航空航天局约翰逊空间中心(NASA’s Johnson Space Center)推出,意在克服LISP移植性差、开发工具和硬件成本高、嵌入性低的缺点。CLIPS是一个基于Rete算法的前向推理语言,用标准C语言编写,目前最新的版本为6.10。它具有高移植性、高扩展性、强大的知识表达能力和编程方式以及低成本等特点。一经推出,立即受到欢迎,被广泛应用于政府、工业和学术界,有力地推动了专家系统技术在各领域及各种运行环境下的应用。目前,CLIPS是一个自由软件,主要由原来在NASA工作的设计人员维护。它提供了一个新闻讨论组,可作为从事CLIPS的开发人员交换信息的场所。此外,在NASA的组织下还成立了一个CLIPS用户协会,以推动CLIPS的开发与应用。更详细的信息可访问它的官方网站http://www.ghg.net/clips/CLIPS.html。由于CLIPS的强大功能与良好性能,以及NASA对该软件采取的开放政策,CLIPS在美国国内外都有众多用户,他们应用CLIPS开发了许多实用的专家系统,并根据各自的需要对CLIPS进行扩充和改造,如加拿大研究委员会在CLIPS中加入了模糊推理功能,推出了FuzzyCLIPS,我们也成功地在CLIPS中加入了图形功能,推出了图形化专家系统工具GEST(Graphical Expert System Shell)。
新一代工具Jess
Jess是1995年由美国Sandia国家实验室分布式系统计算组成员Ernest J. Friedman-Hill用Java实现的一个经过扩充的CLIPS版本。它以CLIPS的设计原理为基础进行编写,除继承了CLIPS的优点外,还具有许多自己独特的特征,如支持正向和逆向推理,可以在系统运行环境下直接调用Java的类库等,这些特点将专家系统的开发过程同功能强大的Java语言结合起来,使采用Jess语言开发的专家系统具有良好的移植性、嵌入性,可以方便地应用到网络上的不同机器中。另外,Java多线程机制使Jess可以与其他应用程序并发执行,同步机制保证了对共享数据的正确操作,通过使用不同的线程完成特定的行为,就可以很容易地实现网络上的实时交互行为。目前,Jess被广泛用于学术、工业、商业等领域,是一个有着广阔发展前景的专家系统开发平台。
1. Jess的基本组成和知识表示
同大多数专家系统工具一样,Jess的核心也是由事实库、规则库、推理机三大部分组成,并采用产生式规则作为基本的知识表达模式。
在Jess中,事实包括简单事实和对象事实。简单事实就是一个描述事物的断言,而对象事实除此之外还封装了方法,可以接受外界信息改变自身的特征。这一概念本身并不是Jess首次提出的,ART-IM、CLIPS都支持这一概念。但Jess表达对象事实的方法确实别具一格:它用Java而非系统本身的语言来定义对象。在CLIPS 6.0中,对象事实通过系统本身的语句defclass和make-instance来定义,但在Jess中,类的定义由Java语言书写,编译通过后即可动态地加入系统中。用Java虚拟机编译通过后,通过defclass命令将该类加入系统,它就可以执行类似于CLIPS中对类的各种操作,如生成它的一个实例、调用它的方法等。由此可见,Jess可以方便地调用Java中的类库,使用Java中的各种数据结构和方法,从而具备其他系统不可比拟的优良的嵌入能力。
Jess通过模式匹配语言对事实进行操作。在Jess中,模式匹配操作符的类型有很多,从可以同任意事实进行匹配的单一操作符到只能同满足特定约束值的事实进行匹配的复杂操作符。特别要指出的是,Jess中有“unique”条件元素,它告诉系统同该模式匹配的事实是惟一的。这样,当模式发现一条事实同它匹配后,就会停止对事实库的检索,在实际应用中,这可以将系统的性能提高20%~30%,而CLIPS系统不支持这一条件元素。
在Jess中,规则的表达形式沿用了CLIPS的语法结构,通过对规则前件和后件的限定,它可以支持内容丰富的模式匹配语言。另外,Jess支持面向过程的编程方式,它提供了一些语句来控制规则后件的操作流程,如使用if…then…else和while…do…语句,这样它就能很有效地利用面向过程编程的优势。总之,Jess的这些特性使系统拥有很强的知识表示能力。
2.Jess的推理机制
Jess支持前向和逆向推理两种方式,前向推理同CLIPS的原理相同,逆向推理则是Jess不同于CLIPS的一个显著特征。在Jess的逆向推理中,规则仍采用if…then…结构,但是在逆向推理时,推理引擎执行的是前件没有得到满足的规则,这种行为常常被称为目标寻找。显然,Jess同时支持前向和逆向推理的特点使其推理能力得到了加强。
推理的效率很大程度上依赖于匹配算法的效率。Jess通过实现Rete匹配算法来提供非常高效的前向和逆向推理。Rete算法利用了专家系统中时间冗余性和结构相似性这两个特点,有效地减少了用于匹配操作的次数。因此,当系统的性能是由匹配算法的质量决定时,Jess的优点将更为明显。应当指出的是,Rete算法是一个以空间换取时间的算法,所以,应用Jess时应当考虑内存的消耗。
3.开发环境和文档支持
Jess提供了一个交互式的、命令行的开发环境,但也可以使用文本编辑器编辑代码,然后再通过系统命令以批处理的方式载入到系统中。同时它还提供了一个简单的图形开发环境。类似于CLIPS,Jess非常重视系统调试工具和错误跟踪这两方面。它的调试命令可以帮助使用者监视事实库、知识库中的内容,以及议程表中被激活规则的情况,也可以监视某一规则前件的部分匹配的情况。在错误跟踪方面,Jess中的JessException类提供了丰富的错误信息,包含了对出错问题的解释和堆栈跟踪表中的信息,如出错子函数的名字、相关的语句、出错的行数等,可以很好地帮助开发人员发现错误原因。
Jess提供了一个非常完备的电子文档,它可以帮助开发人员很快查询到需要的信息,将Jess嵌入到Java应用程序中。由于Jess在很大程度上是CLIPS的克隆版本,感兴趣的读者可参考CLIPS用户手册和参考手册。
4.Jess的进一步扩充——FuzzyJ Toolkit
Jess自从问世以来就没有停止过对功能的扩展,有许多研究技术人员不断地在Jess的基础上添加新的辅助功能。加拿大国家研究委员会信息技术研究所的R.A.Orchard早在1995年就扩展了CLIPS的功能,将模糊推理的功能加入到CLIPS中,推出了模糊专家系统外壳工具FuzzyCLIPS。后随着Jess的推出,R.A.Orchard将工作重心转移到Jess上来,将模糊推理的功能加入到Jess中,推出了FuzzyJ Toolkit。FuzzyJ Toolkit本身就是一个模糊专家系统外壳,但只支持模糊前件和模糊后件这些基本的推理方式。它可以和Jess结合,形成功能更为强大的专家系统外壳 FuzzyJess,FuzzyJess不但可以表达精确事实、模糊事实、执行模糊推理,还具有Jess的强大功能。
我们的工作
今年7月底推出的FuzzyJ Toolkit 1.2是目前的最新版本。由于FuzzyJ Toolkit开发时间较短,还有许多不完善的地方,所以,在与Jess集成的FuzzyJess中存在两个主要问题。首先,它不支持对不确定因子的传递,即在事实与规则前件是模糊匹配的时候,规则仍然以绝对的确信度推导出后件。其次,没有引入模糊对象事实的概念,它是指事实含有精确和模糊的属性。从人机交互的意义上说,模糊对象事实有利于知识的表达,能够非常好地体现人类的知识结构。我们在以上两个方面对FuzzyJess的功能进行了扩充和完善,编写了Fuzzywrap类包,这样在FuzzyJess的基础上,为模糊模式匹配、模糊数据综合、确信度因子的传递等方面提供了一种简单易行的方式,它所基于的原理和算法可参阅FuzzyCLIPS。