智能软件开发_第1页
智能软件开发_第2页
智能软件开发_第3页
智能软件开发_第4页
智能软件开发_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、智能软件开发,4、多智能Agent系统,多智能Agent系统 多智能Agent系统的协作策略 多智能Agent系统的部件设计 多智能Agent系统的内核构成 多智能Agent系统的接口,多智能Agent系统,定义:能进行问题求解,能随环境改变而修改自己行为,并能通过网络与其它Agent通信、交互、协作、协同完成求解统一问题的分布式智能系统。,多智能Agent系统,六个基本特征: 1)功能控制范围 2)集成系统操作手段 3)系统控制位置 4)集成机制 5)组成 6)类型,多智能Agent系统,研究现状 研究核心: 一组自治Agent之间智能行为的协作与协调。 从协作的观点转向从单个Agent的角

2、度来考虑更一般的问题: Agent应有什么样的结构、能力在有限时间约束、开放的多主体环境中自主行动、决策与其它Agent交流? 从DAI到M-Agent M-Agent的开放性 开放 模块 适应,M-Agent的协作策略,Agent协作是区别其它研究领域的关键性概念之一。 协调是一组Agent完成一些集体活动时相互作用的性质。 协调是对环境的适应; 协调一般改变Agent的意图; 协调的原因是由于其它Agent的意图存在。 协作是非对抗的Agent之间保持行为协调的一个特例。 在开放动态的多Agent环境下,不同目标的多个Agent必须对其目标、资源的使用进行协调; 在出现资源冲突时,没有很好

3、的协调,就有可能出现死锁; 单个Agent无法独立完成目标,需要其它Agent的帮助,这时就需要协作。,M-Agent的协作策略,Agent的交互有负关系和正关系。 负关系导致冲突,对于冲突的消解构成协调。 正关系表示主体的规划有重叠部分,或某个Agent具有其它Agent不具备的能力,各Agent通过协作获得帮助。 多Agent之间的协作情形大致可分为: 协作型:同时将自己的利益放在第二位; 自私型:同时将协作放在第二位; 完全自私型:不考虑任何协作: 完全协作型:不考虑自身利益: 协作与自私相混合型。,M-Agent的协作策略,”因需设岗,竞争上岗”: 根据目标及协作的需要而设定恰当的岗位

4、并配备相应的角色,而希望参与协作的竞争者则通过竞争获得能胜任的岗位并扮演相应的角色。 协作过程: 产生需求、确定目标, 协作规划、求解协作结构, 寻求协作伙伴, 选择协作方案, 实现目标, 评估结果。,M-Agent的协作策略,在多Agent协同工作环境下(下图 ), Agent可以是智能体(如专家系统)、非智能体(如常规程序);可以是数据库、知识库、方法库、模型库等,在协同工作时不仅有具体的领域专家,而是由社会学家、心理学家、计算机专家等共同参与。多Agent协同工作,使计算机资源(硬件、软件、数据仓库、知识库等)实现真正的、最大的共享。不同历史时期及不同设备上的硬、软件资源,尤其是用不同的

5、语言编写的应用程序(智能的、非智能的)均可以协同使用。,多智能Agent结构,Agent是一种混合结构,每个Agent 包含感知、动作、反应、建模,规划、通信、决策等模块。,多智能Agent结构,反应模块: 反应模块使Agent对紧急或简单的情况作出迅速反应,基本不作推理,直接由感知信息映射到某种行为。 如果使用知识库的方法,则反应模块由一系列规则构成: RULE-Ri : IF 感知信息条件子句 THEN 行动 具体可用神经网络来实现反应。神经网络的输入参数是数值化的感知信息和自身状态,输出参数是动作的编码。建立起神经网络后,经过大量样本的训练,使它对一些常见的情况可以作出比较合理的反应,然

6、后投入使用。这样在遇到紧急情况时,Agent在从感知到行为的映射过程实际上己经使用了大量的经验,所以一般会作出更合理的反应。,多智能Agent结构,规划模块: 负责建立中短期的行为计划。规划模块从目标集合、世界模型、其它Agent模型以及自身状态等数据结构中提取信息,经过局部规划器,产生出近期的动作序列,送交给决策模块。 局部规划: 一方面,每个Agent根据目标集合、自身的状态、自己对世界和其它Agent的模型,以及以往的经验规划自身的行为; 另一方面,Agent不需要对它的目标作出完全的规划,而只要生成近期的动作序列就可以了。,多智能Agent结构,建模模块两个功能: 维护和更新Agent

