基于JADE平台的Multi-Agent协商的设计与实现

时间:2022-09-23 02:55:02

基于JADE平台的Multi-Agent协商的设计与实现

摘要:Multi-Agent协商是目前研究的一个热点,而从底层开发出一个Multi-Agent协商系统是非常复杂和困难的。该文在研究JADE仿真平台技术的基础上,对基于JADE仿真平台的Multi-Agent协商进行了设计与实现,为研究Multi-Agent协商有着重要的意义。

关键词:Multi-Agent;协商;JADE

中图分类号:TP391文献标识码:A文章编号:1009-3044(2009)34-9695-02

Design and Implementation of Multi-Agent Negotiation Based on JADE Platform

HU Fang-hua1, ZI Wu-cheng2

(work center of XiangYa hospital, Central South University, Changsha 410008, China; 2.School of business, Hunan Normal University, Changsha 410081, China)

Abstract: At present, scholars take great interesting in the studying domain of Multi-Agent negotiation. It is complex and difficult to develop a Multi-Agent negotiation system from the bottom platform. In this paper, we have designed and implemented a Multi-Agent negotiation system based on the platform of JADE, which will be an important significance to the study of Multi-Agent negotiation.

Key words: Multi-Agent; negotiation; JADE

1 JADE仿真平台简介

Java Agent Development Framework(简称JADE)是由TILAB(Telecom Italia Lab)开发与的一个免费软件,为Agent系统开发和仿真提供了中间件。JADE完全由Java语言开发的一个软件,各Agent之间的交互完全遵从FIPA(Foundation for Intelligent Physical Agent)规范,它封装了一系列的全面的系统服务和Agents,提供了与应用程序无关的Agent间的信息传输、编码、解码及Agent生命周期控制服务,简化了Agent系统的开发过程,并提供了一套图形工具以支持调试与开发。JADE Agent平台能跨越不同的机器、不同的操作系统间使用,并可通过远程图形用户界面改变其配置[1]。

JADE完全依照FIPA规范Agent平台架构,其平台结构如图1所示,主要包括:Agent管理系统(Agent Management System, AMS)、目录服务(Directory Facilitator,DF)、信息传输系统(Message Transport System,MTS)几个部分[2]。

每一个JADE的运行环境实例叫做一个容器(Container),它可以包含若干个Agent。一个容器就是一个Java虚拟机,同一容器可以容纳多个Agent。每个容器都必须向主容器(Main Container)注册。当JADE平台启动时,就会立即创建AMS Agent和DF Agent,同时设置MTS模块允许信息通信。

JADE完全是由JAVA编写的,由各种JAVA包组成,它为程序员自定义的应用程序任务提供了抽象接口。JADE中包括的包主要有:jade.core包、jade.domain包、jade.lang包、jade.gui包、jade.onto包等。

2 JADE平台中Agent生命周期中的状态

在JADE中Agent是作为一种自治的具有合作能力、通信能力的实体,外部不能获得Agent的引用,即不能直接存取Agent的属性,也不能直接指定Agent的行为。创建Agent的具体任务只能由容器来完成,返回的结果也只是封装后的Agent。JADE中的Agent处于生命周期中的某一个状态,一个Agent的生命周期包括的基本状态有[3-4]:

1)Initiated状态,Agent对象己建立,但未在AMS注册,没有名称和地址,不能和其他Agent通信,此时的状态为Initiated。2)Active状态,Agent对象己在AMS注册,已有合法的名称和地址,具有各种JADE Agent特性。3)Suspended状态,Agent对象暂时停止工作,其内部线程暂停但并没有终止,不执行任何Agent行为。4)Waiting状态,Agent对象的行为被阻塞暂停,处于休眠状态但能监测信息输入,等待某个消息到来或条件成立时将被唤醒。5)Deleted状态,Agent对象已终结,内部线程己结束,并且已从AMS注销。6)Transit状态,这个状态是移动Agent所特有的,当移动Agent要迁移至一个新地点时,Agent将所有数据和状态保存,并将一起传输至新地点,到新地点后再将所有数据和状态恢复,这一阶段Agent不执行自己的行为,不接收任何信息。

JADE为Agent的任务定义了行为(Behaviour)类,可以调用行为类中的方法实现Agent的各个状态相互转换。

3 Multi-Agent协商仿真的设计与实现

我们以JADE平台为基础,以代表供应链节点企业协商的Agent为仿真对象进行了设计,主要包括协商Agent命名规则设计、协商Agent类的定义、JADE中协商目录服务描述设计、协商Agent的行为设计、协商Agent交互规范和通信消息设计等方面。

1) Agent命名规则设计。

在基于Agent的供应链协商仿真系统中,要求Agent名字全局唯一,必须事先设计好各Agent的命名规则。在仿真中,我们以“字母”+“数字”来表示Agent的名字。字母可理解性好,代表协商Agent的类型,数字从1开始,按顺序编号,如“manu1”、“seller2”分别表示1号生产商Agent和2号销售商Agent。

2) Agent服务描述设计。

