随着人们对计算要求的不断提高,未来的计算环境将朝着模拟人类社会的方向发展,按目前的观点,它应是一个分布式开放的计算环境。从分布式的角度看,该环境中个体之间存在地理上的距离以及随之而来的通讯延迟。这样,对整个系统我们无法得到一个完整的、全局的视图,从而不得不基于局部的信息来对整个环境进行管理。为保证计算效率,我们还必须采用异步通讯机制来支持计算和通讯的并行。这些都增加了管理此环境的复杂性。从开放的角度看,未来的计算环境又必须是一个动态的、不断变化的、不断发展的、具有很强适应性的环境。它所基于的向络结构不断变化,它的组件不断增加、不断进化,它所提供的功能不断增强,质量不断提高。它必须具有一个开放的、灵活的体系结构,必须提供一个友好的、方便的用户界面,必须提供一套新陈代谢、生长进化的机制。
二、Agent
为实现计算的并行化,在使用对象时必须考虑对它的执行控制和处理机分配等问题,也就是说,必须在对象的概念上再加上进程的概念,从而增加了程序设计的复杂性。我们应将对象扩充成一个自我生存、自我表现的个体,这就产生了并发对象的概念。每个并发对象都封装有一个处理机,这个处理机可以是现实的,也可以是虚拟的。这样,设计并发程序时就不必描述执行流程的控制,也就不需要进程的概念了。
解决一个一般的抽象化问题时,并发对象的概念足够了。但面临一个复杂的现实问题时,并发对象就不能真实地模拟问题的变化和发展。在一个分布式开放的计算环境中,获取全局知识是可能的,这就要求每个执行模块必须主动地向外界提供信息,从外界获取信息,与其它模块相互合作,共同实现对问题的解决。为满足这些要求,我们引入了Agent的概念。Agent是由一组非共享的对象所组成的自主的个体。每个Agent都有自己的目标,对外界的刺激实时作出反应。通过对当前状态和环境的了解,它不仅能处理外部输入,还能主动了解情况,实时地与外界交流。
Agent在并发对象的基础上对并发对象中处理的触发源进行扩展,提出了“事件”的概念。在一个
系统中,对象不仅应处理外部的请求,还应了解自身状况以及外部环境等各种信息,并根据这些信息优化自己,使自身适应系统环境。
事件分为简单事件和复合事件。简单事件分为三类。第一类是外部消息,包括外部的请求以及包含特定信息的通知消息。第二类是时间事件,即某个预期的时间点的到达,如时钟的唤醒等。
第三类是状态事件,包括状态的达到和状态转换的完成。复合事件是由简单事件通过“and”和“or”联系起来的事件。Agent自己决定对哪些事件进行处理,并自己定义与事件相对应的处理过程。
Agent不仅仅是一个服务者,它还能了解自身的内部状况,接收外部信息,然后对这些信息进行综合分析,作出自己的处理决定。Agent从创建起就不断学习、不断发展、不断适应环境,提高自己的能力。这样,Agent就成为一个自主发展的个体,能更真实地模拟现实世界中的处理者——人的处理方式,也就能更好地描述和解决现实问题。
生存本能是Agent的一个最基本的特性。为了生存,每个Agent都力图最好地满足用户的需求,提供最短的等待时间、最强的功能和最佳的服务质量。为此,Agent必须具有自适应性和合作性。自适应性意味着Agnet能随着环境和用户要求的变化调整自身。合作性则表现为Agent之间能够相互协调和协作,通过对彼此目标的分析,制定出高效率的执行计划,提供高质量和完善的服务;并且在合作之中对自身进行调节,消除彼此间不协调的地方,不断进化,推动整个环境的发展。因此,Agent又称为智能体。
三、Agent的体系结构
Agent主要由四部分组成:私有数据、历史经验库、处理过程和处理机。私有数据是指封装在Agent内部的、只能通过Agent的处理过程所存取的数据。它与对象的私有数据类似,对外界透明,用户只能通过申请相应的服务来使用这部分资源。处理过程是Agent的核心部分。它是Agent对外的窗口, Agent所提供的服务都是通过对处理过程的调用实现的。它定义了Agent的行为模式。通过它的发展, Agnet的功能不断增强,带动着Agent的不断变化。当然,每个处理过程都必须有相应的触发条件,为了对它,们进行分类,还定义了相应的优先级,其语法为: On<event>Do<action>atPriority<prior>,其中,<event>定义了触发此处理过程的事件;<action>定义了处理过程的具体操作;<prior>则定义了此处理过程的优先级。当管理过程的触发事件发生时, Agent就创建一个进程来完成处理过程的操作,并赋以优先级<prior>,让其在处理机上执行。
一个Agent自创建之日起,就通过处理过程对外界提供服务并不断地发展进化。因此我们不仅需要定义那些完成其功能所必须的处理过程,还必须建立Agent用以自我调节、自我完善的处理过程。根据处理过程的功能,可将其分为以下几类:(1)服务型:这一类处理过程用来满足外部的请求,提供特定的服务。它们的触发条件一般是外部请求或通知。(2)协调型:这一类处理过程用以在其它Agent合作完成任务时进行同步。它的触发条件一般是时间事件或状态事件。(3)进化型:这一类处理过程用以对Agent自身进行完善和发展。它的触发条件一般是状态事件。 nextpage
处理机是Agent处理能力的提供者。Agent的处理过程以进程的形式在处理机上执行。通过这个内部的处理机,Agent避免了对象所采用的低效的单线处理方式,实现了处理过程执行的并行化。对处理机的管理,则采取传统的基于优先级的调度算法,根据进程的优先级从进程队列中选择当前的运行进程。
我们给出Agent的形式定义如下:
Agent<agent-name>
Private…
…
Process<process—name>1
On<event>lDo<action>1 at P真ority<prior>l
Action<action>1…
Processor<Processor—address>
End
其中<agent—name>标识Agent名;Private域定义Agent的私有数据日Process域定义Agent的处理过程; Action域定义每个处理过程的具体流程;Processor域则标识处理机的地址。
四、Agent的行为模式
Agent在其生命期间的行为模式如下:
WhilealiveDo
Begin
扫描所有处理过程Process;
lf ExiSt<event>Then
Begin
创建一个与Processi相应的进程
End
End
五、Agent的通讯机制
在MDOCEM环境中,Agent之间并不是孤立的,而是相互协作完成分派给它们的任务。由不同Agent完成的任务的结果集成起来在整体上所形成的效果,就成为系统所完成的总任务的结果。为达到Agent之间相互合作的目的,必须提供一套Agent的通讯机制,使Agent之间能自由交换信息,相互协调,高效地完成任务。下面简单介绍MDOCEM中使用的基于消息的通讯机制。
消息是由一个任意的字符串——消息名和一组任意的消息参数所组成。其语法为:<msg—name>[(pO, P1,…,Pn)],其中<msg—name>是消息名,它描述消息的类型和含义,(p0,p1,
…pn)是消息参数,它具体说明此消息的内容。例如:<ServiceRequest>(parameterl,…,pararame-
tern),<Wait>(Information)等等。
消息发送的原语为: Send<receiver><msg—name>(po, p1,…,pn)[Wait<msg—name)
(ql, q2,”, qm)],其中,<receiver>标识作为接收者的Agent;<msg—name>(p0, Pl,…,
pn)为所发送的消息; Wait<msg—name>(q1, q2,…, qm)为可选项,表示所等待的应答消息。
发送消息的处理流程为:(1)向接收方发消息。(2)如果存在wait<msg—name>‘(q1, q2,…, qm)项,则执行第3步,否则处理结束。(3)阻塞发送消息的进程,等待<msg—name>(q1,
q2,…, qm)事件的唤醒。
接收方将消息作为事件来处理,具的处理流程为:(1)接收消息。(2)对此消息进行所需要的处理。(3)如果存在wait项,则发送消息<msg—name>(ql, q2,…,qm)给消息的发送者。
消息主要用于传递Agent之间的服务请求和协调Agent之间的同步。
六、基于多Agent的分布开放计算环境模型[1,2]
根据以上观点,我们提出了一个基于多Agent的分布开放计算环境模型(Multiagent—based Distributed Open Com Puting Environment Model,简称为MDOCEM)。它主要分为两层。第一层是接口层,由一组InterfaceAgent组成,提供一个透明向上的接口,用户所提交的任务经由本层转换和分解,被转交到第二层——系统层执行。对用户来说,环境的体系结构、执行方式都是透明的:用户也不需要了解信息是以何种方式存储、为哪个Agent所管理,只需提出要求,由InterfaceAgent转换为相应的命令,待执行完成后,再将结果以所要求的形式反馈。
系统层由多个执行模块组组成(包括任务的执行机制——计划管理、资源管理等),每一组包含一些相互依存的Agent,它们联合起来提供特定的服务。而组与组之间通过Inter Cnnnection A—gent通讯,它们是执行模块组对外界的窗口,通过它们将命令转换为对这组Agent的指令,执行这些指令并输出相应的结果。执行模块组是概念清晰、接口友好的服务者。对整个系统来说,用户所提出的任务经过分解,形成一组服务请求。这些请求分别通过InterConnection Agent传递给执行模块组并由IntGr Connection Agent将结果反馈回来。在每个执行模块组中,包含哪些Agent、这些Agent如何组织、服务请求最终由哪些Agent完成等问题对外界都是透明的。
这种结构不仅使系统的执行模式变得简明、清晰,而且为开放性的实现提供了基础。通过这种组织方式, MDOCEM可以容纳各式各样、具有不同功能、以各种拓扑结构联接起来的计算体,充分发挥其能力,而用户所见的是一个界面友好、灵活的计算环境。此外,MDOCEM还可以方便池吸收新的Agent,按其功能归类,充分发挥其效能,使自身成为一个不断发展、规模逐渐扩大、功能日益增强的系统。


