用ZEUS开发Agent系统的实验

葛西旺

合肥工业大学学士论文

电子信息工程

2000. 6

摘要

Agent 在人工智能领域是一个热门的话题,它在交通控制 、资源 / 过程管理等方面已发挥了巨大的作用。随着网络的发展,人们不需亲自出门,利用 Agent 通过网络可以相互交流信息。

多 Agent 系统是处理自治 Agent 之间知识层的协作问题,然而,目前建立多 Agent 系统还有许多固有的困难。 ZEUS 是建立在 JAVA 基础上的一个开发分散的多 Agent 的工具包,便于设计人员快速地开发出多 Agent 应用。

本文讲述利用 ZEUS 开发工具包开发一个最简单的网上购物的实例来说明两个 Agent 之间如何进行通信。还具体说明 ZEUS Agent 体系的设计思想 、 组件库 、 开发过程以及支持这种方法的一个可视化 Agent 生成环境。

关键词 ZEUS , 多 Agent , 自治Agent 。

Abstract

Agent is a hot issue in the domain of AI , it plays a great role in the way of transportation control and resource/process management etc. 。 With the development of network ,people can ,by virtue of Agent ,communicate each other in the word of network。

Multi-Agent systems approach of knowledge level co-operation autonomous Agents 。However,

thus far ,there are many innate difficulty in constructing multi-Agent systems 。ZEUS is a toolkit for building distributed multi-Agent systems base JAVA program , which facilitates the rapid development of collaborative Agent applications。

The article presents a simplest example of buying through the network , which is developed by the ZEUS toolkit 。 The example shows how the two Agents communicates each other 。 The article also describes the Agent Component Library ,philosophy,the ZEUS Agent Building approach and a visual Agent creation environment that supports the approach 。

Key words ZEUS , multi-Agent, autonomous Agent.

第一章 Agent 简介

引言

如今,炒股成为人们的热门话题,股票交易所里的经纪人可称为 Agent ,因为他们能按照股民的要求代表股民进行股票交易。这就是 Agent 的原意 “代理,代理人 ”。、 进入九十年代以来, Agent 一词频繁地出现在人工智能和计算机学科的其它领域,关于 Agent 理论与技术的研究在人工智能 、软件工程并行与分布式计算;网络与 Internet虚拟现实以及机器人等领域引起人们的关注。一些基于 Agent 技术开发的系统已应用于诸如空中交通控制 、通信网络管理、 作业调度等 生产实际领域以及 Internet上的智能检索、个人助手和基于移动 Agent 的分布计算等。

第一节 单个 Agent 的介绍

1 、 Agent 的定义 、特点

Agent 现用到人工智能、 计算机科学和计算机辅助工程领域,形象地描述了计算机辅助软件工具的智能作用 、地位以及与人只间的关系。但是,迄今为止,还没有人给 Agent 下一个明确的定义。一种较为普遍的观点认为 Agent 是一个反应的、 自治的 、内部驱动的实体,置身于变化的不定的世界里,它们可感知这个世界并对其作出反映。这种观点概括了 Agent 的自治性 、反应能力以及主动性特点。我认为应该给 Agent 下一个这样的简单定义:

Agent 是一类在特定环境下能感知环境,并能自治地运行代表其设计者或使用者实现一系列目标的计算实体或程序。

Agent 的特征可概括如下:

第一、 自治性 Agent 本身具有一定的自控能力。它能按照人事先给它的指令完成符合要求的任务。一旦启动,可以不需要人的直接介入或干预。

第二、 反应能力 Agent 能够对环境的变化作出及时的反应,具有生物体趋利避害的自我保护意识,适应环境变化的能力。

第三、 开放性 这里指 Agent 之间的通信,一个 Agent 要能与另一个 Agent 进行通信,而不管它们是哪个系统的。这样,研究 Agent 之间的通信语言是非常重要的。

第四、 主动性 生物体的趋利避害只是一种被动行为, Agent 不仅能对环境的变化作出被动反应,而且在某一确定目标指导下也具有主动行为。

基于以上特点, Agent 在软件系统中的代理称为软件代理( SoftWare Agent ),在机器人的概念中也可称为软件机器人 (Softbot) 。

2、 Agent 的通信语言

Agent 的通行语言 ACL(Agent Communication Language) 住要有两种:一种是标准的通信语言 KQML(Knowledge Query and Manipulation Language) ,另一种是基于语言行为理论 (Speech Act-base) 的特别通信语言,如 ICL(Inter-agent Communication Language) 。

KQML 语言可分为三层:通信层 、信息层、 内容层 ( 如上图所示 ) 。内容层是信息的主要内容,但 KQML 对此没有任何限制。一条 KQML 组成的消息可能包含 Prolog 代码 、 C 代码 、自然语言描述以及其它形式,只要它可用 ASCⅡ描述。信息层是语言的核心,这是一个抽象层,它为要传递的信息规划成协议, Agent 必须使用这些协议。通行层为那些底层通信参数形成代码,比如,发送和接受的识别。