7、对世界和其它Agent所建立的模型; 根据当前感知的信息和模型对近期的情况作出预测,并提出行动的建议。 Agent最初从程序设计人员提供的模型库中得到关于世界的基本模型,然后在生存期间内,通过感知以及和其它Agent的通信修正模型。一方面模型被规划模块用来建立行动计划,另一方面,建模模块使用模型和当前感知信息预测将出现的情况,并将行动的建议提交给决策模块。,多智能Agent结构,通信模块: Agent根据词法库、语法库、语义库,对通信语言进行理解,并将一部分抽取的信息送交给决策模块(如其它Agent的请求信息)和建模模块(如其它Agent的信念信息)。对于一些基本的应答信息,则由通信模块直接作

8、出反应。决策模块生成的和其它Agent的协商和交互信息通过语言生成模块变成通信语言。,多智能Agent结构,决策模块: 它不对Agent中央控制,而是负责各个模块的协调工作。它的主要工作是冲突检查和消解,并决定当前的动作和通信。 输入:规划模块生成的行动计划; 建模模块的预测和行动建议; 通信模块的请求等。 。 处理:世界是随着时间的推移而变化的,原定的计划和当前的情况,以及其它Agent的请求会发生冲突,这时,决策模块根据规则对冲突进行消解。 任务的承接也由决策模块完成。任务一般以其它Agent的请求的方式进入决策模块。决策模块根据规则决定是否接受任务。如果接受,再决定其优先级,然后修改目标

9、集合,将任务放在适当的位置。如果不接受,则发消息给通信模块让它生成“婉拒”的通信语句。 输出:当前动作 修改指令 例如,一个汽车Agent正在按计划向预定目的地行驶时,感知另一汽车占据了原定要经过的一条单行道,建模模块因此建议汽车改道,这时决策模块根据规则,有两种解决方案:一种是先减速行驶,并发消息给规划模块让它重新规划;另一种是,如果时间充裕,则可以决定暂时停止计划的执行,等另一汽车离开单行道后再继续执行预定计划。,多智能Agent的内核,每个Agent由一个通用的Agent内核和许多功能模块构成。 Agent内核由以下部分组成: 内部数据库中包含Agent自身的信息、目标集合、世界的模型等

10、信息; 邮箱提供Agent和环境以及其它Agent的通信; 黑板提供Agent内部各个功能模块之间的通信; 执行机则完成消息分派、功能模块的执行控制等。 各个功能模块都是相对独立的实体,由执行机启动后即完全并行地执行,并通过黑板协调工作。感知、行动、反应、建模、规划、通信、决策生成等都以功能模块的形式加入Agent中。可以使用不同的编程语言、数据结构,只要支持同样的黑板格式就可以了.,多智能Agent的内核,内部数据库: 每个Agent对自身进行描述,主要包括: Agent自身的名字,邮箱地址等; Agent的能力(即它所控制度功能块)的名字及其描述(关键字、路径、 运行参数等等); 功能模块

11、当前的状态,功能模块可以处于运行态、准备好、完成或阻塞态; Agent的状态,Agent的状态可以是检查邮件箱、检查黑板、正在进行规划、正在进行推理或运行功能模块等等。 每个Agent都需要有一个对Agent社团的描述,该描述不是完整的描述,仅需要描述该Agent所能感知的信息。这些信息位于Agent内部数据库中,它们不是山系统开发人员预先定义的,而是在Agent的生存期间动态建立的。该信息是一些记录的集合。每个记录包括: Agent的名字 邮箱地址 与本Agent的关系 通信费用因子,多智能Agent的内核,AGENT类的定义如下: typedef struct capa /Agent能力结

12、构 char *name; /Agent能力名称 int type; /Agent能力的类型(可以有Built_ IN_FM, INVOKED_FM,EVERLASTING_FM三种) char *path; /对于Builtes_IN_FM是NULL;对于INVOKED_FM和EVERLASTING_FM为外部模块的运行文件路径 char *keywords; /能力的描述关键字 struct capa *next; CAPABILITY; typedef struct FM_queue /功能模块队列结构 int queue_id; /功能模块的唯一队列标识符 int stub_d; /请

