我们这学期的一门课是专家系统,在课上我们用Jess作为编程语言。我们的老师也算大方,把Jess的作者写的一本书《Jess in Action》全书影印下来给我们看,又把另外一本《Building Expert Systems: Principles, Procedures, and Applications》借给我们看。前几个星期,我因为第二本书是借的,就在一个周末把全书浏览了一遍,写了一篇文章。这个周末,我把第一本书带到学校,看了几章。
我之前其实是不大看重这本书的。因为从书名上看来,这本书主要讲的是Jess语言。而另外一本书题目中有专家系统,显得更大观一些。Jess语言的一些内容是我们课程的前半部分的主要内容之一,因此Jess语言的一些语法之类的东西我们早就在课上学到了。Jess本身对我来说不是难学的语言,因为之前用LISP、Prolog和J写过作业,因此我相信除了Brainfuck一类的语言外,不会再有让我很难接受的语法了。
不过今天扫完了书的前8章后,感觉比之前又有了不同。
首先是一些语言的细节。我们之前对语言的介绍有些“功利”的感觉──主要讲的是专家系统、关于知识的一些概念,Jess只不过是一个辅助的语言。学这门课的人都有用Prolog写作业的经历,因此我一度觉得为什么不用Prolog而是要用Jess来做专家系统呢?而这本书把语言的基石,以及fact、rule相关的一些东西分别细说出来后,对于Jess语言的感觉就更明显了。原先是整个是一团混沌,只知道要做成一样东西需要怎么做;现在则是把这团混沌条理化了。
另外就是也看了在课上老师没有讲的一些东西,比如Rete network之类的属于语言实现的底层的内容。还有JVM的地址空间大小导致Java垃圾回收的效率对Jess程序执行速度的影响等。
看这本书的另一个收获就是Jess的价值。世界上专家系统的外壳很多,知名的除了Jess外,还有public domain的CLIPS。CLIPS是用C语言来实现的,其实抛开一些细节上的改良之外,Jess只不过是用Java把CLIPS再实现一遍罢了。与人工智能仍在实验室之内不同,专家系统则早已被人们用在了各种商业领域(填写报税表、操控仪器、驾驶地铁等)。而涉及到商用领域的编程,Java则明显的比C语言有了很大的优势。
就好比JRuby比CRuby对JVM更友好一样,Jess可以很容易的与Java互动。本来我只是以为Jess由于是用Java实现的关系,可以调用编译成字节码的Java函数。结果没想到两者间的互动远比我想象的深刻,除了函数外,连Java的类都可以在Jess中使用。这样就相当于Java的数据类型可以和Jess互通了,而且书上也有代码展示了在Jess中创建一个Java的HashMap对象,然后往里面hash东西,就和在Java中一样。这样一来,Jess和Java的关系,就不只是我过去想的代码互相调用、通过JDBC操控数据库那么简单了。实际上,书上说用Jess来编写专家系统可以有两种大的方向:一是用Java来写,并调用Jess来完成专家系统部分的运算;二是用Jess来写,并在适度需要的时候调用Java代码。而Java作为一个纯面向对象的语言,用它来写大型商用程序,自然比C语言来的得心应手。
在掌握了Jess的语法后,我总是觉得不如Prolog来得顺手。当然抛开两个语言的底层的不同(比如Jess是forward chaining而Prolog是backward chaining,意味着Jess中几乎不能的递归,而这在Prolog中却是家常便饭)外,主要原因还是Jess的LISP语法有些繁琐。在Jess中添加一个fact,需要放在deffact中,在Prolog中则直接写就行了;定义rule也是如此。不过相比起Jess和Java的关系,Prolog的语法实在是太“惊世骇俗”了。因此Prolog几乎不是一个流行的语言,即使有人用Java实现了jProlog和Prolog Cafe,但毕竟因为没有完整的模拟Prolog,也没有流行起来。
专家系统领域并不如何开放。现在专家系统方面的顶尖技术都掌握在一些公司手中,研发了新技术后并不公开,因此在学术领域的发展是很落后的。所以我现在也不知道Jess在专家系统领域中处于一个什么地位。不过我估计应该不会很差,因为Jess并不是开源软件。用户需要向开发者付费购买许可证才能把Jess应用到商业软件中(Jess其实就是一个不到700KB的jess.jar文件),学术使用也需要联系开发者申请学术许可证。我们用的Jess都是老师给我们的,而不是我们从网上下载的。我今天中午给开发者写了封邮件,看看能不能申请下载到源代码来研究一下。不过半小时前收到邮件,说我可以获得用于学术的二进制代码,可以使用一年。只能长叹一声:其实我从老师那里得到的版本已经比它多很多了,我要的其实是源代码啊。
最近听说了不少关于编程语言的项目。比如Google的Go,还有VIM作者的Zimbu。不过这群大牛好像没有研究专家系统的,要是能设计个开源的专家系统外壳就好了。
求分享JESS的资料: 领导,您好,我目前正在研究基于DROOL的规则引擎,但是发现速度不理想,所以目前考虑想引入基于JESS的规则引擎, 如果有相关的资料,欢迎分享。
Hercules
Jess 最核心的资料就是《Jess in Action》这本书了,是 Jess 系统的创建者写的,我文章中的插图就是这本书的封面。