KQML 语言有许多缺点,它没有象其它编程语言那样一个简洁 、 正式的语义。 Agent 的设计者们不能确定他们所设计的 Agent 与其它设计者所设计的 Agent 对一些执行命令的解释是否一致。

特别 ACL

目前,有许多由协作 Agent 组成的基于 Agent 的应用在特别的 Agent 通信语言领域中使用一套特别的语言,还有一些,严格地说,根本就没有使用明确的 Agent 通信语言。它们通过把信息储存在一些公用的数据库中来进行通信。拥有自己的 ACL 的应用大部分都是以专门语言为基础的,它们有一套与 KQML 很相似的格式,但通常难以转化成 KQML 的对应格式,同时有不同的协议,因此也就无 法与用 KQML 语言通信的 Agent 通信。当然,使用这种语言的缺点也是不可忽视的。

3 、 Agent 应用中的实体

任何一个 Agent 应用在某一领域中都是以实体为基础的,也就是说 Agent 之间要想共享通信,那么就要以实体 (ontology) 为基础。比如说,对于计算 Agent ,普通的实体包括 Agent 之间通信用到的术语和与这些术语有关的知识。这些知识包括术语的定义 、 属性以及术语和限制条件之间的关系。这种共享实体对于象使用 KQML 的 ACL 通信语言的 Agent 之间的通信是非常重要的,因为没有它, ACL 只是一种句法,许多语义都是由实体衍化而来的。实体可分为三类:特别实体 、 标准实体和全球性实体。

特别实体是随着特别 ACL 发展而发展的,这种实体不能形成规模,受到某一领域的限制。

标准实体是为了克服特别实体受到某一领域限制的缺陷而产生的,它是一种嫩被分散的软件开发者共享的实体。其中最出色的是 KSE(Knowledge-Sharing Effort) ,它含有共享实体方案。另外, KIF(Knowledge Interchange Format) 是一后起之秀,它给基与知识的互操作提供一种国际语言。也就是说,对于两个基于不同遗产知识的互操作的 Agent 来说,双方的知识能翻译成 KIF 语言格式,从而达到共享的目的。

全球性实体不是指向某一具体领域,而是指在一定程度上的一般领域,对这种实体的研究才刚刚起步,但其发展前景是无法估量的。

第二节 多 Agent ( MAS )介绍

多 Agent 涉及种类很多,诸如智能 Agent 、 自主 Agent 、 娱乐 Agent 、 接口 Agent 、、 信息 Agent 、 协作 Agent 、 反应 Agent 和移动 Agent 。

MAS 是由多个 Agent 组成的系统,它研究在 Agent 理论基础上提出的多个 Agent 之间的互操作性以及 Agent 之间的协商和协作等问题。多 Agent 系统的协作求解问题的能力超过单个 Agent ,这是 MAS 兴起的主要原因。其它原因还有:求解那些数据的能力和控制具有分布特性的问题以及提高效率等。

目前 MAS 的研究主要方面包括 MAS 的研究,多 Agent 协商和多 Agent 规划等。应用方面主要是 MAS 在 Internet 上的应用,移动 Agent ,电子商务等。

第三节 个人的观点

虽然 Agent 被学术界炒得沸腾扬扬,但给它的前景作一个精确的预测,还是很困难的,而且也使不现实的。在这里我提出自己的一个观点。 Agent 最终发展成为象大海里海藻一样的东西,每个海藻个体都能独立生存,当它们相遇时也能合在一起生存。是一团“活着的智慧和数据”,可以在网络世界里漫游。

第二章 ZEUS 介绍

第一节 ZEUS 的总体介绍

多 Agent 系统是处理自治 Agent 之间知识层的协作问题,然而,目前,由于建立多 Agent 系统固有的困难,这一愿望还没实现,因此, Agent 开发者就渴望能建立分散的多 Agent 系统开发方法论和工具包,这种思想带来了 ZEUS Agent Building Toolkit 的问世。通过 Agent 级的组成部分的一个库的支持,以及 Agent 建立过程的环境支持,这个工具包便于快速开发出协作的多 Agent 应用。 ZEUS 工具包是建立 Agent 技术的很完美的结晶品,提供合为一体的建立协作 Agent 的环境。

第二节 合作 Agent 体系的建造问题

Agent 之间经常要合作,然而,这种需要主要是由于缺少资源——计算,信息,知道对方怎样做等等而产生的。由于单个 Agent 拥有不同的资源和能力,这样,对于一个给定的问题的解决也就不是任何单个 Agent 所能解决的,它须要许多 Agent 把它们的资源合并起来共同解决这个问题。

