1 引言
多Agent系统是指由多个分布和并行工作的Agent通过协作完成某些任务或达到某些目标的计算系统。嵌入式多智能体是把嵌入式系统与多Agent相结合的技术,充分发挥了二者优势[1]。但是,多年来多Agent系统一直没有应用到嵌入式设备上。这是由于没有合适的Agent平台能够适应于软、硬件资源受到限制的嵌入式系统。KVM (Kilo-bytes Virtual Machine)的出现,使JAVA这种跨平台的语言成功应用于嵌入式设备中,同时也方便了嵌入式环境下的轻量Agent(Lightweight Agent)的实现。本文在ARM嵌入式环境下测试轻量级Agent平台。
2 面向Agent软件开发平台
JADE 是基于跨平台的JAVA语言,是一项旨在开发符合FIPA(Foundation for Intelligent Physical Agents)Agent标准的多Agent系统或程序的软件开发框架[2]。主机上运行的远程管理Agent ( Remote Manage Agent,RMA ),包括AMS(Agent Management System)、DF(Directory Facilitator)、ACC(Agent Communication Channel)三部分。
如果利用JDAE平台开发多Agent系统,运行环境必须具备JAVA虚拟机。但是,这么一个软件运行空间的大小远远超过普通嵌入式系统所能提供的存储空间。因此必须采用一种新的轻量化的Agent开发平台、框架,使其适应于嵌入式环境。
3 轻量Agent平台研究
3.1轻量化LEAP的研究
LEAP(Lightweight Extensible Agent Platform)是JADE运行在J2ME/CLDC下的版本,专门在手持设备等资源受限的环境中运行。LEAP运行在通信的上层,容器Container之间通过TCP/IP通信而不用关心物理连接方式[4]。
J2ME把运算功能有限、电力有限的嵌入式设备称作可连接外界、资源有限的设备,规定这类设备要执行JAVA程序必须满足某些特定条件(CPU速度等),这些必须满足的条件就定义在CLDC规范中。与标准版的JAVA—J2SE相比,J2ME/CLDC所支持的只有标准核心类库的子集合,对存储空间的需求在160KB~512KB之间。并且J2ME /CLDC添加支持嵌入式系统的扩充类库,如javax.microedition.io.*类库,不含有RMI。所以,LEAP直接使用TCP/IP套接字通信来连接不同的容器[4]。LEAP没有AMS和DF,为了实现这些功能,LEAP直接访问运行在其它机器上的JADE平台。分布在每一个嵌入式设备上的Agent的代码量就会大大减少,各Agent的功能不会减弱。
3.2轻量化平台的运行
LEAP有两种截然不同的运行方式,其中一种方式是将一个完整的容器运行在嵌入式设备上,即Stand alone 方式。另外一种为Split 方式,将容器划分成前台(FrontEnd)和后台(BackEnd),前台即运行在嵌入式设备上,后台运行在装有J2SE的主机上。
一个完整的容器启动需要首先启动AMS和DF。根据文献[3]的介绍,前台作为一个存储空间有限的设备,不可能运行大量代码,是轻量的。结果,前台启动后不会创建AMS与DF。同时,代码量的减少使得前台启动加快。后台部分运行在普通的主机上,前台对后台的依赖体现在后台必须在前台启动之前工作起来。
3.3轻量Agent平台改进
3.3.1 KDDIAP
由于环境等因素的影响,移动嵌入式设备在无线通信时经常会遇见通讯连接不稳定、设备不在信号覆盖的范围等问题。在无线设备上运行Agent会因为上述问题不能随时随地提供服务。
这种情况发生时,JADE-LEAP就不能很好地满足人们的需求。而这是由LEAP的特性决定的,LEAP应用于无线设备完全依赖于主PC机上的JADE平台,即采用Split运行方式。因此,实现嵌入式无线设备上的Agent管理,首先要保证通讯稳定,这在无线环境下实现就有些困难。针对这些问题,文献[6]提出了专门针对手机等无线通信设备的Agent平台架构KDDIAP。将移动设备和中央服务器分解成一个个符合FIPA的子平台。遵循FIPA是为了与其他类似平台方便地交互信息。与LEAP最大的区别就在于,移动设备上运行的子平台也具有AMS和DF功能。每个手机上都有相对完整的Container。
3.3.2混合模式轻量Agent平台
KDDIAP适合于无线环境下应用,在最初启动时需要创建AMS和DF。然而,JADE-LEAP启动时不用创建AMS和DF,速度显然会比KDDIAP快。在一个实际的复杂系统中,存在很多嵌入式设备,它们分别工作在有线连接的网络和无线网络的环境中,各自的存储资源也不尽相同。根据各自不同的特点,我们把KDDIAP与LEAP技术结合起来,对现有的Agent运行系统框架进行改进。如图1,有3个容器,Main Container运行在J2SE上,Container-1运行在J2ME/CLDC或Personal Java上,Container-2运行在J2ME/CLDC上;Container-2处于Split 方式,而Container-1类似于KDDIAP方式,它在启动时会创建AMS与DF。Container-2对应的设备应该有较好的通信保障,前台在启动之后如果也创建AMS和DF将总共用到大约40个JAVA类,不适合资源受限的嵌入式设备 。我们在前台仅仅创建一个Client Agent,可以随时访问后台,与后台交互信息,对于存储空间有限或处理器速度较慢的情况下确保了通信的实时性;相比之下Container-1处于无线环境,利用KDDIAP提供的方法可使Agent在任何时候提供服务,软件Agent的代码也会相应增加,对设备计算能力的要求会高一些,例如可以让软件Agent工作在ARM这样的高档硬件平台上。
这种改进能确保异构网络环境下轻量Agent的正常运行,并且使整个Agent系统软件精简灵活。同时,我们所做的改动仍然遵循FIPA 标准,以方便与其他符合FIPA的平台交互。