转自:http://www.360doc.com/showWeb/0/1/42844.aspx
近10 年来,随着计算机技术和人工智能技术的飞速发展,尤其是网络技 术的进步,专家系统也有了新的重大发展,出现了以Java为核心技术的专家系统开发工具。由美国Sandia实验室推出的专家系统外壳Jess(Java expert system shell)就是其中的一个出色代表,本文将介绍它的来龙去脉和主要特点。
从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的强大功能。