基于规则的程序

在基于规则的编程中,大量知识/信念被表示为一套将条件与动作联系起来的“如果—则”(IF—THEN)规则集:如果满足这个条件,则进行那个动作。这种形式的知识表示利用了形式逻辑[埃米尔·珀斯特(Emil Post)的“产生式”系统]。但是人工智能先驱艾伦·纽厄尔(Allen Newell)和赫伯特·西蒙(Herbert Simon,又名司马贺)通常认为它是人类心理学的基础。

条件和动作都可能很复杂,规定的内容可能是几个或多个命题的合取(或析取)。如果同时满足几个条件,则包含最多命题的合取被赋予优先级。所以,“如果目标是制作烤牛肉和约克郡布丁”将优先于“如果目标是制作烤牛肉”,而在条件中增加“和三种蔬菜”又优先于“如果目标是制作烤牛肉和约克郡布丁”。

基于规则的程序不提前规定每一步的顺序。相反,每条规则都在等待被其条件触发。尽管如此,这类系统可以用来做规划。如果不能做规划,那么它们在人工智能方面就只能发挥有限的作用。但是它们的规划方式不同于最古老、最为人们熟悉且最常用的编程形式(有时称为“执行控制”)。

在能进行执行控制的程序(如GPS和逻辑理论机,详见第1章)中,规划被明确表示。程序员按照严格的时间顺序,规定一个寻找目标的指令序列,指出哪一步该执行哪一条指令:“做这个,然后去做那个;然后看看X是否为真;如果是真,就做这个事;如果不是,就做那个事。”

“这个事”或“那个事”有时是一条设置某个目标或子目标的明确指令。例如,机器人如果有离开房间的目标,那么可能指示该机器人设置开门的子目标(原文如此);接下来,如果检查门当前状态的结果显示门将被关闭,则设置抓握门把手的子次目标(人类蹒跚学步者可能需要更低级的子次目标——即让成年人抓住自己够不着的门把手,并且如果婴儿要做到这一点,可能需要在更低级别设定几个目标)。

基于规则的程序也可以用来解决如何逃离房间的问题。然而,规划层级不会被表示为按时间顺序排列的明确步骤,而是表示为构成系统的“IF—THEN”规则集合中所隐含的逻辑结构。某一条件可能要求已经建立了这样一个目标(IF你想打开门,而且你不够高)。同样,动作可以包括设置一个新目标或子目标(THEN找一个成人)。更低级的目标将自动激活(IF你想要求一些人做一些事,THEN设置接近他们的目标)。

当然,程序员必须列入相关的IF—THEN规则(上述案例中指的是涉及门和门把手的规则)。但是,他们不需要预期这些规则的所有潜在逻辑含义(这是一把“双刃剑”,因为潜在的不一致可能在很长一段时间都无法被发现)。

被激活的目标/子目标被贴在中央“黑板”上,可供整个系统访问。显示在黑板上的信息不仅包括被激活的目标,还包括感知输入和当前处理的其他方面(该想法不仅影响了一个意识神经心理学的前沿理论,还影响了以它为基础的意识人工智能模型,详见第6章)。

基于规则的程序广泛应用于20世纪70年代早期出现的先驱“专家系统”。这些系统包括:MYCIN系统——在人类医生鉴定感染性疾病和开抗生素药物时提建议;还有树枝状演算法(DENDRAL)——对有机化学中某一特定范围内的分子进行光谱分析。例如,做医疗分析的计算机咨询专家系统MYCIN,它的诊断方法是将症状/病人本身的身体状况(条件)与诊断结论/建议相匹配,以便继续检测或开处方(动作)。这些程序是人工智能远离“从一般化走向专门化之梦”的第一步,同时为实现埃达·洛夫莱斯的梦想迈出了第一步——机器制造科学之梦(见第1章)。

由于基于规则的知识表示,程序能够被逐步建立,因为程序员或者强人工智能系统本身可增加对域的了解。新规则可以随时添加。没有必要从头重新编写程序。但是有一个棘手的问题,即如果新规则与旧规则逻辑冲突,系统将不会总是做它应该做的事,甚至可能和它应该做的事相去甚远。在处理一小组规则时,这些逻辑冲突很容易被避免,但是如果系统较大,它们就很难被识破。

20世纪70年代,新IF—THEN规则在与人类专家不断对话的过程中得到,它们被要求解释自己的决定。今天,尽管许多规则不是来自有意识的内省,但这些规则更高效。现代专家系统(今天很少使用的术语)应用范围广,从大型科学研究和商业程序到手机上小的应用程序。由于受益于其他形式的知识表示,许多系统超过旧系统,如统计和专用视觉识别或大数据的使用(见第4章)。

在某些狭窄领域中,这些程序可以帮助甚至取代人类专家。有些超越了上述领域的世界翘楚。近四十年前,在诊断大豆疾病的时候,一个基于规则的系统比最权威的专家还准确。如今,用它来帮助科学、医学、法律甚至服装设计领域专业人士的例子不胜枚举(这不完全是好事,详见第7章)。