如果这种合作放在知识层次,它就对 Agent 提出很高的要求,至少需要一种发现信息的机制,通过这种机制, Agent 能发现其它 Agent 是否存在,它在网络上的地址,以及它的能力和任务。还需要一种 Agent 内部通信语言,使得 Agent 与其他 Agent 通信。第三,还要有一种实体 (ontology) ,它定义了 Agent 之间通信的应用领域的概念。第四,为了有效协调地解决问题, Agent 还须要一种机制,这种机制能对 Agent 本身和其它 Agent 的分析问题能力进行推理。并且协调它们的行为。

最后,在许多应用领域, Agent 系统可能用到会面向数据库 (datebase) 这样的继承体系。

下面介绍信息发现、通信、实体、合作以及继承软件问题,(图一)解释了 Agent 的各种问题和它们的解决方案之间的相互影响。

图一解释了知识层多 Agent 合作中涉及到的问题,中心 Agent 需要解决一个复杂的任务,但这个任务需要与其它 Agent 协作才行。为了完成任务,中心 Agent 用 Facilitator 来发现具有它所需要的 Agent ,用 Agent Nameserver 来确定这些 Agent 的地址, Agent 之间相互通信需要共享的描述以及对一般领域概念的理解,比如实体( ontology )。

(图一)

●信息发现 用特别的共用 Agent 比如象 Nameserver 和 Facilitator 来处理信息发现。 Nameserver 和 Facilitator 作为整体中的白页(地址录)和黄页,分别为 Agent 的地址和能力提供浏览服务。这样, Agent 只须向 Nameserver 注册它们的地址,向 Facilitator 注册它们的能力。

● 通信问题 对不依赖与 Agent 的一种通信语言( ACL )的需求带来了 KQML ( Knowledge Query and Manipulation Language )和 FIPA ACL 的发展。许多 ACL 并不是用基本原理把消息内容、句法和语调具体化,不同的应用领域可能需要不同的合适的语言,然而许多用作一般目的语言已经发展开了,比如 KIF ( Knowledge Interchange Format )。

● 实体问题 如果 Agent 用不同的词汇来代表共享领域的概念,那么用一种共同语言进行交流的 Agent 之间是不能相互理解的,因此,它们必须使用同一实体或词汇表示共同概念,这些要么通过一般目的的实体或通过创造一些具体领域的实体,或使用实体之间的相互转换才能做到。但大部分一般目的的实体不可能包括所有可能领域中错综复杂的实体,并且,对许多应用来说,很可能会变得太大且带来不必要的麻烦。

● 合作问题 多 Agent 体系中合作行为是一个应用多种技术、积极活跃的研究领域,主要方法可分为组织结构、合同、多 Agent 计划以及协商。

在组织结构中,合作利用的是早已在社会中定义好的结构,这一点典型地体现在客户服务系统中。这里社会指的是不同的 Agent 和它们之间关系的模型。

合同作为合作机制被合同网络协议作为一种典型,管理 Agent 发布一个合同,然后受到对它感兴趣的其它合作 Agent 的报价,同时不断地提高报价,最终与胜者签定合同。

在多 Agent 计划中, Agent 利用典型的 AI 计划技术来计划它们的行为,解决可见的冲突。计划通常从两种形式中选择一种。一种是中心计划——中心 Agent 根据社会的利益进行计划;另一种是非中心计划——各 Agent 交换分计划,共同完成整个计划,并解决其中的冲突。

通过协商, Agent 利用对话与其它 Agent 交换协议,并提高协议,直到达到一种所有 Agent 都满意的状态。

● 继承软件问题 坦白地说, Agent 没有解决继承软件问题,如何解决这个问题,通常有三种可能的方案:其一,重写软件,但这是一项耗资的方案。其二,利用一个叫转换器的单独的小软件作为 Agent 通信语言和继承体系中协议的媒介。其三,利用包装技术加强继承程序的代码,使它能利用 Agent 内部语言进行通信。

第三节 ZEUS 设计的思想

开发 ZEUS 的目的就是便于利用工具包中很普遍的原则和方法快速开发一些新的多 Agent 应用,这些原则和方法是利用已经存在的多 Agent 系统已做好的。这种思想是创造一个合作的 Agent 建造工具包,使软件工程师只要具有 Agent 技术中基本的能力就克利用它来开发出具有一定功能的多 Agent 系统,这样一来,我们的设计思想就可概括如下:

首先,这个工具包应清楚地分出领域级 (domain-level) 问题的解决和 Agent 级问题的解决。 Agent 级问题包括:多 Agent 中通信、 合作 、任务的执行和监督、 例外问题的处理等等。而领域级问题的解决包括具体领域的知识的获取 、描述以及使用,我们通常注意的只是领域级的问题。