13、求的存根号 char *request_agent; /请求的Agent名字 CAPABILITY *func: /对应当功能模块 int priority; /优先级 int status; /运行状态,有READY, RUNNING, FINISHED, BLOCKED等值 pid t fpid; /运行中的功能模块的PID char *argument; /运行参数 Struct FM_queue *next; /功能模块队列是一个双向队列 Struct FM_queue *prior; FM QUEUE; typedef sturct acquaintance /其它Agent的信息

14、char *agent; /Agent名称 char *url; /地址 int relationship; /和本Agent的关系因子 int cost; /通信费用因子 sturct addressbook *next; ACQUAINTANCE;,多智能Agent的内核,class AGENT /Agent类 private: FM_QUEUE *Queue head, *Queue tail;/功能模块队列第队首和对尾指针 ACQUAINTANCE *Acquaintance; /其它Agent的队列第首指针 Int Queue count; II前功能模块队列第长度 BBBUFFER

15、 *Blackboard;/黑板指针 Int Blackboardes key; /黑板关键字 Int Status; /Agent的状态 Public: Char *Name; /IAgent的名字 Char *Url; /Agent的地址 Char *Facilitator; /通信服务员的地址 CAPABILITY *Capabilities; /Agent的能力队列首指针 AGENT(Char *AgentDescriptionFile); /Agent构造函数 一 AGENT( ); /析构函数 void CheckMailboxQ;/检查邮箱函数 void CheckBBQ;/I检

16、查黑板函数 void Action);/l复合式Agent的内置功能模块:行动 void Planning();/复合式Agent的内置功能模块:规划 void Modeling();/l复合式Agent的内置功能模块:建模 void Decisiones Making();/复合式Agent的内置功能模块:决策生成 int SendMessage(char *ToWhom, char *Perfromative, char *Content);/发送消息 char *LookupAcquaintance(char *agentnaare);/在本地查找Agent地址 void UpdateA

17、cquaitance(char *agentname,char *url,int relationship,intcost);/更新或添加其它Agent信息 ;,多智能Agent的内核,执行机:管理的目标是功能模块。每个Agent执行相同的控制循环,步骤如下: 1)初始化:读入Agent定义文件;启动Agent通信;初始化黑板;初始化各种队列;将所有的EVERLASTING-FM以READY态加入功能模块队列。 2)检测邮箱,如果不空,取出第一条消息; 3)根据消息的类型执行相应的动作: 消息是INFORM类型,则将其内容放在黑板上以便所有的功能模块可以读取; 消息是REQUEST类型,则表示

18、对方请求本Agent的某个功能模块执行某个操作,如果该功能模块的状态是RUNNING,则将该消息通过黑板传递给它请求的功能模块;如果该功能还没有启动,则将该功能模块以READY态插入功能模块队列的尾部;如果该功能模块被BLACKED,则将它激活; 消息是INQU工RE类型,则表示要询问本Agent的能力或状态,这时应根据情况给出答复; 消息是RESULT类型,则表示是本Agent的内核或某个功能模块询问或请求的结果,应该根据情况保存或传递给相应的功能模块。如果该模块处于BLOCKED态等待这结界。则还要将它激活: 消息是HUTDOWN类型,则表示通信服务器要求本Agent中止运行。通常是操作人

19、员的意愿,一般应遵守,转第7步; 4)检测黑板,有消息需要发出,把该消息发出并为其附上适当的消息类型。如果是END-AGENT类型,表示某个功能模块请求Agent停止运行。如果接受这个请求,则转第7步: 5)检测功能模块队列,选择适当的功能模块执行,功能模块将在后台一直运行,直到它终止或被自身阻塞; 6)转到第2步: 7)停止运行,包括:如果还有功能模块在运行,则首先中止这些进程;向服务器发出通知并中止通信;保存信息,释放内存等。,多智能Agent的内核,状态转换 “静止态Static”就是该功能模块没有运行而只是停留在磁盘上时的状态。这个状态在FM-QUEUE中并不会出现,所以用虚线表示,

20、“就绪态Ready”就是Agent内核将该功能模块作为一个结点加入功能模块运行队列的尾部时的状态。这时该功能模块仍停留在磁盘上。 Agent内核执行机的第五步是“选择适当地功能模块执行”。同时可能有很多处于“就绪态”的功能模块,Agent内核将根据一定的规则(如优先级、请求Agent的关系因子等)选择一个功能模块执行,所以一个处于“就绪态”的功能模块并不一定立即被执行。直到Agent内核选择了它,它才会进入“运行态”,即真正作为一个进程出现。 功能模块运行结束后仍然回到“静止态, 如果功能模块需要等待一个请求的结果,它可以将自己阻塞起来,进入“阻塞态”。阻塞态的功能模块不能进行任何计算,一直到

