2.6 其他表示方法
2.6.1 面向对象的表示法
自从施乐(Xerox)公司1980年推出面向对象语言SMALLTALK-80之后,各种不同风格、不同用途的面向对象语言如雨后春笋般地相继问世,并且得到快速的发展。面向对象的程序设计技术,已开始走向成熟,并朝着可视化方向发展。面向对象程序设计技术已成为软件开发的主流技术。
近年来,在智能系统的设计与构造中,人们开始使用面向对象的思想、方法和开发技术,在知识表示、知识库的组成与管理、专家系统的设计等方面取得了一定的进展。本节简要介绍面向对象的知识表示方法。
面向对象技术中的核心概念是对象,而对象的进一步抽象则构成类,所以类、子类和对象(又称为类的实例)构成了一个层次结构,而且子类可以继承父类的数据及操作。这种层次结构及继承机制直接支持了分类知识的表示,而且其表示方法与框架表示法有许多相似之处,知识可按类以一定层次形式进行组织,类之间通过链实现联系。
用面向对象方法表示知识时,需要对类的构成形式进行描述。不同的面向对象语言所提供的类的描述形式不同,下面给出一般的描述形式:
Class〈类名〉[:〈父类名〉]
[〈类变量表〉]
Structure
〈对象的静态结构描述〉
Method
〈关于对象的操作定义〉
Restraint
〈限制条件〉
End
其中,Class是类描述的开始标志;〈类名〉是该类的名字,它是系统中该类的唯一标志;〈父类名〉是任选的,指出当前定义的类之父类;〈类变量表〉是一组变量名构成的序列,该类中所有对象都共享这些变量,对该类对象来说它们是全局变量,当把这些变量实例化为一组具体的值时,就得到了该类中的一个具体对象,即一个实例;Structure后面的〈对象的静态结构描述〉用于描述该类对象的构成方式;Method后面的〈关于对象的操作定义〉用于定义对类元素可施行的各种操作,它既可以是一组规则,也可以是为实现相应操作所需执行的一段程序,在C++中则为成员函数调用;Restraint后面的〈限制条件〉指出该类元素所应满足的限制条件,可用包含类变量的谓词构成,当它不出现时表示没有限制。
在使用不同的面向对象语言进行智能系统开发时,有关知识的分类方法以及类的描述形式要根据具体的语言要求来实现,类的描述形式也可能由于语言不同而有所不同。
2.6.2 过程表示法
知识表示的方法可分为两大类,一类是陈述性知识表示法,另一类是过程性知识表示法。陈述性知识表示所强调的是知识的静态特性和显式描述,即对事物属性及事物间的关系的描述,对于如何使用这些知识,则需要通过控制策略来决定。过程性知识表示则不同,它可将所要表示的知识以及如何使用这些知识的控制策略一起隐式地表示为一个求解问题的过程。
陈述性知识表示法在问题求解系统中将问题的属性表述与求解控制策略相分离,这类知识表示法强调的是事物属性与事物间关系等静态特性的描述。过程性知识表示方法则注重的是知识的运用,它将与问题有关的知识和运用这些知识求解该问题的控制策略一起描述为一个或多个问题求解过程。这种过程就是对问题的表示形式,它实际上是一段程序,和问题相关的所有信息均隐含在程序之中,而问题求解系统中的知识库则是一组程序的集合。在利用问题求解系统求解问题时,知识的使用方式就是调用知识库中相应的程序或过程并执行之。对系统知识库的修改则是通过对知识库中的有关程序进行增、删、改来完成的。
过程表示法的本质就是用程序的形式对知识进行表示,因而在这种知识表示中已将那些用于求解问题的控制策略融于知识表示之中。过程表示法可以有多种实现形式,过程规则式表示法是比较典型的一种,下面就以它为例说明知识的过程表示方法。
用过程规则表示知识时,一般由四个部分组成,即激发条件、演绎操作、状态转换和返回。
(1)激发条件
所谓激发条件就是指在求解问题过程中,启动该知识所应满足的条件,或者说调用一个知识库中的程序所应具备的条件或提供哪些参数。激发条件一般由两部分构成——推理方向、调用模式,就类似于过程的两个形参。推理方向用以确定被调用过程的推理方式,即是正向推理(FR)还是反向推理(BR),正向推理要求从初始证据开始向目标推理,而反向推理则要求从目标开始向证据推理。而调用模式则是调用该过程的形式参数,在调用该过程用于推理时,需要调用者提供这些参数。对于正向推理,只有当综合数据库中的已有事实可以与其调用模式匹配时,该过程规则才能被激活,数据库中的已有事实就类似实参;对于反向推理,只有当调用模式与查询目标或子目标匹配时才能将该过程规则激活,查询目标或子目标就类似实参。
(2)演绎操作
演绎操作就是一个过程中将依次被执行的那些动作,它由一系列的子目标构成,每一个子目标就类似通常程序中的一条语句。在应用推理求解问题时,当启动知识库中某个过程的激发条件被满足时,该过程即被启动,其中的每一个操作将被依次执行。例如,下面介绍的例子中的GOAL(Brother?xy)和GOAL(Fatherzx)。
(3)状态转换
状态转换操作是指过程被执行中,用来完成对综合数据库的增、删、改操作。分别用IN-SERT、DELETE和MODIFY操作符实现。
(4)返回
过程规则的最后一个语句是返回语句,用以将控制权返回到调用该过程规则的上一级过程规则那里去。
下面是一个用过程规则表示知识的例子。
假设有这样的一条表示父子关系的知识:“如果x与y是兄弟,且z是x的父亲,则z也是y的父亲”,则用过程规则表示法可表示为如下:
BR(Father?z?y)
GOAL(Brother?xy)
GOAL(Fatherzx)
INSERT(Fatherzy)
RETURN
这里,BR为反向推理标志,(Father?z?y)为调用模式;GOAL表示求解子目标,即进行另一个过程的调用;INSERT表示对数据库进行插入操作;RETURN表示该过程规则的结束,每一个过程规则都须以RETURN作为结束标志;带“?”的变量表示其值将在该过程中求得。显然,这种表示法与程序设计语言中的过程表示有些相像,对每一个过程,RETURN语句都标志着该过程的结束,并把控制权返回到调用它的过程中去。
用上述过程规则所表示的知识中蕴涵了求解推理的过程,它的含义是要求解具有父子关系(Father)的两个人z和y是谁。求解采用反向推理方式进行,首先通过对过程GOAL(Brother?xy)的调用,确定出与y为兄弟关系的x是谁,并将x通过过程GOAL传递给(Fatherzx),从而得到z和y具有父子关系的答案,并利用状态转换操作INSERT将(Father zy)插入到数据库中,最后,利用RETURN将控制权返回给调用它的过程。