其次,工具包的使用要以“可视化程序”范例为基础,因此,工具包通过提供使开发人员尽可能简单地通过选择合适的菜单选项来设计他们的 Agent 的功能。

第三,工具包应该支持公开的设计来保证它能很容易地扩展,这样,专业人员就可以很容易给 Agent 领域的组成元素库增加内容,利用用户自己定义的和系统支持的元素做新的 Agent 。

第四,利用“标准化”的技术,因为标准化对于从事 Agent 技术的企业来说是非常重要的。

下面介绍一下 ZEUS 的性能要求:

简单地介绍过 ZEUS 的设计者们的设计思想,现在考虑应用者眼中的要求:

● 初始化各种不同功能和行为的 Agent 。

●用系统提供的组织关系来灵活地组织各个 Agent 。

●赋予每个 Agent 系统提供或用户定义的通信和合作机制。

●给每个 Agent 提供合适的具体应用问题的解决代码。

● 为 Agent 自动产生执行能力。

另外,还应允许 ZEUS 工具包具有以下功能:

●它应该提供预先定义好的信息发现 Agent ,比如 Nameserver 和 Facilitator Agent 。

● 它还应提供很广泛的便利,为观察和调试 ZEUS Agent 之间的关系。

 

第四节 ZEUS Agent 的假设和应用领域

ZEUS Agent 的假设:

● Agent 是思考的,目的直接,具有推理性。

● 与其它 Agent 交易时总是真诚的。

● 多面性。比如可以有许多目的,能从事一大堆问题。

● Agent 是暂时的持续。

Agent 应该是思考的,它们要推理它们的行为,根据要达到什么目标,什么时候要去采取新的目标,什么时候放弃已经达到的目标。

另外,直接目的的行为的要求说明在某种程度上, Agent 只能选择它们期望达到的目的的行为。

还有,要么它们不能达到目标,要么是已经没有达到这个目的的动机,它们才会放弃目标。推理性假设说明 Agent 只能采取它们认为能获取最大限度利益的行为,也就是说,给定了行为的选择, Agent 就会选择它认为能在可能的时间和可利用的资源内执行的行为,并且能取得尽可能大的利润。

ZEUS Agent 的典型应用领域:

Agent 典型的应用领域是面向任务的领域,比如,提供服务 、资源 / 过程管理 、供应链管理,这些领域有许多特点:

第一, 给定一个目标, Agent 就会创造一个行动计划来达到这个目的,这个计划需要明确地推理这个给定的有限的时间和其它资源内的行为的前提和影响。

第二, 问题的解决需要与其它 Agent 合作才行。

第三, 当 Agent 环境是动态时,环境的变化时间间隔至少要低于 Agent 的推理时间,否则, Agent 就什么也干不了。

最后,在这些领域, Agent 的任务就是推理怎样 、什么时候来具体化、 激活或放弃执行真正工作的外部体系。

 

第五节 ZEUS 开发包的结构

ZEUS 工具包拥有一套组件,它们是用 JAVA 编程语言开发的,可分成三组: Agent 构建库, Agent 建造工具,还有一套共用 Agent 包括 Nameserver,

Facilitator 和 Visualiser Agent 。

Agent 构建库:

Agent 构建库是一个类库集,这些类组成了单个 Agent 的构造块,它们共同完成协作 Agent 需要的 Agent 级的功能。为了通信, Agent 构建库提供以下功能:

● 一种通信语言,这里用的是 KQML 。

● 一种异步的基于点通信的消息传递系统。

● 描述具体领域中实体的编辑器。

● 一种基于框架结构的知识描述语言。

为了进行推理和多 Agent 之间的合作,库还提供:

● 控制 Agent 社会行为的合作机制,如:什么时候 、 怎样与其它 Agent 相互作用。

计划和合作机制的功能是受 Agent 的知识体系的控制,如它可用的资源和能力,它与其它 Agent 的组织关系以及它可用的合作策略。为了支持这两个组件,库还提供:

● 预先定义可重用的合作协议库,如合同网络和各种拍卖协议。

● 许多预先定义的组织关系。目前这套关系主要包括上级 (Superior) 、 下级 (Subordinate) 、 同伴 (Co-worker) 和平等 (Peer) 关系。

● 知识描述机制以及描述存储 Agent 的资源和能力的数据库。

ZEUS Agent 的建造工具

支撑 ZEUS 工具包的主要原则是通过具体化一般 ZEUS Agent ,并给它装备上必要的应用功能来组建具体应用的 Agent 。为了便于快速开发多 Agent 应用, ZEUS 工具包提供了高层次的 Agent 开发方法,这些方法对开发者隐藏了 Agent 构建库的复杂性,它主要包括两个方面:

● Agent 创造方法,它通过对系统的分析和设计指导开发人员。