在Multi-Agent仿真协商仿真中,Agent一般会提供某些服务,但对于其它Agent需要寻找这些Agent服务时,不能预先知道其服务Agent的名称。最好的选择就是利用JADE平台的黄页管理机制进行注册,即向JADE平台的DF Agent注册,注册时提供相关Agent的信息,包括Agent名称、服务名称和服务类型等。以某分销商Agent为例,本系统采用下述方式向DF Agent注册,描述Agent服务。

DFAgentDescription sellerAgent=new DFAgentDescription();//创建DF Agent描述实例

sellerAgent.setName(getAID());//设置注册的Agent标识符

ServiceDescription Agentsd=new ServiceDescription();//建服务描述实例

Agentsd.setType("seller-negotiation");//设置服务描述的服务类型

Agentsd.setName("JADE-SellerNgotiation-withpartner");//设置服务描述的服务名称

sellerAgent.addServices(Agentsd);//将服务描述对象添加到DF Agent描述对象中

DFService.register(this, sellerAgent); //完成注册

……

上面就完成了一个Agent向DF注册,注册服务完成后,其它Agent需要能提供相关服务时,则可以按服务描述类型或服务描述名称从DF查询,这就为仿真系统中各协商Agent正确搜索相关的服务提供了便利。

3) 通信信息的设置。

JADE平台中Agent间通信的消息格式是由FIPA标准的ACL语言决定的。通信的消息由多个字段组成,主要的字段有:Sender字段、Receivers列表、Performative字段、Content字段、Language字段、Ontology字段等。

JADE平台中Agent间的通信消息是由ACLMessage类表示,ACLMessage类包含一组FIPA规范定义的属性,这个类里提供了get和set方法来处理消息的各字段。如addReceiver()或getAllReceiver()。一般,在JADE中会设置好适当的属性值,编程者只需设置通信行为和信息内容就好了。

4) 发送、接受消息。

如果要向其它Agent发送消息,Agent首先需建立一个ACLMessage对象,并设置适当的属性值,最后调用Agent.Send()方法来发送信息。比如向一个名称为“saller01”的Agent发送消息“Accept the Negotiation offer!"的代码如下所示:

ACLMessage msg=new ACLMessage(ACLMessage.INFORM);

msg.addReceiver(new AID(" saller01 ", AID.ISLOCALNAME));

msg.setLanguage("English");

msg.setOntology("Negotiation-offer-ontology");

msg.setContent("Accept the Negotiation offer!");

send(msg);

接收消息时,Agent可以用receive()方法从其消息队列中取出消息。这种方法返回队列中的第一条消息并从队列中将其删除,或者返回Null,其方法可以用下面的语句表示:

ACLMessage msg=receive();

if(msg!=null){

//处理收到的消息

}

5) 停止Agent。

在Agent的任意行为执行过程中调用Agent.doDelete()方法即可停止Agent的运行。当Agent的状态要变迁为Deleted时,也就是Agent即将被卸载时,Agent.TakeDown()方法被执行,编程者可重载该方法以完成必要的清理工作,如从DF中注销等。

图2显示了JADE平台中运行的一个设计界面,我们定义了一个名字为“Contain01”的容器,它里面包含了名字为“manu1”、“manu2”、“seller1”、“seller2”等协商Agent,可以代表生产商和销售商进行协商。

协商Agent启动以后,用户通过仿真系统的图形界面可以设置协商议题值和协商策略,然后系统会通过应用服务器把相应的议题值发送给协商Agent,接受到协商议题消息的Agent根据协商协议和对方进行协商。在协商过程中,我们利用JADE平台的Sniffer Agent监测各Agent间的交互状况。如图3显示了协商Agent间部分协商的交互情况。这样,我们用户就能方便的利用JADE平台对协商Agent注册、启动、运行监控。协商完毕后,不管协商Agent是否达成一致,都会把结果返回给应用服务器,由应用服务器调用相应的显示程序把结果返回给用户。

4 结束语

从底层开发出一个Multi-Agent协商系统是非常复杂和困难的。本文在研究JADE仿真平台技术的基础上,对基于JADE仿真平台的特性和JADE仿真平台中各Agent的状态进行了阐述,对Multi-Agent协商进行了详细的设计与实现,对研究Multi-Agent协商具有重要的意义。

参考文献:

[1] 吴爱峰,毕政,钟亦平,等.基于JADE视频点播系统的设计与实现[J].计算机工程与应用,2006(8):227-232.

[2] Fabio,Bellifemine.JADE Administrator's GUIDE,jade.cselt.it/.

[3] 罗{,郭戈,黄鹏.MVC模式在JADE系统开发中的应用[J].控制工程,2008(5):327-330.

[4] 石磊,党德玉,沈学强.一种基于JADE平台的多Agent入侵检测系统模型[J].中国科技信息,2008(5):109-110.

[5] Giovanni.JADE tutorial application defined content languages and ontologies,jade.ccelrit/.

上一篇:基于工作过程的《计算机组装与维护》课程标准... 下一篇:计算机基础实验教学的改革与探索