周 正
(北京师范大学哲学学院,北京 100875)
国外关于理性Agent的信念-愿望-意图(Belief-Desire-Intention,简称BDI)模型及其哲学解释的文献丰硕[1]。例如,丹尼特(Dennett)探讨了理性Agent意图的哲学基础[2];布拉特曼(Bratman)研究了其实践推理[3];拉奥(Rao)和乔治夫(Georgeff)给出了其简洁而抽象的逻辑语义[4];乔治夫(Georgeff)和兰斯基(Lansky)给出的过程推理系统PRS[5],是对理性Agent的BDI模型的实现。
虽然理性Agent的BDI模型在多个领域都有着诸多成功的应用实例,如:航天飞机的诊断、工厂的过程控制、商业过程管理,仿人机器人,等等[6]。但是BDI模型却有两个弱点:一是缺少学习能力;二是缺少显著的多Agent功能[7]。本文将在埃尔南德斯(Hernández)等工作的基础上[8],探讨多BDI-Agent系统中的学习机制。
本文在艾维诺(Inverno)等分布式多Agent推理系统dMARS说明的基础上[9],从多Agent 系统学习的视角,揭示了如何把一个BDI 结构扩展成带有学习机制的BDI 结构。为此,需要运用归纳逻辑编程方法[10]和逻辑决策树归纳[11],让Agent 学习规划何时可以执行,因为Agent 的学习行为可以由规划背景来表示,即由实践推理选择的BDI模型的组成部分来表示。
Agent 的BDI 模型可以通过意图系统和实践推理理论这两个与意图性有关的理论,实现自主行为。丹尼特把意图系统定义成具有愿望和其他命题态度的实体[2]。布拉特曼的实践推理理论认为[3]:Agent可以理解自己和他人,该理解的基础是信念、愿望和意图,而且意图被看作是规划的一部分。利用这些与意图相关的概念,可以对Agent行为进行形式化的描述,即根据信念、愿望和意图(BDI),得到Agent 的意图,并用这种意图描述,以一种相容的方式设计Agent,这种Agent 就是一个实践推理系统。BDI逻辑可以对意图和实践推理的不同方面进行形式化的研究[4]。
本文将利用如下图1中的场景,描绘带有学习能力的多BDI-Agent结构。在此场景中,有一个双手机器人(即agent r1)、一个木板(board)、一个打磨机(sander)、一个绘画喷漆器(paint sprayer)和一个钳子(vise)。给机器人设定不同的目标,如打磨木板或给自己画像。这两个目标是不相容的,因为当机器人成为被绘画的对象时,它就有一段时间不能操作了(它的状态从ok 变成painted)。机器人有不同选择(即规划)去达成目标。有可能在环境中引入其他机器人(例如agent r2)进行社会交互实验,如共享目标、资源竞争等[8]220。
图1 简单的实例场景及其简化的BDI规划
一般来说,一个BDI-Agent模型的体系结构,可以根据信念、愿望、事件队列、规划和意图这五个方面的数据结构加以说明[8]220-223。
信念:信念表示有关世界的信息。每个信念都表示成一阶逻辑的基本表达式。非基本表达式用来定义规划。通过环境感知和执行意图可以更新信念。例如,图1 展现的场景可以表示成如下信念:(p-state r1 ok)、(p-at sander free)、(p-at board free)、(p-handfree r1 left)、(p-handfree r1 right)、(p-at sprayer free),其中free是一个常元,表示物体没有被钳住或被Agent占用,其他基本表达式就是字面意思。
愿望:愿望有时被称为目标,与分配给Agent的任务对应。通常认为各种愿望之间在逻辑上是一致的。愿望包括信念达成和情境测试,情境测试用情境公式来表示,一个情境公式就是一个信念公式或信念公式的合取或析取,例如(test(and(p-state r1 ok)(p-freehand r1?x)))。所有以“?”开头的字符串都是变元,而所有以“p-”开头的字符串都是谓词符号。
事件队列:Agent 的感知被映射到储存在队列中的事件。事件包含获取或删除信念(如(add-bel(p-sand board)))、接收信息(如(told r2(achieve(p-sand board))))和获取新目标。这些实例都得到了简化,而且事件得以实现时的结构保存了历史信息踪迹;显示的内容对应于触发器,该触发器是事件的组成部分,可以用来识别这些结构。信息的接收和发出可以实现多BDI-Agent系统的能力。
规划:BDI-Agent 通常有一个预定义的规划库。每个规划都包含几个部分,如图1 的简化规划就是如此。在图1 中plan-id 用来识别规划库中的规划。图1 场景中的规划就是p007。触发器相当于规划的调用条件,说明规划需要处理的事件。规划p007 由形式为(achieve(p-sanded?obj))的事件触发。在该实例中允许使用变元。如果Agent 在事件队列中登记一个形式为(achieve(p-sand board))的事件,那么该Agent 会认为p007 是处理此事件的相关规划。被表示成一个情境公式的背景可以详细说明执行规划的环境。
如果Agent 有一只手是自由的,且待打磨的物体也是自由的,那么规划p007就是可执行的。规划体表示行动的可能方案。规划体是树形结构,其节点相当于状态,其弧线相当于Agent的行动或目标。p007的规划体从一个外部行动开始,由“*”开头的符号(*pickup?x)进行标识。外部行动类似于Agent能直接执行的过程。之后规划体还有两个目标。当规划执行时,给事件队列通告目标,然后考虑其他能执行该事件的规划,等等。另外,规划有一些维持条件,用于描述继续执行该规划必须保留的环境,规划的成功和失败由一个内在行动集加以说明。一些BDI结构还包含该规划效用的一些标准。
意图:意图是Agent 承诺执行的行动方案。每个意图作为一个规划实例栈加以实现。在图1的场景中,规划p007与响应事件(achieve(p-sanded board))相关。如果一个规划背景是Agent信念的结果,那么该规划就是可执行的。一个规划实例由一个在规划库中定义的规划以及与该规划相关的适当替换组成,如(board/?obj,left/?hand,r1/?ag)。如果触发规划的事件是外部事件,即没有规划促使该事件发生,那么就创建一个空栈,并把该规划压入到此空栈中。如果该事件是内部事件,即该事件是由一个规划促成的,那么该规划实例就压入到一个已存在的栈中,而且该栈包含促成该事件的规划。例如,在图1 的场景中,设想在执行p007 时,产生了一个处理事件(achieve(p-at(board,vise))的规划实例p005,那么该规划实例就会压入到包含p007的栈中,得到结果(p005 p007)。
这些结构与一个解释器相互作用(如图2所示),而且该解释器可能有不同的算法,最简单的算法包括如下5个步骤[8]222:
图2 受“dMARS说明”启发的BDI结构
(1)通过感知和内部行动来更新事件队列,反映已观察到的事件;
(2)选择一个事件,通常是队列里面的第一个事件,通过找出“规划库中与所选事件相关的”规划集来得到新的可能愿望,即得到“触发条件与所选事件匹配的”那些规划;
(3)从相关规划集中选择一个可执行的规划,即“其背景是Agent信念的逻辑后承的”规划,并为该规划创建一个规划实例;
(4)如前文解释的那样,将该规划实例压入到一个已存在或新的意图栈中;
(5)若事件队列为空,则选择一个意图栈,提取最上面的规划,执行该规划的当前步骤。如果这一当前步骤是行动,那么就执行该行动;如果这一当前步骤是一个子目标,将这一当前步骤加入事件队列。
BDI结构可以使用符号编程语言加以实现,即通过使用表处理语言Lisp加以实现,而且在对其解释器进行实现时,可以借鉴类似过程推理系统PRS的Jam![8]223。因为分布式多Agent推理系统dMARS中使用的结构和步骤,非常适合表处理语言Lisp的“数据表示的统一性特征”,即把步骤表示成列表,数据表示成步骤抽象,等等。
图2给出的Agent体系结构具有如下标准的BDI特征:可以为系统中的Agent定义“可用的初始行动功能”,而且可以定义使用这些初始行动的规划;根据规划库,为Agent定义和指派不同的能力;根据初始事件为每个Agent设定目标;在不同承诺策略下对Agent行为进行处理。如果BDI公式是信念集的逻辑后承,那么定义Agent的BDI语言是句法验证工具,而且内置测试函数也具有标准的BDI特征。图2给出的体系结构与OS的接口可以由表处理语言Lisp提供。
图2 给出的Agent 体系结构具有如下非标准BDI 特征:包含模拟多Agent 系统中的Agent 函数集,将其视为在同一个表处理语言Lisp 图像中运行的并行程序;一个使用DTP 定理证明器(杰迪斯[11])的接口。当Agent需要处理“内置逻辑能力无法处理的”更为复杂的认知推理时,就需要这种接口。DTP定理证明器使用模型消除算法和论域独立推理,在一阶谓词演算中,就可以处理来自数据库的查询证明,从而进行驳斥或证伪。使用带有模型消除化归的子目标推理,就可以使得DTP 推理具有可靠性和完全性[8]223。
拉维尔(Russell)和诺维格(Norvig)把泛型学习Agent结构分为以下四个部分[12]:(1)学习部分,通过执行学习算法负责自我改进;(2)执行部分,负责采取行动;(3)评判部分,负责提供反馈;(4)问题生成部分,负责建议“能提供信息的”行动。本文适合dMARS说明的BDI结构[7],对应于BDI学习Agent结构的执行部分。
BDI-Agent学习部分的设计,以及具体学习方法的选择,通常受到如下五个主要问题的影响[8]224-225。
1.执行部分的哪些子部分可以通过学习加以改进
BDI-Agent是直接面向行动的推理,而无Agent的人工智能系统,是直接面向信念的认知推理。从实践推理理论中的信念作用看,即使信念能够解释Agent行为的合法性,这些信念也仅仅是背景框架的一部分,这些信念和先验意图都会限制新意图的采纳。因此,可以把规划背景视为以某种方式对实践推理行动的编码。对BDI体系结构进行扩展,即,在使Agent能够了解他们的规划的背景,即规划何时是可执行的。准确地说,本文的BDI-Agent不学习规划,而是学习何时使用规划。
2.如何表示“通过学习可以改进的”性能子部分
BDI 体系结构由信念公式和情境公式这两类一阶公式来表示,这类似于Prolog 事实的表示方法。信念公式用来定义规划,每个信念公式也是一个情境公式,但是情境公式还包括信念公式的合取或析取。规划背景表示成情境公式。当考虑候选的学习方法时,这些表示方式存在如下两个问题:第一,给定信念公式和情境公式的表示方式,就需要抛弃命题学习方法;第二,把规划背景表示成情境公式,就要求学习方法的目标表示必须使得析取假设可用,如要求判定树可用。
3.哪些反馈可以用于学习
BDI体系结构几乎都可以直接得到反馈,因为该结构能够“对规划实例成功或失败执行”进行检测和处理。这可以通过执行一组内在行动来做到这一点,迄今为止的这些内在行动是指添加或删除信念。对于规划库中的每个规划,这些内在行动是预定义的。使用具体的内在行动就可以对这种BDI体系结构进行扩展,从而生成学习任务训练实例的日志文件;建立这些实例的条目包括:表征规划选择时的信念、执行该规划和plan-id后的成功或失败标签。
4.哪些先验信息可以用于学习
先验信息有如下两种来源:第一,可以把Agent的规划库视为一种先验信息;从Agent角度看,在该环境中必须出现所期望的规划状态,即:如果执行了规划p,事件e就会得到满足;并且如果p的背景就是Agent信念的逻辑后承,情况也是如此。第二,本文的BDI体系结构可以追溯谓词、函数及其签名的踪迹,用于定义每个Agent规划库中的规划,而且这些元素能够描述“学习过程中目标概念”语言。
5.是集中式学习还是分布式学习
意识似乎能够表示“复杂性递增的学习多Agent系统的”层级,这种学习环境层级以某种方式对应于丹尼特[2]的意图性等级。本文将探讨其中第一层级和第二层级的学习。第零层级的学习是指其环境中只有一个Agent,是真正的孤立学习状况,可以视为第一层级的特例。
第一层级的学习:此层级中,Agent通过与环境的直接交互来行动和学习,在多Agent系统中,没有明确意识到其他Agent。但是,学习Agent能感知到其他Agent对环境的改变。现在再次考虑有两个机器人的场景:一个专心绘画,另一个打磨物体。可以为绘画机器人编制程序,而不用意识到环境中的其他Agent,绘画机器人只需要知道的是,一旦物体打磨好后,就可以在该物体上面绘画。
第二层级的学习:此层级中,Agent的行动和学习与其他Agent,可以通过信息交换直接进行交互。在图1的场景实例中,打磨机器人可以通知绘画机器人“一个物体已经打磨好了”;而且绘画机器人可以向打磨机器人询问此信息。在该层级中,可以考虑学习过程中训练实例的交换。
第三层级的学习:此层级中,Agent的学习来自对系统中其他Agent行动的观察。这会涉及不同于第二层级的意识种类。学习Agent不仅能够意识到其他Agent的存在,还能够意识到它们的能力,因此绘画机器人能感知到打磨机器人即将打磨的木板。
如前文所述,从规划背景的表示方式角度来看,可以使用判定树表示目标。判定树自顶向下的归纳(TDIDT)是一个应用广泛且有效的机器学习技术。把学习函数表示成树,这些函数对应于本文实例属性值上约束合取的析取。从判定树根节点到叶节点的每条路径,对应于一个属性测试的合取,而树本身就是这些合取的析取,即所需要的规划背景的表示方式。使用从解释中学习的ILP范式[13],逻辑决策树就可以把属性-值表示升级成一阶表示。这时,每个训练实例e由“编码了e的所有性质的”一组事实来表示,而背景知识以Prolog程序B的形式给出。表示实例e的解释是一个“由e∧B蕴涵的所有基本事实构成的”集合,即,它的最小Herbrand模型。
现在给出“从解释中学习”的定义。如果给定:(1)一个目标变元Y;(2)一个加标实例集E;在论域Y中,每个实例由值y加标的明确子句集e组成;(3)一个语言L;(4)一个背景理论B;加标的实例,就存在一个假设H∈L使得:H∧e∧B⊨label(y)且∀y′≠y:H∧e∧B⊨/label(y′)。
从解释中学习利用了局部假定,即,所有与单个实例相关的信息,可以以两种方式进行局部化,而实例中包含的信息与背景知识中的信息是分离的,一个实例中的信息与其他实例中的信息也是分离的。从解释中学习的场景介于“属性-值”与“从蕴涵中学习”的场景之间[10]。把属性-值表示“朝着归纳逻辑编程ILP方向扩展”,不会降低学习效率[8]226。
布洛克尔(Blockeel)等[14]提出ACE系统就是一个从解释中学习的系统,该系统构建了逻辑决策树,即,“其每个内部节点都是表达式的一阶合取”的决策树。下文将说明:在本文BDI 扩展体系结构中,Agent 在自主性和意图性驱动下,如何判断Agent 在什么时候应该学习、何时配置学习集、何时执行ACE。
假定图1 中的agent r1 已经选择规划p007 处理事件(achieve(p-sanded board))。在解释器的执行阶段,这个规划要么成功要么失败。如果规划失败,我们期望Agent 尝试学习为什么规划会失败,假定Agent已经进行了实践推理以适应其意图,该推理表征在规划背景中,那么有了经验之后,Agent应该对“表示规划背景的”情境公式进行再思考。为了执行学习过程,Agent 需要生成如下三个文件:训练实例、背景理论和ACE参数,这些参数包含目标语言L的说明、期望的格式输出等等。plan-id用来识别这些文件,这些文件包括:(1)“由扩展名.kb标记的”知识库,包括知识所属类别标签的实例;(2)“由扩展名.bg标记的”背景理论;(3)“由扩展名.s标记的”语言偏倚。
这些文件由Agent自动生成,其生成过程如下[8]227-229:
当侦测到意图成功或失败时,agent r1在标记了p007.kb的日志文件中追踪执行过程,向ACE标示它包含与此规划相关的实例。每个模型从一个标示了规划success或failure执行的标签开始;然后添加一个谓词plan构建一个模型,该模型就是一个具体Agent执行一个具体规划的实例。当被选规划创建规划实例时,模型就包含了Agent 信念。当被选规划是相关且可用的规划时,Agent 会记住部分模型。在执行阶段,会加入标签。该实例的知识库储存在文件p007.kb中。
背景理论包含被学习规划的信息,变元和常元符号来自规划定义。在图1的BDI-Agent系统中,一个函数会把规划p007的初始定义翻译成如下这种格式,该格式对p007的规划背景进行编码:plan_context(Ag,p007):-p_handfree(Ag,Hand),p_at(Obj,free)。
然后生成配置文件。在图1的实例中,配置信息储存在文件p007.s中。该文件的第一部分与所有配置文件相同,用于说明在学习时:ACE打印的信息、学习案例的最低数目、输出的格式(要么是一个逻辑决策树,要么是一个逻辑程序)、目标概念所使用的类(即要么成功要么失败)。
在为树节点生成测试时,配置文件的第二部分将说明需要考虑的谓词。Agent生成配置文件的方式依赖Agent 定义。在对规划定义的每个时刻,解释器都会追踪定义该规划的谓词及其签名。在图1的实例中,定义Agent可以使用三个谓词:(p_state/2,p_freehand/2,p_at/2)。所以,Agent要求学习算法把带有变元的这些谓词作为论元:
rmode(p_state(Ag,State));
rmode(p_freehand(Ag,Hand));
rmode(p_at(Obj,Place))。
在该实例后,Agent要求学习算法对这些带有论元的谓词进行实例化。
rmode(p_state(+Ag,#));
rmode(p_freehand(+Ag,#));
rmode(p_at(+Obj,#))。
在背景理论中,也需要考虑使用的谓词。所有配置都至少有如下两种形式:
rmode(plan_context(Ag,Plan));
rmode(plan_context(+Ag,#))。
ACE使用rmode命令对语言偏倚L加以限定。可以把符号“#”看成是变元占位符,从知识库的实例中可以得到其常值。前缀“+”表示在实例之后,知识库中必须进行实例化的变元。
一旦实例数量大于某个阈值(如阈值是5时),Agent执行一个修改过且非交互版本的ACE,并且建议用户查看p007.out文件,该文件包含学习过程的结果,并相应修改规划的定义。Agent也有可能自己修改规划的定义。为了整合学习结果而采取的策略取决于应用领域,即,有时最好由用户加以监督。
前面的实例对应学习多Agent系统层级中的第一层级。在第二层级中,假设Agent学习时能够意识到其他Agent。通信对于多Agent系统中的学习非常重要。一个BDI-Agent在学习时,应该考虑通信的情境有如下两种:第一,Agent不能开始学习过程的执行,即,它没有足够的实例以运行ACE。这种情况下Agent可以向多Agent系统中的其他Agent索取训练实例。第二,Agent无法为相关规划的失败找到假设来解释,即,执行学习过程后,ACE生成的树结构只有[failure]节点,或者找到的假设是正在学习的初始规划背景。这意味着BDI-Agent用来学习的实例,不足以找出规划失败的原因。这种情况下,在再次执行ACE之前,Agent可以向多Agent系统中其他Agent索取更多证据[8]229-230。
多Agent系统中的Agent可以共享学习过程的结果,这受益于BDI体系结构定义学习过程的方式。如果Agent能够找到导致规划失败的假设,它会把结果通知给用户,请求根据找到的决策树对规划定义进行修改。如果用户修改规划定义,这种修改会自动影响知识库中拥有该规划的所有Agent。但这并不意味着这些Agent 会共享所有规划,因此在本文的体系结构中,允许多Agent 系统是异构的,即:多Agent系统的Agent的种类可以不同。
用来处理通信的是“权限”概念,这里的“权限”被定义为:Agent能够处理的所有触发事件的集合,即Agent规划库中所有触发器构成的集合。发送消息的方式有两种:(1)Agent广播消息,包括触发器和被学习规划的plan-id 方面的消息,如果触发事件在其他Agent 权限范围内,它们就接受并处理消息;(2)用“权限”为每个Agent建立一个目录,其中一个Agent权限范围内的每个触发事件,与系统中“处理相同触发事件的”其他Agent的id有关[8]230。
权限与规划决定通信内容。如果两个Agent对同一事件有相同规划,那么它们就能够参与分布式数据的收集过程,即,它们能共享双方收集的训练实例。这种情况下,Agent就会参与数据收集,但是每个Agent都在本地学习。
在埃尔南德斯等工作的基础上,本文展示了如何用归纳逻辑编程方法(尤其是逻辑决策树的归纳),把BDI体系结构扩展成“Agent拥有学习技能的结构”。这些技能的设计与BDI-Agent行为背后的实践理性是相容的。研究表明:(1)BDI学习Agent 结构可以用表处理语言Lisp加以实现;该结构还包括两个非标准的BDI 特征、几个多Agent 系统模拟选项、一个DTP 定理证明器接口;(2)如果多Agent系统中的BDI-Agent 能够共享训练实例,那么就可以增加它们的学习机会;(3)从多Agent 系统学习视角看,对理性Agent-BDI 模型进行了扩展,并克服了“这些Agent 没有学习能力和多Agent 系统功能的”缺点。
未来的研究可以考虑:如何理解基于案例的推理和实践推理理论之间的关系?如何实现多BDI-Agent系统结构中更多的多Agent系统特征?是否有可能为更复杂情境中的学习集设计出信息共享协议?例如,有相同权限但具有不同规划的Agent。如果把ACE修改成“以递增方式学习它接收的每个实例”,共享协议就显得尤为重要。学习与意图Agent的多模态逻辑理论之间的关系如何?