● 支持创造方法的一个可视化 Agent 开发环境。

下面简要介绍 ZEUS Agent Generator :

这是一套编辑器,为了便于使用,这套编辑器是通过可视化使用者的 Agent 具体属性进行设计的,主要包括如下:

● 实体编辑器 定义某一领域的实体项目,它可以为应用领域创造概念类型,并利用面向对象体系的继承机制确定与其它概念的关系,根据属性及属性的值定义实物。

● 实物 / 变量编辑器

● Agent 定义编辑器 在逻辑上描述 Agent ,这涉及到没个 Agent 的任务和原始资源等。

● 任务描述编辑器 具体化每个任务的属性,用图表组成概括的任务。

● 组织编辑器 定义 Agent 之间的组织关系以及 Agent 对其它 Agent 能力的确信度。

● 合作编辑器 选择每个 Agent 将要用到的合作协议。

ZEUS 的共用 Agent :

一套 ZEUS 共用 Agent 包括一个 Nameserver Agent 和一个 Facilitator Agent 。还有一个观察器( Visualiser ) Agent 用来观察和调试 ZEUS Agent 的社会关系。一个 ZEUS Agent 社会可以有无数多共用 Agent ,但是至少有一个 Nameserver Agent 。

Nameserver Agent 只有一个 Mailbox 和 Message Handler, 它们接收 Agent 对其它 Agent 地址的询问并作出反应 。 另外 Nameserver Agent 还有一个全社会范围的时钟 , 虽然一个社会可能有许多 Nameserver Agent, 但只有起主要作用 , 其它时钟都是以它为基准 。

Facilitator Agent 有一个 Mailbox 和 Message Handler, 它们用来接收 Agent 对其它 Agent 能力的询问并作出反应 , 它还有一个 Acquaintance Database 用来存储 Agent 的能力 。

Visualiser Agent 用来观察 、 分析 、 调试 ZEUS Agent 的社会成员 , 通过询问其它 Agent 的状态和过程 , 然后校对并解释回答来创造 Agent 合作行为的一个更新的模式进行工作 。这种模式可通过 Visualiser Agent 提供的观察工具进行不同角度的观察 。 这些工具包括 :

● Society Viewer 它显示了社会中所有 Agent 以及它们内部的组织关系 , 还可显示问题解决过程中 Agent 之间的信息交换过程 。

● Reports Tool

● Agent Viewer 观察并监视 Agent 内部状态 。

● Control Tool 它用来去处或更新单个 Agent 的内部状态 , 通过这个功能更新 Agent 的任务资源或组织数据库 , 甚至给它提供新的消息传递规则或合作图表 , Agent 的行为可以在运行时间里通过这个工具得到重定义 。

● Statistics Tool 在许多格式下演示单个 Agent 和整个社会的统计数字 。

 

第三章 用 ZEUS 开发多 Agent 应用的一个例子

第一节 ZEUS 的安装

本次毕业设计使用的是 ZEUS1.0 版本,它需要在 jdk1.2 或更高版本支持的环境下才能运行,这里我们使用的是 jdk1.2.1 版本。

当我们安装了 jdk1.2.1 时,在 Ms-Dos 状态下输入

java –version

命令,屏幕上会显示当前安装的 jdk1.2.1 的版本。否则,编辑 AUTOEXEC . BAT 文件,在最后加上一行

SET  PATH=C: \jdk1.2.1\BIN ;

这里,假设 jdk1.2.1 安装在C盘。

重新启动计算机,此时 jdk1.2.1 已正确地安装好了。

下面安装ZEUS:

在 Ms-Dos 状态下,输入

      java zeusinstall

命令,ZEUS的类文件开始进行自解压,解压完毕,ZEUS软件中就包含了利用ZEUS设计 Agent 的所有工具。

假如你现在就想利用这些工具,那么还需要编辑AUBTEXEC . BAT文件,在文件尾部正确地设置类路径,即加入以下几行:

 SET CLASS=C: \jdk1.2.1\LIB\tools . jar ;

           C: \jdk1.2.1\LIB\dt . jar ;        

SET CLASSPATH=C: \ZEUS\LIB\zeus . jar ;

C:\ZEUS\LIB\gun-regexp . jar ;

这里假设 ZEUS 安装在 C 盘。

此时, ZEUS 软件才算完全地安装完毕,可以进行 Agent 应用设计。

用 ZEUS 开发多 Agent 应用过程可分为四个阶段,如下图:

其中,第一 、 二阶段不须用到软件的支持,第三阶段用 ZEUS Agent Generat

or 支持,第四阶段用 ZEUS Visualiser 来观察。

任何一种方法的设计过程都是很繁琐的, ZEUS 也不例外。为了避开这一缺点,引起大家的兴趣,在这里我把第二阶段的设计工作略去。

 

