JADE中文教程,包还一个真实系统

合集下载

JADE编程入门

JADE编程入门

JADE TUTORIAL(教程)JADE PROGRAMMING FOR BEGINNERS(玉编程基础入门)USAGE RESTRICTED ACCORDING TO LICENSE AGREEMENT.(基于许可证的用法限制)JADE - Java Agent DEvelopment Framework(开发框架) is a framework to develop multi-agent systems (多代理系统) in compliance with the FIPA specifications(遵从FIPA规范). JADE successfully passed the 1st FIPA interoperability test (相互操作性测试)in Seoul (Jan. 99) and the 2nd FIPA interoperability test in London (Apr. 01).Copyright (版权)(C) 2000 CSELT S.p.A. (C) 2001 TILab S.p.A. (C) 2002 TILab S.p.A.This library is free software(这是一个自由软件库); you can redistribute(重新分配) it and/or modify it under the terms of the GNU Lesser General Public License aspublished(在发表GNU公共许可证的前提下) by the Free Software Foundation, version 2.1 of the License (自由软件基金会授权的2.1版本).This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY(无任何担保); without even the implied warranty(隐含保证)of MERCHANTABILITY(merchantability 适销性) or FITNESS (fitness 针对性)FOR A PARTICULAR PURPOSE(particular purpose 特定用途). See the GNU Lesser General Public License for moredetails.You should have received a copy of (副本)the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc.(公司), 59 Temple Place (59寺广场)- Suite (套房)330, Boston, MA(麻省) 02111-1307, USA.TABLE OF CONTENTS(目录)1 JADE OVERVIEW (概述)1.1 Containers and Platforms (集装箱和平台)1.2 AMS and DF (Agent Management System and Directory Facilitator代理管理系统和目录诱导者)2 THE “BOOK TRADING” EXAMPLE (“图书交易”例子)3 CREATING JADE AGENTS – THE AGENT CLASS (创造玉代理-代理类)3.1 Agent identifiers (代理标识符)3.2 Running agents (运行代理)3.3 Agent termination (代理终止)3.4 Passing arguments to an agent (传参给代理)4 AGENT TASKS – THE BEHAVIOUR CLASS (代理任务-类得行为)4.1 Behaviours scheduling(安排) and execution (执行)4.2 One-shot behaviours, cyclic behaviours and generic behaviours (单次行为,循环行为和一般行为)4.3 Scheduling operations at given points in time (在给定的时间安排操作点)4.4 Behaviours required in the book trading example (在书本交易例子中需要的行为)4.4.1 Book-buyer agent behaviours (买书代理的行为)4.4.2 Book-seller agent behaviours (卖书代理的行为)5 AGENT COMMUNICATION – THE ACLMESSAGE CLASS (代理沟通-aclmessage类)5.1 The ACL language ()5.2 Sending messages (发送消息)5.3 The book trading example messages (图书贸易例子中的消息)5.4 Receiving messages5.5 Blocking a behaviour(封锁一个行为) waiting for a message5.6 Selecting messages with given characteristics from the message queue (从信息队列中选择一个给定的特点)5.7 Complex conversations (复杂对话)5.8 Receiving messages in blocking mode(在封锁状态中接收信息)6 THE YELLOW PAGES SERVICE(黄页服务)– THE DFSERVICE CLASS (DF服务类)6.1 The DF agent6.2 Interacting(互动) with the DF6.2.1 Publishing services (出版服务)6.2.2 Searching for services (找寻服务)JADE PROGRAMMING FOR BEGINNERSThis tutorial(教程) shows how to create simple JADE agents and how to make them executing(执行) tasks andcommunicate between each other. JADE is completely written in Java (完全用JAVA编写)and JADE programmers (程序员)work in full Java when developing their agents. Therefore the reader is assumed to be familiar with the Javaprogramming language.This tutorial’s structured (结构)as follows.Chapter 1 (第一章)gives a brief overview of JADE and introduces the concepts of Platform, Container, AMS and DF.Chapter 2 presents a simple example that will be usedthroughout this tutorial to illustrate(说明) the steps required to develop simple agent-based applications withJADE.Chapter 3 focuses on creating agents and explains the basic features (基本特点)of the Agent and AID classes.Chapter 4 explains how to make JADE agents execute tasks(执行任务) and introduces the Behaviour class(类行为).Chapter 5 describes how to make agents communicate and introduces the ACLMessage and MessageTemplate classes. Chapter 6 illustrates how to exploit(利用) the Yellow Pages service provided by the DF agent through the DF Service class.Besides the basic features illustrated(基本特征说明) in this tutorial, JADE provides a number of advanced(先进) features such as the support for complex interaction protocols(对复杂交互协议的支持) and the usage of user defined ontologies(对用户定义本体的使用). For these features readers are reminded to the JADE Programmer’s guide(程序员指南)and Administrator’s guide (管理指南)available on the JADE web site.1 JADE OVERVIEWJADE is a middleware(中间件) that facilitates(使简化) the development of multi-agent systems. It includes(1)A runtime environment (运行环境)where JADE agents c an “live”(生存) and that must be active(起作用的) on a given host(在给定的主机上) beforeone or more agents can be executed on that host.(2) A library of classes (类库)that programmers have to/can use (directly or by specializing (专心于)them) to develop their agents.(3) A suite of graphical tools (一套图形工具)that allows administrating (管理)and monitoring (监测,检查) the activity of running agents.1.1 Containers and PlatformsEach running instance(运行案例) of the JADE runtime environment is called a Container (集装箱)as it can contain several agents. The set of active containers(这种起作用的集装箱) is called a Platform(平台). A single special Main container must always be active in a platform and all other containers register with it(和它一块登记,和主集装箱绑定) as soon as they start. It follows that(因此) the first container to start(第一个开始的集装箱) in a platform must be a main container while all other containers must be “normal” (non-main) containers and must “be told” where to find (host and port主机和端口) their main container .(相当于一个工头带着一群工人,只有工头先找到工作地点,工人们与工头取得联系,找到工头在哪儿,工人们才能和工头协同工作。

JADE教程

JADE教程

JADE教程1. Jade5.0的安装和设置Jade5.0都是自动安装的,这不成问题。

要把PDF卡片引入,先将ICDD的光盘插入,然后pdf/setup/select all/,其它按提示进行。

可以对优选项进行设置:EDIT/preference/,里面包括了对显示窗口的设置,仪器参数的设置,打印输出的设置等。

2 .数据的输入Jade软件可以直接读取Rigaku、Bruker、Philips、Scintag等很多衍射仪的原始数据。

打开File\patterns,将出现如附件中所示画面,先(I)找到你文件位置,从(III)的下拉框中选择你的数据格式,按(II)选择。

很多仪器输出文件的格式都是*.raw,实际上都是不一样的,但格式选错了也没关系,软件会给你自动转到合适的格式中去的。

高级一点的:有一些数据格式在(III)的下拉框中没有,比如最常见的txt,xy 等,此时你可以自己动手设置,在以上的数据输入面板中,点击工具栏上的“import",进入格式设置画面,如附件所示,a区为注释区,b区为数据格式区,对于最简单的一列角度,一列强度的数据格式,a区不用填写,b区在”angle column“前打上勾,数据从第1行开始读,每行1列数据,强度数据从第8行开始(角度不算),角度从1至6列,所得数据格式即为附件中所示的数据格式。

你也可以按照自己的数据格式进行自由改动,如果a区中表明第1行有说明文字,则数据从第2行读入,相应在b区就将data starts改成2。

做完上面的工作后,将文件后缀改为你的数据后缀(箭头所指),再将该格式保存下来便可大功告成了。

3. 基本功能使用:平滑,扣背底一张XRD图谱出来,往往因为有空气散射,漫散射,荧光以及样品结晶差等等原因而造成图谱上存在许多“毛刺”和较高的背底,虽然提高X光强度能成倍提高信噪比,然而有时受仪器和样品所限,这两项功能需要用到。

但根据我个人的经验,要尽量少使用平滑和扣背底,因为这两项操作带来的可能后果就是将一些微弱的有用信息一概抹掉了,特别注意的是,如果将数据用来做Rietveld精修,更不要进行这两项操作。

jade用法 -回复

jade用法 -回复

jade用法-回复Jade是一种快速而简单的模板引擎,用于将数据和静态内容结合生成HTML代码。

它使用简洁的语法和有效的嵌套,可以轻松地创建可维护和可读性强的模板。

本文将一步一步回答关于Jade的用法和功能的问题。

第一步:安装和设置Jade要开始使用Jade,首先需要安装它。

可以使用npm(Node Package Manager)在命令行中运行以下命令进行安装:npm install jade安装完成后,就可以在Node.js环境中使用Jade了。

第二步:创建Jade模板接下来,需要创建一个Jade模板文件。

可以使用任何文本编辑器,创建一个新文件,并将其保存为`.jade`文件类型。

例如,可以创建一个名为`index.jade`的文件作为我们的示例。

第三步:Jade语法基础Jade的语法非常简洁,使用缩进和标签代替HTML中的添加斜杠和尖括号。

以下是一些常用的Jade语法规则:1. 标签:在Jade中,可以使用缩进和行内标签来表示HTML标签。

例如,使用`div`关键字可以创建一个`<div>`标签。

2. ID和类:可以使用井号`#`和点号`.`来定义ID和类。

例如,`#container`表示`<div id="container">`,`.red`表示`<div class="red">`。

3. 属性:可以使用圆括号和等号来设置HTML元素的属性。

例如,`(href='/page')`表示`<a href="/page">`。

4. 文本:可以直接在Jade模板中添加文本。

例如,`h1 Hello Jade!`表示`<h1>Hello Jade!</h1>`。

第四步:变量和数据绑定与其他模板引擎类似,Jade允许将数据绑定到模板中,以便在渲染时动态更新内容。

jade5.0教程

jade5.0教程

Jade5.0教程简介Jade是一种简洁且优雅的模板语言,专门用于编写HTML。

在Jade5.0中,引入了一些新的功能和语法,为开发者提供了更好的开发体验和更高的效率。

安装在开始之前,我们需要先安装Jade5.0。

你可以使用npm包管理器来安装Jade5.0:********************.0基本语法标签在Jade中,可以通过缩进来定义标签的层级关系。

例如,我们可以通过缩进创建一个div标签:div如果我们要为标签指定class或id,可以使用.和#符号:div.containerdiv#main-content文本在Jade中,可以直接在标签中写入文本:div Hello Jade!属性在Jade中,可以为标签添加属性。

属性可以通过()包裹,也可以直接在标签后面添加。

例如:input(type='text' value='Jade')input(type='submit' value='Submit')变量Jade支持变量的定义和使用。

可以使用- var来定义变量,然后在标签中使用#{}语法来引用变量。

例如:- var name = 'Jade'div Hello #{name}!条件语句Jade5.0引入了if...else if...else语句来进行条件判断。

例如:- var score = 90if score >= 90p Excellent!else if score >= 80p Goodelsep Keep trying!循环语句Jade5.0中,循环语句可以使用each...in语法进行迭代。

例如:- var fruits = ['apple', 'banana', 'orange']uleach fruit in fruitsli= fruit包含Jade5.0中,我们可以使用include语句来引入其他Jade文件。

jade模板引擎用法

jade模板引擎用法

jade模板引擎用法Jade(也被称为Pug)是一种流行的模板引擎,常用于和Express应用程序中。

以下是使用Jade模板引擎的一些基本步骤:1. 安装Jade:首先,确保你的系统已经安装了。

然后,通过npm(Node 包管理器)安装Jade。

在终端中运行以下命令:```npm install jade```2. 设置视图引擎:在你的Express应用程序中,将视图引擎设置为Jade。

这可以通过在你的应用代码中添加以下行来完成:```javascript('view engine', 'jade');```3. 设置视图目录:设置视图文件的存放路径。

例如,如果你的视图文件位于`views`文件夹中,可以使用以下代码设置视图目录:```javascript('views', (__dirname, 'views'));```4. 渲染视图:在你的Express路由处理程序中,使用`()`方法来渲染视图。

例如,如果你有一个名为`index`的视图,可以这样渲染它:```javascript('index');```5. 在Jade模板中编写HTML:在Jade模板中,你可以编写HTML标记,并使用Jade的语法来定义变量、条件语句和循环。

例如:```pugdoctype htmlhtmlheadtitle= pageTitlebodyh1 My Jade Templatep= message```在上面的例子中,`pageTitle`和`message`是在渲染模板时传递给模板的变量。

6. 传递数据给视图:在渲染视图时,你可以传递数据给模板。

例如,你可以这样传递一个名为`user`的对象:```javascript('user', { user: { name: 'John', age: 30 } });```然后在模板中访问这些数据:```pugh1= , // 输出 "John 30"```7. 使用条件语句和循环:在Jade模板中,你可以使用条件语句和循环。

Jade使用

Jade使用

内标和外标角度校准角度校准是一种用来校正由仪器和实验的非理想性所引起图谱重大角偏差的手段。

标准参考物质(SRMs)为校准提供峰位置参考。

可以通过菜单“Analyze | Theta Calibration”或者右键单击主工具栏上“theta calibration”按钮调用角度校准对话框。

图8-1给出了两个关于角度校准对话框的例子。

图8-1 使用和不使用PDF重叠的角度校正对话框角度校准分两步:(1)绘制校准曲线;(2)应用校准曲线。

第(1)步要求图谱来源于标准物质,或者包含一个或多个标准物质,这样才能使基准有正确的峰位置。

对话框中列出的SRMs 是从Jade程序文件夹中的jade5.srm文件读入的,用户可以使用文本编辑器浏览和编辑该文件,如果需要可以添加或删除SRM。

如果在缩放窗口中存在一个PDF图谱,Jade将把它作为SRM。

换句话说,在角度校准中PDF图谱取代了内置的SRMs。

如果一个图谱不用于校准,在调用校准之前要移除它。

用户也可以在单张扫描图谱校准中添加数张PDF图谱作为SRMs。

校准曲线是把⊿2θ值作为2θ角的函数进行最小二乘拟合,这里⊿2θ是参考衍射线与待校峰位置之间的差值。

考虑到角偏差的性质和图谱的扫描范围,用户可以选择“Correction Type”以拟合曲线。

例如,如果在校准范围内只有一个标准峰,可以只使用零点偏移校正。

用户可以根据ESD值选择适当的校准曲线,也就是说,可以选择给出小的ESD 值同时丢弃尽量少的数据点的曲线。

如果寻峰没有给出任何峰,Jade将在校准中使用拟合峰列表。

如果寻峰和拟合数据都没有,Jade会在绘制校准曲线之前进行自动寻峰。

要得到最好的结果,就要只使用属于同一SRM相关(relevant)的并且被很好解析的峰。

拟合的Kα1峰适于校准,因为参比峰位置是从使用Kα1波长辐射的参比线的d值计算得来的。

Jade将把参考线与待校峰在指定的2θ误差窗口中匹配。

jade教程

jade教程
Display-keep PDF overlays for New Pattern File:保存前一图谱的物相检索 结果到下一个打开的文件窗口,可减 少同批样品物相检索工作量
基本功能
Edit菜单: Preference命令:设置显示、仪器、报告和个性化参数 尤其是仪器半高宽曲线的设置,在计算晶粒尺寸和微观应变时都将用到这个参数;
基本功能
Report菜单: 显示/打印/保存各种处理后的报告。例如:寻峰,物相检索,精修,拟合,经理尺寸计算,微观 应变计算等。可以直接打印也可以保存为文件。
常用工具栏作用
打开文件
寻峰
拟合 物相检索
打印预览
平滑图谱
手动寻峰 编辑背景线
手动拟合
扣除背景
查找PDF 卡片
计算峰 面积
删除峰
扣除背景
扣除背景:由于样品荧光等原因,在做图谱处理前需要先做背景扣除,左击“BG”出现一条背景 线,可以用手动工具中的“BE”调节背景线位置,调整好后,再次点击“BG”即可将背景线以下面积 扣除。右击“BG”弹出对话框可以选择背景线线型-通常选择Cubic Spline。
Iα=K1Cα/μ =K1 Xα / ρα ( Xα μα/ ρα + Xβ μβ / ρβ ) = K1 Xα / ρα [Xα( μα/ ρα - μβ / ρβ )+ μβ / ρβ ]=K分析的具体方法有:
外标法(单线条法) 内标法 K值法 直接比较法(绝热)
Save命令(将原始文件保存为txt;)
需要注意的是Save命令保存的是窗口中显示的图谱,如果窗口中显示的只有部分图谱,那么将 只会保存显示的部分,其他的将不保存。保存前注意设置范围(FullRange(View-Zoom Window菜单)) 如果进行过平滑处理(Smooth),将保存smooth数据非原始数据;

JADE操作说明

JADE操作说明

击左键。(打开文件)
选 DEMO08.MDI
(平滑化)、
(バックグランド除去
平滑 扣背底 BG
一定要去掉 Kα2
17
寻峰
用 reset 设定值 OK。
分析/半价宽曲线 击显示。
显示半价宽曲线。
18
按右侧顺序指定。 出以下画面。
击OK。 校正曲线作成完了
主菜单/编辑 /打开基本设定更改。 仪器相关の最底下一揽 中确认作成的校正曲线。
结束

调出分割数据文件
注意
用RINT-PC不能直接读取测试数据。采用以下处理 方法,能够转换读取的数据格式。
打开RINT-PC 标准软件。
打开多功能文件夹。
打开 ASCII 转换。
启动 JADE 。
将转换形式设定成如 左图的换行文字,击 输入文件名按键,按 清单指定用 RINT-PC 测试的分割测试数 据。 想修改输出文件名 时,可修改,击实行 转换,用 JADE 读取。
除去去掉扣背底。

实行

击右键输入条件 (reset)、
用適用实行。
实行寻峰。
如下图所示,在标记 tab 棒图中打ˇ,显示棒图
击报告 显示清单
在此可加标记。
10
和。
将Y轴显示变更为√。
实行手动寻峰时,击击 击


将光标移至峰顶,击左键 登记、击右键删除。
结束
11
多重书写(立体书写)
击左键(打开文件)
但是、修改视点視点、 在图内击左键移动图形
同时按 Shift、Alt 移动、可更改透视率。
15
如下图所示设定, 成左图状态。
印刷时,击此。 立体显示结束时、击此。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录第一章绪论 (3)1.1问题概述 (3)1.2该领域技术发展现状 (3)1.3全文安排 (5)第二章AGENT简介 (6)2.1Agent技术的起源与发展 (6)2.2Agent定义 (7)2.3Agent的适用领域 (10)2.4agent技术的标准化 (10)第三章JADE平台介绍 (12)3.1JADE平台简介 (12)3.2JADE的特点 (14)3.3用JADE创建多Agent系统 (15)3.3.1Agent平台 (15)3.3.2Agent类 (17)3.3.3Agent任务.执行Agent行为 (19)3.4交互协议 (21)3.5对移动Agent的支持 (22)第四章基于JADE平台上的"图书交易"系统 (23)4.1"图书交易"系统要实现的功能 (23)4.1.1买方Agent (23)4.1.2卖方Agent (23)4.2建立JADE Agent-Agent类 (24)4.2.1agent标识符 (24)4.2.2结束Agent (25)4.2.3向Agent中传递参数 (25)4.3Agent执行的任务-Behaviour类 (27)4.3.1行为调度和执行 (28)4.3.2在特定的时间点执行某个操作 (31)4.4"图书交易"系统执行的行为 (32)4.4.1买方Agent的行为 (33)4.4.2卖方Agent的行为 (34)4.5Agent间通讯-ACLMessage类 (37)4.5.1发送消息 (37)4.5.2"图书交易"系统中的各类消息 (37)中文翻译 (95)1 介绍 (95)2 JADE 特点 (99)3 用JADE创建多agent系统 (100)3.1 Agent平台 (100)3.2 Agent类 (105)第一章绪论1.1问题概述多Agent系统是由多个可以相互交互的,称为Agent的计算单元所组成的系统.Agent作为计算机系统具有两种重要的能力.首先,每个Agent至少在某种程度上可以自治行动,由它们自己决定需要采取什么行动以实现其设计目标.其次,每个Agent可以与其他Agent进行交互,这种交互不是简单地交换数据,而是参与某种社会行为,就像我们在每天的生活中发生的那样:合作,协作和协商等.多Agent系统是计算机科学中比较新的一个分支,从20世纪80年代才开始研究,而直到20世纪90年代中才得到广泛的认同.从此以后国际上对这个领域的兴趣大为增加.这种研究热情的快速增加至少部分的是由于认识到Agent是一种合适的软件范例,这种范例为研究大规模分布式开放系统(如Internet)提供了可能性.尽管多Agent系统在探索Internet的潜力方面能起到关键的作用,但是多Agent系统的作用远不止如此.对于理解和构造各种所谓的人工社会系统来说,多Agent系统似乎是一个自然的比喻.多Agent的思想并不局限在某个特定的领域,像在此前出现的对象一样,多Agent系统会在许多不同的应用领域中广泛出现.1.2该领域技术发展现状近年来,随着计算机技术的不断发展和应用的广泛普及,随着国际互联网络的出现和发展,计算机软件系统结构和计算机组织结构的复杂性不断增加,从而为软件系统的开发提出了更多,更复杂的要求,如可伸缩性,多功能性,可重用性,鲁棒性,一致性.传统的整体设计和集中控制的软件开发方法越来越显示出其固有的局限性.同时软件系统的设计越来越向个性化,智能化方向发展,一些大型软件系统纷纷采用了人工智能的技术.因此可以说智能化,分布式是未来软件设计的方向.作为人工智能和分布式计算的结合,分布式人工智能正逐渐收到人们的重视.分布式人工智能研究的目标是要创建描述自然和社会系统精确的概念模型.在分布式人工智能中,由于智能本质上不是一个独立存在的概念,而智能在团体中实现,因此分布式人工智能研究感兴趣的主要是几个Agent之间的合作,交互等方面.分布式问题求解考虑怎样将一个特殊问题求解工作在多个合作的,知识共享的模块或节点之间划分;在多Agent系统中,主要研究一组自治的智能Agent之间智能行为的协调.知识,规划,不同技能和自身动作的协调是一个过程,在多Agent系统非常重要.目前对Agent和多Agent系统的研究主要集中在以下几个方面:Agent和多Agent的理论,Agent的体系结构和组织,Agent语言,Agent之间的协作和协调,通信和交互技术,多Agent学习以及多Agent系统应用等.关于多Agent系统的应用已经有人做了许多工作,甚至应用于一些大型,复杂的系统,例如机场管理,自动驾驶,高级机器人系统,分布式电力管理,信息检索等.现在,关于Agent的研究不仅得到了人工智能研究人员的关注,也吸引了数据通讯,人机界面设计,机器人,并行工程等各个领域的研究人员的兴趣.有人认为:"基于Agent的计算(Agent-based Computing,简称ABC)将成为软件开发的下一个重要的突破."1.3全文安排本文首先简单的介绍了Agent特点,接着引出一个用于开发多Agent系统的平台-JADE.并结合一个"图书交易"系统,分析如何利用JADE平台创建多Agent系统,以及Agent是如何在平台上执行任务,进行通讯的.内容概要如下:第二章 Agent简介第三章 JADE平台介绍第四章基于JADE平台的"图书交易"系统第五章全文总结最后是附录,参考书目以及致谢.第二章Agent简介2.1Agent技术的起源与发展进入20世纪90年代以来,在各种计算机文献和众多公司的技术发展规划中,Agent正日渐成为使用频率最高的词汇之一.下面就对Agent技术的发展做一个简要的阐述.智能Agent技术的诞生和发展是人工智能技术(AI)和网络技术发展的必然结果.从20世纪60年代起,传统的AI技术开始致力于对知识表达,推理,机器学习等技术的研究,其主要成果是专家系统.专家系统把专业领域知识与推理有机的组合在一起,为应用程序的智能化提供了一个低级而实用的解决办法.作为人工智能的一个分支,AI 计划理论的研究成果使应用程序有了初步的面向目标和特征,即应用程序具有了某种意义上的主动性;而人工智能的另一个分支-决策理论和方法则使应用程序具有了自主判断和选择的行为的能力.人工智能围绕着知识所进行的广泛研究和应用正逐步形成一门新的学科,这就是知识工程,它涉及的知识的获取,存储和管理等许多课题.所有这些技术的发展加快了应用程序智能化的进程.随着网络技术的发展,多个应用程序间相互作用的模式正从单一的集成式系统向分布式系统演化.一个在物理上和地理上分布的应用程序之间通信与合作的网络地层基础结构正逐渐建立起来.分布式对象技术(如CORBA或DCOM技术)则进一步使分布且异构的应用程序之间能以一种共同的方式提供和获得服务,实现了在分布式状态下的"软"集成.智能化和网络化的发展促成了Agent技术的发展,Agent技术正是为解决复杂,动态,分布式智能应用而提供的一种新的计算手段.2.2Agent定义目前并不存在一个被普遍接受的Agent的定义,事实上,对这个问题尚有争论,并存在不同的看法.尽管把自治性作为Agent的核心概念已经达成了普遍的共识,但除此之外很少有一致的看法.Wooldridge和Jennings在总结了前人在Agent领域的一些工作后认为,可以从狭义和广义两个方面去理解Agent的特性(1)Agent弱概念这是从广义的角度来规定Agent的特性.几乎所有被称为Agent 的软件或硬件系统都具有以下的特性:自治性(Autonomy):Agent运行时不直接由人或者其它东西控制,它对它们自己的行为和内部状态有一定的控制权.社会能力(Social Ability)或称可通信性:Agent能够通过某种Agent通信语言(agent communication language)与其它Agent进行信息交换.反应能力(Reactivity):即对环境的感知和影响.无论Agent生存在现实的世界中(如机器人,Internet上的通讯Agent,用户界面Agent等)还是虚拟的世界中(如虚拟商场中的Agent,交互式游戏中的Agent等),它们都应该可以感知它们所处的环境,并通过行为改变环境.一个不能对环境做出影响的物体不能被称作Agent.自发行为(Pro-activeness):传统的应用程序是被动地由用户来运行的,而且机械地完成用户的指令;而Agent的行为应该是主动的,或者说自发的.Agent感知周围环境的变化,并作出基于目标的行为(goal-directed behaviour).在这种定义下,最简单的Agent就是具有上述特性的一个计算机进程,这个进程可以简单到只是个具有某种智能的子程序,能够与别的Agent交换消息.Agent弱概念使Agent不仅仅只应用于人工智能领域,而且广泛地应用在诸如人机界面,通信,并行工程,软件工程,搜索引擎等.因此很多计算机软件都可以纳入Agent的范畴里来,例如处理Internet事务,帮助用户处理E-mail的助理Agent等.Marvin Minsky从多Agent系统的社会智能的角度给出Agent的一个定义:"这些进程我们称之为Agent,每个Agent本身只会做一些简单的事情,但当我们用特定的方法将这些Agent组成一个Agent群(society),就产生了真正的智能."Minsky的定义显然也是一种广义的定义.(2)Agent强概念对某些研究者,尤其是人工智能的研究者来说,Agent除了应具有上面这些特性以外,还应该具有某些通常人类具有的特性.例如知识,信念,意图,承诺等心智状态.有的学者甚至提出了有情感的Agent.当前对强概念Agent的研究主要集中在理论方面.例如,Shoham提出的面向Agent编程(AOP Agent-Oriented Programming)使用的就是强概念的Agent定义:"一个Agent是这样一个实体,它的状态可以看作是由信念(belief),能力(capability),选择(choice),承诺(commitment)等心智构件(mental component)组成."(3)Agent的其它属性长寿性(Longevity):传统应用程序在用户需要时激活,不需要时或者运算结束后停止.Agent与之不同,它应该至少在"相当长"的时间内连续地运行.移动性(Mobility):Agent可以从一个地方移动到另一个地方而保持其内部状态不变.Agent可以携带数据和能够在远处执行智能指令.推理能力(Reasoning):Agent可以根据其当前的知识和经验,以理性的,可再生的方式推理或推测.规划能力(Planning):根据目标,环境等的要求,Agent应该至少对自己的短期行为作出规划.虽然程序设计人员可以提供一些常见情况的处理策略,但这些策略不可能覆盖Agent将遇到的所有情况.所以,Agent应该有生成规划的能力.学习和适应能力(Learning and Adaptability):Agent可以根据过去的经验积累知识,并且修改其行为以适应新的环境.另外,有些学者还提出Agent应该具有自适应性,个性等特性.诚实(Veracity):假定Agent不会故意提供错误信息.善意(Benevolence):假定在Agent之间不会存在相互冲突的目标,且Agent总是尽力去帮助其它Agent.理性(Rationality):假定Agent总是尽力去实现自己的目标.2.3Agent的适用领域与用户有灵活的相互作用,在互相作用中智能地协助用户完成琐碎的工作.在对海量分布式信息搜索中,建立快速智能的搜索机制.在高度动态的环境下,要求应用程序能对多边的环境作出响应或自适应.需要应用程序能自主处理失效或冲突,以进行在调度,再计划或资源再分配.需要应用程序既能进行长期计划驱动的行为,又能从事短期试试响应行为.在复杂的或安全性很重要的应用程序中,保证适宜的反应和应答时间.在地理上或逻辑上分布,自主或异构的节点间提供应用服务或中间件服务.在不完全信息下的复杂或分散的资源分配问题.2.4agent技术的标准化FIPA(Foundation for Intelligent Physical Agents)是一个由IBM,NHK,BT等公司和政府,学术机构组成的权威的Agent标准化组织(),目前该组织正致力于以下三个主要领域的标准制定:Agent管理需要认同和发现Agent(白,黄页服务),需要定义它们的各种状态以及哪些角色能与它们相互作用.Agent相互作用覆盖最高层Agent间相互作用的标准,包括Agent 间传递的信息的意义,命令,请求,义务等.Agent与软件的接口.此外FIPA还制定了4个参考应用领域的标准,包括个人旅行助手,个人助手,声/视娱乐广播,网络管理等.正在制定的标准包括人类Agent的相互作用,产品设计与制造Agent,Agent安全管理,支持移动性的Agent管理,Ontology(共享语汇)服务,Agent消息传送,Agent命名,内容语言库等.尽管FIPA标准仍在制定和发展之中,但是随着越来越多组织的加入,它必将称为促进Agent应用和发展的主要推动力.第三章JADE平台介绍3.1JADE平台简介JADE(Java Agent Development Framework)是一个软件开发框架,用于开发多Agent系统和符合FIPA标准的智能Agent应用程序.它包含两个主要的产品:一个符合FIPA标准的Agent平台和一个开发JAVA Agent的包.JADE完全是由JAVA编写的,由各种JAVA包组成,它为应用程序员既提供现成的功能片断,同时也为自定义的应用程序任务提供抽象接口.由于JAVA的许多良好的特性,它是一种很特别的编程语言,特别是它在分布式的不同环境中的面向对象编程方法,例如对象序列化(Object Serialization),反映性API(Reflection API)和远程方法唤醒(Remote Method Invocation RMI).JADE主要由下面的包组成:jade.core实现系统的核心.它包含必须被应用程序员继承的Agent类,除此以外,jade.core.behaviours子包还包含一个Behaviour类层次结构.行为实现了一个Agent的任务或意图.它们是逻辑活动单元,并且可以以不同的方式组合,以获取不同的执行方式,当然,它们是可以并行执行的.应用程序员定义Agent的操作,编写行为以及Agent的执行路径.ng.acl子包用于依照FIPA标准规定处理Agent通讯语言(ACL).jade.content包包含了一组类用于支持用户定义的概念和语言.jade.domain包包含了所有那些由FIPA标准定义的,描述Agent 管理实体的JAVA类,特别是AMS和DFAgent,它们提供生命周期服务和白黄页服务.子包jade.domain.FIPAAgentManagement包含了FIPA Agent管理的概念和描述其概念的类.子包jade.domain.JADEAgentManagement则包含了JADE对Agent管理的扩展(例如,对消息的探测以及控制Agent的生命周期).子包jade.domain.introspection包含了用于描述在JADE工具和JADE内核之间沟通领域的概念.子包jade.domain.mobility包含了描述移动通信的概念.子包Jade.gui包含了一组一般的类,用于建立用户图形界面,用来显示和编辑Agent标识符,Agent描述,ACL消息……jade.mtp包包含了一个JAVA接口.为了容易用JADE框架集成,每个消息传送协议必须利用这个接口,它还包含了一组这些协议的执行.jade.proto包包含了建模标准交互协议的类(如:fipa-request, fipa-query, fipa-contract-net, fipa-subscribe和其他一些被FIPA定义的类),同时也包含了帮助应用程序员建立自定义的协议的类.3.2JADE的特点下面是JADE提供给Agent编程人员的JADE特点列表:-分布式Agent平台.Agent平台可以分散在几个主机上(假设它们可以通过RMI连接起来).-从远方主机用图形用户界面来管理Agent和Agent容器.-在开发基于JADE的多Agent应用程序时,可以利用调试工具.-平台内的Agent移动性,包括传递Agent的状态和代码(当需要的时候).-通过行为模型,对多个平行,并行的Agent活动的支持.JADE以无优先权的方式对Agent行为进行调度.-FIPA标准的Agent平台,包括AMS(Agent管理系统),DF(目录服务),和ACC(Agent通讯通道).这三个组成部分在Agent平台启动时被自动激活.-为了多域的应用程序,许多FIPA标准的DF在运行时可以被启动.在程序中,每个域是一组逻辑Agent,它们提供的服务通过一个公共的设备被公布出来.每个DF继承了GUI和所有由FIPA定义的标准功能(即,注册,注销,修改,搜索Agent标识符的功能和在网内连接DF的功能).-在同一个Agent平台内有效率的ACL消息传输.事实上,消息在传送时是以JAVA对象被编码,而不是字符串,这样是为了避开编组和未编组的程序.当消息跨越平台边界的时候,它们被自动转换为FIPA 标准的语法,编码方式,传输协议或反之.这种转换对于Agent执行者来说是透明的,它们只需要处理JAVA对象.-FIPA交互协议库是现成可用的.-通过AMS,Agent可以自动进行注册和注销.-符合FIPA标准的命名服务:在启动时,Agent从平台上获取它们的GUID(全球唯一标识).-对应用程序定义的相关语言和概念的支持.-程序内接口,它允许外部应用程序启动自治的Agent.3.3用JADE创建多Agent系统3.3.1Agent平台由FIPA定义的标准的Agent平台模式由以下几部分组成:Agent管理系统(AMS)是负责监督管理对Agent平台的访问和使用的Agent.在一个单独的平台上,只能有一个AMS.AMS提供白黄页服务,以及生命周期服务,它保留了一个Agent标识符目录(AID)和Agent状态信息.每个Agent必须在AMS注册,以获得一个有效的AID.目录服务(DF)是在平台上提供默认的黄页服务的Agent.消息传输系统,又叫做Agent通信通道(ACC),是控制平台内所有的信息交换,包括与远端平台进行信息交换的软件.图3-1JADE完全参照这个标准体系结构.因此,当一个JADE平台启动的时候,AMS和DF就自动被建立了,同时ACC模块允许消息进行传输.Agent平台允许建立在几个主机上.在每个主机上只有一个JAVA应用程序,当然也只有一个JAVA虚拟机(JVM)被执行.每个JAVA虚拟机是一个基本的Agent容器,它为Agent的执行提供一个运行环境,同时它允许几个Agent在同一个主机上并行的执行.主容器(main-container)是Agent容器,它包括AMS和DF,在那里注册RMI(它由JADE在内部使用).与主容器相关的其它容器,为任何一组JADE Agent的执行提供一个完整的运行环境.图3-23.3.1.1DF服务jade.domain.DFService利用一组静态方法来实现与一个标准的FIPA DF服务进行交互.它包含了从DF请求注册,注销,修改,搜索行为的方法.每个方法都有一个带有所有所需参数的版本,以及一个所有省略参数都是默认值的版本.注意,这些方法将会阻塞每个Agent活动直至行为被成功的执行或者掷出了一个jade.domain.FIPAException违例,也就是说直到会话的结束.在某些情况下,以不阻塞的方式执行这些方法可能会更方便.在这些情况下,jade.proto.AchieveREInitiator或者jade.proto.SubscriptionInitiator将与createRequestMessage(),createSubscriptionMessage(),decodeDone(), decodeResult()和decodeNotification()联合使用,这将简化向DF发送消息的准备,以及从DF接受消息时的解码.3.3.1.2AMS服务这个类与DFService类是成对的,它的服务是由一个标准的FIPA AMSAgent提供的,并且它的界面是与DFService完全一致的.注意JADE在调用setup()前和takeDown()返回以后分别自动调用注册和注销方法,所以一般的程序员不用去调用它们.但是在某些特定的环境下,程序员可能需要调用它们.3.3.2Agent类Agent类是用户自定义Agent的公共基类.因此,从程序员的角度看,一个JADE Agent仅仅是用户自定义的继承了Agent类的一个实例.这表现了特性的继承性,这种继承性主要体现在Agent平台间交互(注册,配置,远程管理),以及用以实现自定义的Agent行为的一组基本方法(如收发消息,使用标准交互协议,注册域,...).Agent的计算模型是多任务的,任务(或是行为)是并行执行的.每个由Agent提供的功能/服务应该作为一个或者多个行为被执行(参考3.4行为的执行).Agent基类内的调度对程序员是透明的,它自动管理行为的调度.3.3.2.1Agent生命周期图3-3根据FIPA中的Agent平台生命周期,JADE Agent可以处于这几个状态之一,它们在Agent类中用几个常量来表示.这些状态分别是:初始状态AP_INITIATED:Agent对象已经建立,但是还没有由AMS 注册,既没有名字,也没有地址,而且不能与其它Agent进行通讯.激活状态AP_ACTIVE:Agent对象已经由AMS注册,有正规的名字和地址,而且具有JADE的各种特性.挂起状态AP_SUSPENDED:Agent对象当前被停止.内部的线程被挂起,没有Agent行为被执行.等待状态AP_WAITING:Agent对象被阻塞,等待其它事件.内部的线程在JAVA 监控器上休眠,当条件满足时被唤醒(典型的情形是消息到达).删除状态AP_DELETED:Agent死亡.内部的线程的执行被终结,Agent不再在AMS上有注册信息.传送状态AP_TRANSIT:移动Agent移动至一个新的位置时进入这个状态.系统继续缓存将被送到这个新位置的消息.拷贝状态AP_COPY:这是JADE在Agent克隆时的一个内部状态.离开状态AP_GONE:这是JADE在移动Agent移至一个新的地点时的一个内部稳定状态.注意Agent只有在激活状态时才允许执行行为(也就是任务).注意如果任何一个行为调用doWait()方法,那么整个Agent及其所有的活动都被阻塞,而不仅仅是调用这个方法的行为.而block()方法是Behaviour类的一部分,这是为了挂起一个单独的Agent行为.3.3.2.2Agent内的通讯Agent类同样提供了一组用于Agent内通讯的方法.根据FIPA说明,Agent通过异步消息传输进行通讯,ACL消息的对象是交换的有效载荷.一些由FIPA定义的交互协议也是可由Agent活动调度的现成可用的行为,它们是jade.proto包的一部分.Agent.send()方法可以发送ACL消息.接收槽保留了正在接收消息的Agent的ID.这种方法调用对于Agent的位置来说是透明的,也就是说无论是本地或是远程的Agent,是平台负责选择最合适的地址和传输机制.3.3.2.3带有图形用户界面(GUI)的Agent一个构造为多Agent系统的应用程序仍然需要与它的用户进行交互.因此,在应用程序中有必要至少在某些Agent上提供GUI.虽然这可能引起一些问题,这主要是因为Agent自治特性和普通用户图形界面的反映性间的不匹配造成的.使用JADE时,JADE Agent采用的每个Agent一个线程的并发模式必须要与Swing并发机制配合使用. 3.3.3Agent任务.执行Agent行为为了响应不同的外部事件,Agent必须能够执行几个并行的任务.为了使Agent管理更加有效率,每个JADE Agent都由一个单独的执行线程组成,并且它的任务都是模型化的,可以作为Behaviour的对象来执行.同样可以执行多线程的Agent,但是JADE并没有对此提供特别的支持.想要执行一个基于Agent的任务的开发者应该定义一个或者更多Behaviours子类,实例化它们,并把任务对象添加到Agent任务列表中.类Agent是必须由Agent程序员继承的,提供了两个方法:addBehaviour(Behaviour)和removeBehaviour(Behaviour),它们允许用来管理一个具体任务的就绪队列.注意行为和子行为可以在需要的时候添加进来,而不仅仅是在Agent.setup()方法内部.添加一个行为应该被看做在Agent内产生一个新的(合作)执行线程的方式.由Agent基类执行的调度程序对于程序员来说是透明的,对于就绪队列中所有有效的行为,它的调度策略是无优先权的时间片轮转法,执行Behaviour-derived类,直至释放控制权(这在action()方法返回时执行).如果任务没有放弃控制权,它将在下一次轮转是被重新调度.在等待消息到达时,行为同样可以被阻塞.具体的说,Agent调度程序执行就绪行为队列中每个行为的action()方法.当action()返回时,done()方法被调度,它用来检测行为是否完成.如果完成了,行为对象将从队列中删除.行为像合作线程一样工作,但是,没有保存任何栈.因此,整个运行状态必须被保留在Behaviour和它相关的Agent的临时变量中.为了防止在激活状态等待消息(这样会浪费CPU的时间),允许每个Behaviour阻塞它自己的运行.当action()方法返回时,block()方法就把行为放到阻塞行为队列中.注意,因此,阻塞的结果并不是在调用block()方法后立即体现出来,而是在action()方法返回后.在新的消息到达后,所有被阻塞的行为将重新被调度,因此程序员必须考虑再次阻塞与到达的消息不相关的行为.此外,一个行为对象可以通过向block()方法传递一个时间域值把自己阻塞一段有限的时间.在JADE后来的版本中,考虑了更多的唤醒事件.因为从Agent行为中进行选择时,采用的是无优先权的多任务模型,Agent程序员必须注意避免使用无限循环,以及在action()方法内部执行长的操作.记住,当某个行为的action()运行时,其它的行为都不能执行,直至action()结束(这当然只是考虑同一个Agent内的行为,其它Agent的行为是运行在不同的java线程内,当然可以继续独立的运行).除此以外,既然没有保存任何堆栈,每次action()方法都是从头开始运行,action()方法不可以在中间打断,也不可以把CPU让给其它的行为,然后从行为离开的位置,启动最初的那个行为.3.4交互协议FIPA规定了一组标准的交互协议,可以以它们作为标准模板来建立Agent间的对话.对于Agent间的每一次对话,JADE都区分了发起者(发起会话的Agent)和回应者(在与其它Agent取得联系后参与到会话中的Agent).JADE依据大部分的FIPA交互协议,为会话中的两个角色都提供了行为类.正如在这节中所描述的,这些类都可以在jade.proto包中找到.它们通过一个同类的API提供了回叫方法来处理协议的各个状态.所有的发起者行为一达到交互协议的某个最终状态,就会立即结束,并从Agent的任务队列中删除.为了不必重新建立新的java对象就能再次使用代表这些行为的java对象,所有的发起者都包含了一些带有合适参数的复位方法.此外,所有的发起者行为,不只是FipaRequestInitiatorBehaviour都可以进行一对多的会话,也就是。

相关文档
最新文档