21、它被激活。被自己阻塞的功能模块必须由Agent内核激活。在接收到对它的请求或者给它的结果时,Agent内核将激活它。被激活的功能模块直接恢复到运行态。,多智能Agent的接口,Agent内核与功能块之间的通信是通过黑板完成的。内核与功能模块的通信有一套标准的编程接口,使得功能模块可以很方便地实现和内核以及其它Agent的通信。这样做的意义在于,原来编制的任何程序只要做少量修改就可以作为任何一个Agent的功能模块。这使得用户不需要每次为Agent开发新的程序,从而很好地实现了软件的复用和移植。这正是“插件式”构造Agent的方法的核心精神。 更进一步,如果积累了大量的功能模块,那么可以形成一种

22、比“类库”更为高级的面向问题的“功能模块库”。这些模块可以随意组合到Agent内核上形成具有某种功能的Agent。,多智能Agent的接口,黑板: 一个Agent可以有多个功能模块,这些功能模块都是预先编译好的可执行文件。Agent内核也是一个可执行文件。它们运行在不同的地址空间中。它们之间交换信息必须通过共享内存或者共享文件的方式,由于共享内存操作比共享文件要快得多,而且更易于并发控制,所以采用共享内存的方式来传递Agent内核与功能模块,以及两个功能模块之间的消息。这块共享内存就是“黑板”。 黑板是一个很大的共享内存区域,其中划分为一些同样大小的区域。这些区域用来存放消息,称为“黑板条目”

23、。黑板条目的定义如下: typedef struct char flag; int type; int stop id; intqueue id; char destAGENTNAMESIZE; char contentCONTENTSIZE; IB_ ITEM; 其中:,多智能Agent的接口,flag:表示该条目当前是否正被使用,其值可以为USING和NOT USING; type:表示该条目中的信息的类型,通常由表示信息源和目的以及表示信息的功能的两部分组成。预先定义的值有: 表示信息源和目的的常量: FROM_KERNEL_TO_FUNC:从内核到功能模块 FROM_ FUNC_TO_

24、 KERNEL:从功能模块到内核 FROM_FUNC_TO_FUNC:从功能模块到(另一个)功能模块 表示信息的功能的常量: ENDFUNC:结束功能模块 TELL_PID:将功能模块的Pm通知内核 BLOCKFUNC:阻塞功能模块 ENDAGENT:结束功能模块,同时结束整个Agent RESULTTYPE:CONTENT中是结果信息 REQUESTTYPE:CONTENT中是请求信息 PINGAGENT:查看某Agent是否存在 FINDAGENT:按功能模块的关键字查找Agent OTHER:非保留类型,由功能模块解释,多智能Agent的接口,例如,功能模块要向内核通知Pm,使用的是FR

25、OM_ FUNC_TO_KERNEL|TELL_PID Stub_ id:是一个整型域,它在不同的消息类型之下有不同的意义:在RESULTTYPE和TEQUESTTYPE中,它表示结果或请求的存根号;在TELL_PID中,它表示功能模块的PID Queue id:用来指示功能模块在内核的执行队列中的位置。 Dest:用来存放一个Agent的名字 Content:用来存放消息的内容 黑板的结构定义如下: typedef struct int stub_count; char semaphore; BB_ITEM bb BBNUMBER; BBBIJFFER; 其中: stub count:用来记

26、录当前的存根号,以便生成新的唯一的存根号。 semaphore:是一个信号量,通过它可以封锁对黑板的读写,以避免因并发操作而引起的错误。它的值可以为USING和NOT_USING bb:是BBNUMBER个黑板条目的数组。,多智能Agent的接口,功能模块(Function Module,简称FM)是一些预先编译好的可执行文件,它们和Agent内核一起构成一个Agent。功能模块通过黑板和Agent内核或者其它功能模块交换信息。功能模块可以有两种类型: INVOKED FM:这种功能模块在Agent启动时并不同时启动,而只是登记一下他的存在。如果有别的Agent或者同一Agen,内的别的功能模块请求他的功能,则Agent内核负责启动它。一般说来(但是并不一定这样),这种功能模块在执行完

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论