第二节 分析过程

假如有两个商人,分别叫 Jack 和 Tom , Tom 是生产商,现有 100 箱苹果, 80 箱桔子, 60 箱梨,箱甜瓜,无现金。它想以最低利润为 10% 的价格卖掉商品。

Jack 是销售商,现有商品: 10 箱香焦, 5 箱梨和 10 箱甜瓜,银行存款为 500 元,用来买卖商品。他的最低利润为 5% 。

下面要作几个假设:

• 苹果,桔子和梨每箱价格为 5 元;

• 香焦价格为元 10 ;

• 香瓜每箱元 8 ;

• 箱子无大小之别;

• 市场是开放的,即生产商和销售商咳随时加入或离开市场。

在 Ms-Doc 状态下输入

java zeus . generator . AgentGenerator

命令,启动 Agent Generator 编辑器,如(图 1 )。

注意:要把显示器的分辨率调整在 1024 × 768 以上。

本过程可分为五个步骤:

⒈ 创建实体。

⒉ 创建 Agent ,对每个 Agent 都要定义它的任务描述, Agent 的组织, Agent 的合作关系。

3 . 共用 Agent ( utility Agent )的初始化。

4 . 任务 Agent 的初试化。

5 . 执行 Agent 。

(图 1 )

一、 创建实体

•从实体( ontology)主菜单上选择 菜单选项。

如果实体编辑器已经启动,就会弹出一对话框(如图 2 ),问是否存盘已经存在的实体。

(图 2 )

• 选择 选项,进入编辑状态,弹出(如图 3 )界面。

• 点击 ZeusFact ,弹出下拉菜单。

• 点击 Entity 节点后,再点击 ,在 Entity 下面会出现一 fact1( 或 fact2,fact3 ┅ )。

•双击 fact1把它改为apple。

•点击 ,会出现图3的下半部分,实体的属性部分。

这一部分也可编辑,本例中不用编辑,如果要编辑:

•选择 ,在 Name 菜单部分会出现一新的属性,此属性也可编辑。

• 选择 Type, 弹出一对话框 ( 如图 4) 。选择你所需要的类型,点击 OK 即可。

( 图 3)

· Restriction 和 Default Value 菜单通过双击,会呈现一绿色方块,在方块内编辑你所要的内容。

• 象输入 apple 一样,输入 orange , pear , banana , melon 。

• Restriction Definition 菜单的编辑与以上相似,本例中也不需要对它进行编辑。

• 存盘,退出创建实体的过程,文件名为 ”fruit • ont” 。

这样,我们就创建完本例的实体。

二、 Agent 的创建

(图 4 )

(图 5 )

· 选择 Agent options 的 选项(如图 5 ),这样就创建了一个新的 Agent ,它用了一个暂时的名字。

· 选择 选项,把它改为 Tom 。

· 双击 Tom 或选择 选项,此时打开一个 Agent 的编辑窗口(如图 6 )。

下面进行 Agent 的定义过程:

· 选择 Initial Agent Resources 部分的 选项,弹出一个对话框(如图 7 )。

· 点击 Entity ,这时 FactType 栏会出现许多实体,选择 apple ,单击 OK 。

· 双击 Instance 菜单下的空白处,此处可编辑,改为 appleStock 。

· 属性的值也可编辑,双击 Value 菜单下的空白处,会出现一绿色方块。在方块内把 unit-cost 的值改为 5, 把 number 值改为 100 。

· 重复以上步骤,输入 orange 的 unit-cost 值为 5 , number 为 80 , pear 的 unit-cost 值为 5 , number 为 60 , banana 的 unit-cost 值为 10 , number 为 0 , melon 的 unit-cost 值为 8 , number 为 0 。

· 最后,选择 ,单击 Abstract, 弹出下拉菜单,选择 Money ,改 Instance 为 cash , amount 值 0 。

到此, Agent Tom 已完全定义好了。

(图 6 )

(图 7 )

任务的描述过程

由于本例中只有买卖双方商品所有权的交换问题,通过信息的传递就可解决,因此,没有任务需要执行。我们略过这一过程。

Agent 的组织过程

本例非常简单,用不到 Agent 的组织层的内容,因此这一部分也略过。

Agent 的合作过程

从贸易的设计来看,有许多问题的解决要影响到 Agent 合作层,这些问题就是怎样买和卖。下面给 Agent 定义怎样买:

Agent 要买商品,它必须与那些潜在的卖方进行对话,因此在这一部分,我们给 Agent 装备一个协议, Agent 通过这个协议进行合作。

• 选择 Agent 编辑器的 Agent Coordination 菜单,弹处(如图 8 )的界面。

• 选中 Initiator ,双击 Strategy 弹出下拉菜单,选择 GrowthFunction 。

