近10年來,,隨著計(jì)算機(jī)技術(shù)和人工智能技術(shù)的飛速發(fā)展,,尤其是網(wǎng)絡(luò)技術(shù)的進(jìn)步,專家系統(tǒng)也有了新的重大發(fā)展,,出現(xiàn)了以Java為核心技術(shù)的專家系統(tǒng)開發(fā)工具,。由美國(guó)Sandia實(shí)驗(yàn)室推出的專家系統(tǒng)外殼Jess(Java expert system shell)就是其中的一個(gè)出色代表,本文將介紹它的來龍去脈和主要特點(diǎn),,以及圍繞Jess我們所做的初步工作,。 |
專家系統(tǒng)工具,即專家系統(tǒng)語言,,是一種比LISP或C語言層次更高的語言,,它提供一個(gè)推理機(jī)去執(zhí)行該語言的語句。早期的專家系統(tǒng)工具大都由LISP開發(fā),,20世紀(jì)80年代中至90年代初是LISP的黃金時(shí)期,。但隨著LISP的廣泛應(yīng)用,其問題也逐漸暴露,。一是LISP的運(yùn)行速度,。直到1989年,LISP應(yīng)用程序只有在用LISP編寫的操作系統(tǒng)上才具有較好的運(yùn)行效率,,所以,,一些計(jì)算機(jī)公司專門設(shè)計(jì)了運(yùn)行人工智能語言程序的專用機(jī)器,但這使每次軟件的更新或升級(jí)都要付出巨大的代價(jià),。二是LISP的嵌入性,。當(dāng)要解決一個(gè)非常復(fù)雜的問題時(shí),LISP顯得極其無能為力,。這兩點(diǎn)限制了LISP的發(fā)展,,它只被使用在某些特定的應(yīng)用領(lǐng)域。 |
CLIPS(C Language Integrated Production System)正是為解決這些問題而出現(xiàn)的,。它于1984年由美國(guó)航空航天局約翰遜空間中心(NASA’s Johnson Space Center)推出,,意在克服LISP移植性差、開發(fā)工具和硬件成本高,、嵌入性低的缺點(diǎn),。CLIPS是一個(gè)基于Rete算法的前向推理語言,,用標(biāo)準(zhǔn)C語言編寫,目前最新的版本為6.10,。它具有高移植性,、高擴(kuò)展性、強(qiáng)大的知識(shí)表達(dá)能力和編程方式以及低成本等特點(diǎn),。一經(jīng)推出,,立即受到歡迎,被廣泛應(yīng)用于政府,、工業(yè)和學(xué)術(shù)界,,有力地推動(dòng)了專家系統(tǒng)技術(shù)在各領(lǐng)域及各種運(yùn)行環(huán)境下的應(yīng)用。目前,,CLIPS是一個(gè)自由軟件,,主要由原來在NASA工作的設(shè)計(jì)人員維護(hù)。它提供了一個(gè)新聞?dòng)懻摻M,,可作為從事CLIPS的開發(fā)人員交換信息的場(chǎng)所,。此外,在NASA的組織下還成立了一個(gè)CLIPS用戶協(xié)會(huì),,以推動(dòng)CLIPS的開發(fā)與應(yīng)用,。更詳細(xì)的信息可訪問它的官方網(wǎng)站http://www./clips/CLIPS.html。由于CLIPS的強(qiáng)大功能與良好性能,,以及NASA對(duì)該軟件采取的開放政策,,CLIPS在美國(guó)國(guó)內(nèi)外都有眾多用戶,他們應(yīng)用CLIPS開發(fā)了許多實(shí)用的專家系統(tǒng),,并根據(jù)各自的需要對(duì)CLIPS進(jìn)行擴(kuò)充和改造,,如加拿大研究委員會(huì)在CLIPS中加入了模糊推理功能,推出了FuzzyCLIPS,,我們也成功地在CLIPS中加入了圖形功能,,推出了圖形化專家系統(tǒng)工具GEST(Graphical Expert System Shell)。 |
Jess是1995年由美國(guó)Sandia國(guó)家實(shí)驗(yàn)室分布式系統(tǒng)計(jì)算組成員Ernest J. Friedman-Hill用Java實(shí)現(xiàn)的一個(gè)經(jīng)過擴(kuò)充的CLIPS版本,。它以CLIPS的設(shè)計(jì)原理為基礎(chǔ)進(jìn)行編寫,,除繼承了CLIPS的優(yōu)點(diǎn)外,還具有許多自己獨(dú)特的特征,,如支持正向和逆向推理,,可以在系統(tǒng)運(yùn)行環(huán)境下直接調(diào)用Java的類庫等,這些特點(diǎn)將專家系統(tǒng)的開發(fā)過程同功能強(qiáng)大的Java語言結(jié)合起來,,使采用Jess語言開發(fā)的專家系統(tǒng)具有良好的移植性、嵌入性,,可以方便地應(yīng)用到網(wǎng)絡(luò)上的不同機(jī)器中,。另外,,Java多線程機(jī)制使Jess可以與其他應(yīng)用程序并發(fā)執(zhí)行,同步機(jī)制保證了對(duì)共享數(shù)據(jù)的正確操作,,通過使用不同的線程完成特定的行為,,就可以很容易地實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互行為。目前,,Jess被廣泛用于學(xué)術(shù),、工業(yè)、商業(yè)等領(lǐng)域,,是一個(gè)有著廣闊發(fā)展前景的專家系統(tǒng)開發(fā)平臺(tái),。 |
同大多數(shù)專家系統(tǒng)工具一樣,Jess的核心也是由事實(shí)庫,、規(guī)則庫,、推理機(jī)三大部分組成,并采用產(chǎn)生式規(guī)則作為基本的知識(shí)表達(dá)模式,。 |
在Jess中,,事實(shí)包括簡(jiǎn)單事實(shí)和對(duì)象事實(shí)。簡(jiǎn)單事實(shí)就是一個(gè)描述事物的斷言,,而對(duì)象事實(shí)除此之外還封裝了方法,,可以接受外界信息改變自身的特征。這一概念本身并不是Jess首次提出的,,ART-IM,、CLIPS都支持這一概念。但Jess表達(dá)對(duì)象事實(shí)的方法確實(shí)別具一格:它用Java而非系統(tǒng)本身的語言來定義對(duì)象,。在CLIPS 6.0中,,對(duì)象事實(shí)通過系統(tǒng)本身的語句defclass和make-instance來定義,但在Jess中,,類的定義由Java語言書寫,,編譯通過后即可動(dòng)態(tài)地加入系統(tǒng)中。用Java虛擬機(jī)編譯通過后,,通過defclass命令將該類加入系統(tǒng),,它就可以執(zhí)行類似于CLIPS中對(duì)類的各種操作,如生成它的一個(gè)實(shí)例,、調(diào)用它的方法等,。由此可見,Jess可以方便地調(diào)用Java中的類庫,,使用Java中的各種數(shù)據(jù)結(jié)構(gòu)和方法,,從而具備其他系統(tǒng)不可比擬的優(yōu)良的嵌入能力。 |
Jess通過模式匹配語言對(duì)事實(shí)進(jìn)行操作,。在Jess中,,模式匹配操作符的類型有很多,,從可以同任意事實(shí)進(jìn)行匹配的單一操作符到只能同滿足特定約束值的事實(shí)進(jìn)行匹配的復(fù)雜操作符。特別要指出的是,,Jess中有“unique”條件元素,,它告訴系統(tǒng)同該模式匹配的事實(shí)是惟一的。這樣,,當(dāng)模式發(fā)現(xiàn)一條事實(shí)同它匹配后,,就會(huì)停止對(duì)事實(shí)庫的檢索,在實(shí)際應(yīng)用中,,這可以將系統(tǒng)的性能提高20%~30%,,而CLIPS系統(tǒng)不支持這一條件元素。 |
在Jess中,,規(guī)則的表達(dá)形式沿用了CLIPS的語法結(jié)構(gòu),,通過對(duì)規(guī)則前件和后件的限定,它可以支持內(nèi)容豐富的模式匹配語言,。另外,,Jess支持面向過程的編程方式,它提供了一些語句來控制規(guī)則后件的操作流程,,如使用if…then…else和while…do…語句,,這樣它就能很有效地利用面向過程編程的優(yōu)勢(shì)??傊?,Jess的這些特性使系統(tǒng)擁有很強(qiáng)的知識(shí)表示能力。 |
Jess支持前向和逆向推理兩種方式,,前向推理同CLIPS的原理相同,,逆向推理則是Jess不同于CLIPS的一個(gè)顯著特征。在Jess的逆向推理中,,規(guī)則仍采用if…then…結(jié)構(gòu),,但是在逆向推理時(shí),推理引擎執(zhí)行的是前件沒有得到滿足的規(guī)則,,這種行為常常被稱為目標(biāo)尋找,。顯然,Jess同時(shí)支持前向和逆向推理的特點(diǎn)使其推理能力得到了加強(qiáng),。 |
推理的效率很大程度上依賴于匹配算法的效率,。Jess通過實(shí)現(xiàn)Rete匹配算法來提供非常高效的前向和逆向推理。Rete算法利用了專家系統(tǒng)中時(shí)間冗余性和結(jié)構(gòu)相似性這兩個(gè)特點(diǎn),,有效地減少了用于匹配操作的次數(shù),。因此,當(dāng)系統(tǒng)的性能是由匹配算法的質(zhì)量決定時(shí),Jess的優(yōu)點(diǎn)將更為明顯,。應(yīng)當(dāng)指出的是,,Rete算法是一個(gè)以空間換取時(shí)間的算法,,所以,,應(yīng)用Jess時(shí)應(yīng)當(dāng)考慮內(nèi)存的消耗。 |
Jess提供了一個(gè)交互式的,、命令行的開發(fā)環(huán)境,,但也可以使用文本編輯器編輯代碼,然后再通過系統(tǒng)命令以批處理的方式載入到系統(tǒng)中,。同時(shí)它還提供了一個(gè)簡(jiǎn)單的圖形開發(fā)環(huán)境,。類似于CLIPS,Jess非常重視系統(tǒng)調(diào)試工具和錯(cuò)誤跟蹤這兩方面,。它的調(diào)試命令可以幫助使用者監(jiān)視事實(shí)庫,、知識(shí)庫中的內(nèi)容,以及議程表中被激活規(guī)則的情況,,也可以監(jiān)視某一規(guī)則前件的部分匹配的情況,。在錯(cuò)誤跟蹤方面,Jess中的JessException類提供了豐富的錯(cuò)誤信息,,包含了對(duì)出錯(cuò)問題的解釋和堆棧跟蹤表中的信息,,如出錯(cuò)子函數(shù)的名字、相關(guān)的語句,、出錯(cuò)的行數(shù)等,,可以很好地幫助開發(fā)人員發(fā)現(xiàn)錯(cuò)誤原因。 |
Jess提供了一個(gè)非常完備的電子文檔,,它可以幫助開發(fā)人員很快查詢到需要的信息,,將Jess嵌入到Java應(yīng)用程序中。由于Jess在很大程度上是CLIPS的克隆版本,,感興趣的讀者可參考CLIPS用戶手冊(cè)和參考手冊(cè),。 |
4.Jess的進(jìn)一步擴(kuò)充——FuzzyJ Toolkit |
Jess自從問世以來就沒有停止過對(duì)功能的擴(kuò)展,有許多研究技術(shù)人員不斷地在Jess的基礎(chǔ)上添加新的輔助功能,。加拿大國(guó)家研究委員會(huì)信息技術(shù)研究所的R.A.Orchard早在1995年就擴(kuò)展了CLIPS的功能,,將模糊推理的功能加入到CLIPS中,推出了模糊專家系統(tǒng)外殼工具FuzzyCLIPS,。后隨著Jess的推出,,R.A.Orchard將工作重心轉(zhuǎn)移到Jess上來,將模糊推理的功能加入到Jess中,,推出了FuzzyJ Toolkit,。FuzzyJ Toolkit本身就是一個(gè)模糊專家系統(tǒng)外殼,但只支持模糊前件和模糊后件這些基本的推理方式。它可以和Jess結(jié)合,,形成功能更為強(qiáng)大的專家系統(tǒng)外殼 FuzzyJess,,F(xiàn)uzzyJess不但可以表達(dá)精確事實(shí)、模糊事實(shí),、執(zhí)行模糊推理,,還具有Jess的強(qiáng)大功能。 |
今年7月底推出的FuzzyJ Toolkit 1.2是目前的最新版本,。由于FuzzyJ Toolkit開發(fā)時(shí)間較短,,還有許多不完善的地方,所以,,在與Jess集成的FuzzyJess中存在兩個(gè)主要問題,。首先,它不支持對(duì)不確定因子的傳遞,,即在事實(shí)與規(guī)則前件是模糊匹配的時(shí)候,,規(guī)則仍然以絕對(duì)的確信度推導(dǎo)出后件。其次,,沒有引入模糊對(duì)象事實(shí)的概念,,它是指事實(shí)含有精確和模糊的屬性。從人機(jī)交互的意義上說,,模糊對(duì)象事實(shí)有利于知識(shí)的表達(dá),,能夠非常好地體現(xiàn)人類的知識(shí)結(jié)構(gòu)。我們?cè)谝陨蟽蓚€(gè)方面對(duì)FuzzyJess的功能進(jìn)行了擴(kuò)充和完善,,編寫了Fuzzywrap類包,,這樣在FuzzyJess的基礎(chǔ)上,為模糊模式匹配,、模糊數(shù)據(jù)綜合,、確信度因子的傳遞等方面提供了一種簡(jiǎn)單易行的方式,它所基于的原理和算法可參閱FuzzyCLIPS,。 | |
|