(图 8 )

• 双击 Parameter 弹出一对话框(如图 9 )。

现在可以定义其中的参数:

• 选择 NEW ,双击 key 和 value ,把它们改成(如图 9 )所示。

• 单击 OK ,策略的参数已全部定义完毕。

(图 9 )

下面定义 Agent 怎样卖:

与上面定义一样,只需把 max.percent 改为 125 , min.percent 改为 110 , no.quibble 改为 0.3 。

这时一定要存盘,单击 Agentcoordination 面板上的 save , Tom Agent 已全部作好。

下面定义 Jack :

利用 ZEUS 创建 Agent 的一个特殊功能 clone ,快速创建 Jack. 。

• 选择 Tom ,点击 clone ,这时产生一个和 Tom 一样的 Agent 。

• 和编辑 Tom 一样,把 apple 的 number 值改为 0 , orange 的 number 值改为 0 , pear 的 number 值改为 5 , banana 的 number 值改为 10 , melon 的 number 值改为 10 , cash 的 amount 值改为 500 。

• 选择 Respondent ,把参数的值 min.percent 改为 105 。存盘退出,此时, Jack 已完全定义。

三 、 共用 Agent 的初始化

这一阶段我们要决定用到哪些共用 Agent ,把它们相应地初始化。从 Agent Generator 面板上打开代码生成器 ,会显示除了 Tom 和 Jack 之外,还有一个 Nameserver , Facilitator ,和 Visualiser (如图 10 )

(图 10 )

• 单击面板的“ utility Agent” 选项(如图 11 )。

(图 11 )

• 双击 Nameserver ,改为 ANS 。

• 双击 Facilitator ,改为 Broker ,同时改 RecyclePeriod 为 0 。

• 改 Visualiser 为 Visual ,这样共用 Agent 已全部初始化。

四 、 任务 Agent 初始化

选择图 11 的 Task Agent 选项,打开一个编辑器(如图 11 )。

(图 12 )

首先来看一下 Tom Agent ,如果它和共用 Agent 运行在同一个主机上,那么它 Host 的值不需改动, DNS file 的值也不需改动,本例不需要外界数据库,但却要用到用户图形界面。

• 双击 Create GUI 。

• 双击 External Program ,输入 TomUI 和 JackUI (如图 12 )。

五 、 代码的生成及执行

• 选择正确的路径(如图 10 ),单击 Target Directory 按钮,选择路径,或直接写出它的路径,以便代码写入其中。

• 选择你所用的操作系统,这里选 Windows 。

• 单击左上角的 ,此时代码生成器为 Generator plan 表中列出的每个 Agent 都生成 JAVA 源代码,这些源代码将写在以上选择的目录中。

执行外部接口

每个 Agent 都需要一个用户界面来输入买卖指令,我们为 Tom 和 Jack 这两个 Agent 用 JAVA 语言编一个用户界面和 Agent 执行之间的接口源程序。

注意: JAVA 语言的文件名要与类名一致,如本例的两个源文件名分别为

TomUI . java 和 JackUI . java (见下表)。另外,还要编界面和执行程序,即 TraderFrontEnd . java 和 StockPanel . java (源程序见附录)。

import zeus.actors.*;

import zeus.agents.*;

public class TomUI implements ZeusExternal

{

public void exec(AgentContext agent)

{

TraderFrontEnd thiswin=new TraderFrontEnd(agent);

}

public void showMsg(String message) {}

public static void main(String[] args)

{

TomUI win=new TomUI();

win.exec(null);

}

}


第三节 运行例子

当以上这些工作做完之后,在 Ms-Dos 状态下输入:

javac * . java

命令,进行 java 编译,如果没有错误,那么就可以运行了。

第二节 运行程序

注意事项:由于 JAVA 语言是一种解释性的编程语言,占用内存空间比较大,因此,最好保证要有 32 兆内存, 120 兆以上可用空间,此程序才能运行比较流畅。

• 输入命令“ run1” ,此时,在后台打开一个 JAVA 解释器。

• 输入命令“ run2” ,启动 Tom 和 Jack 两个 Agent ,又在后台打开两个 JAVA 解释器。同时,屏幕上出现一个 Agent 观察窗口和一个贸易图形用户界面窗口,通过 Agent 观察窗口可知道 Agent 之间的信息交流情况。在贸易图形用户界面窗口内输入你对 Agent 的各种命令(如图 13 )。

• 输入命令“ run3” , 启动 Visualiser 和 Facilitator 两个 Agent ,在后台又打开两个 JAVA 解释器,同时屏幕上出现一个窗口,通过它,可用五个视角观察 Agent 之间的信息交流。(见图 14 ) ( 图 15) 。

( 图 13) 贸易图形用户窗口

(图 14 )

选择 online 下的 Require message 选项,当给 Agent 输入信息时, Agent 之间相互交流信息的视图

(图 15-1 )

(图 15-2 )从统计的角度来观察

试着在贸易图形用户界面上做以下步骤:

在 Agent Tom 的界面上选择 sell fruit, 并选择 apple ,在 reserve price 栏输入 9 ,保留时间 deadline(time-grains) 为 3 ;点击按钮,时这通过(图 14 )可观察到向发出一信息,有商品要卖。

在 Agent Jack 的界面上选择 buy fruit 并选择 apple ,在 Maxmum off price 栏输入 7 ,保留时间 deadline ( time-grains )为 3 ,点击按钮,通过(图 14 )观察到也向发出一信息,有商品要买,然后,可观察 Tom 、 Jack 和 Broker 三者之间的信息交流情况,通过战略协商,最终达成协议如(表 1 、 表 2 ):

当要退出程序时,点击 Contral tool (如图 16 )的 即可, ANS 向每个 Agent 发送信息,自动关闭 JAVA 解释器。

( 图 16)

Tom is awaiting your instructions...

Attempting to sell: apple

My preferences: price= 9, within 3 time-grains

Conversation started...

[cfp] from Jack >> apple @ 0.000

[propose] to Jack >> apple @ 11.250

[cfp] from Jack >> apple @ 5.224

[propose] to Jack >> apple @ 11.050

[cfp] from Jack >> apple @ 5.549

[propose] to Jack >> apple @ 10.850

[cfp] from Jack >> apple @ 5.873

[propose] to Jack >> apple @ 10.650

[cfp] from Jack >> apple @ 6.198

[propose] to Jack >> apple @ 10.450

[cfp] from Jack >> apple @ 6.522

[propose] to Jack >> apple @ 10.250

[cfp] from Jack >> apple @ 6.847

[propose] to Jack >> apple @ 10.050

[cfp] from Jack >> apple @ 7.171

[propose] to Jack >> apple @ 9.850

[cfp] from Jack >> apple @ 7.496

[propose] to Jack >> apple @ 9.650

[accept-proposal] from Jack >> apple @ 9.650

[result] to Jack

[invoice] to Jack

[payment] from Jack


(表 1 )

Jack is awaiting your instructions...

Attempting to buy: apple

My preferences: price= 7, within 3 time-grains

Conversation started...

[cfp] to Tom >> apple @ 0.000

[propose] from Tom >> apple @ 11.250

[cfp] to Tom >> apple @ 5.224

[propose] from Tom >> apple @ 11.050

[cfp] to Tom >> apple @ 5.549

[propose] from Tom >> apple @ 10.850

[cfp] to Tom >> apple @ 5.873

[propose] from Tom >> apple @ 10.650

[cfp] to Tom >> apple @ 6.198

[propose] from Tom >> apple @ 10.450

[cfp] to Tom >> apple @ 6.522

[propose] from Tom >> apple @ 10.250

[cfp] to Tom >> apple @ 6.847

[propose] from Tom >> apple @ 10.050

[cfp] to Tom >> apple @ 7.171

[propose] from Tom >> apple @ 9.850

[cfp] to Tom >> apple @ 7.496

[propose] from Tom >> apple @ 9.650

[accept-proposal] to Tom >> apple @ 9.650

[result] from Tom

[invoice] from Tom

[payment] to Tom


(表 2 )

小结

经过近两个月的辛勤努力工作,本次毕业设计已圆满完成。在这期间,我深深地感受到设计成功的喜悦,也体味到失败的痛苦。由于以前从来没有学过 JAVA 编程语言,也不懂 ZEUS 和 Agent 概念,所以刚开始,什么也不会,一切都从零起步。不过,随着时间的推移,知识的积累,我慢慢地了解 Agent ,弄懂它的基本工作原理,并学着用 ZEUS 做一个多 Agent 应用。

毕业设计确实能够锻炼一个人,当你遇到一个不懂的问题,这时老师又不在身边,一切的一切都要靠自己,查阅书籍,类比推理,用尽各种方法去解决它们。否则,就什么也学不到。

在这毕业设计期间,图像信息处理实验室的工作人员给我提供了良好的工作环境,特别是刘宏伟老师和鲍捷(研究生)给我大力的支持和热情的帮助,在此,向他们表示衷心的感谢。

参考文献

[1] [ 美 ] Cay S.Horstman 和 Gray Corneu 著,京京工作室译: 《 JAVA2 核心技术 卷Ⅰ:基础知识》,机械工业出版社, 1999年.

[2] 肖刚等著:《JAVA GUI编程设计》,清华大学出版社,1998 年。

[3] [ 英 ] 《 The Zeus Agent Building Toolkit 》, British Telecommunications Plc 1999 。


[Return to Jie Bao's Homepage]