云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 学习agent必备!最全的JADE程序员指南

学习agent必备!最全的JADE程序员指南

  • 62 次阅读
  • 3 次下载
  • 2025/5/6 8:11:43

3.3.5基于主题的通信

从JADE3.5版也支持基于主题的通信,除了给一个或多个接收者(addressed by name)发送消息,它还可以发送关于某一给定主体的消息。这种消息将被发给所有在该主题下注册它们的兴趣的agent。如果没有agent在一个主题下注册它的兴趣,给该主题发送消息怎没有任何影响(例如,收不到FAILURE回复)。应该注意一点,发送者agent不需要知道任何关于有哪个agent注册到该主题的信息。

基于主题的通信由jade.core.messaging.TopicManagementService实现,因此必须激活平台上所有的容器(见JADE管理员指南上的JADE Kernel services)。

为了有一个完全一致的API使得既能发送消息给既定的接收者又能发送关于给定的主题消息,主题由AID对象表示。TopicManagementHelper接口包含在jade.core.messaging包内,提供创建主题AIDs的便利方法,如果给出一个AID表示一个主题(isTopic()),也负责进行检查。给一个既定的主题发送消息,只要把主题AID添加到消息接收者中就可以了。因此一个关于“JADE”主题的消息可以通过下面这段代码来发送:

注册关于一个既定主题的接收消息通过TopicManagementHelper接口的register()方法来实现,例子如下:

典型地,当注册接收关于某一主题的消息时,处理这些消息的适当的行为要添加到agent中。MatchTopic()库方法已被添加到MessageTemplate类以便于关于某一给定主题的模板匹配消息的创建,例子如下:

3.4 agent任务,执行agent行为

一个agent必须能够执行若干个并行任务以相应不同的外部事件。为了有效管理agent,每个JADE agent由一个单独的执行线程组成,将所有任务建模,用Behaviour对象执行。多线程agent也可以执行,但JADE没有提供特殊的支持(除了同步的ACL消息队列)。

希望执行明确agent任务的开发者应该定义一个或多个Behaviour子类,实例化它们,并将它们添加到agent任务列表。Agent类必须由agent程序员进行扩展,方法有两种:addBehaviour(Behaviour)和removeBehaviour(Behaviour),可以用来管理特殊的agent的准备好的任务队列。注意:行为和子行为可以在需要的时候随时添加,而不是只在Agent.setup()方法中。添加行为应该被视为在agent内产生新的(合作的)执行线程。 由基础Agent类执行的,对程序员隐藏的安排程序,在准备好的队列中有效的所有行为之间按照一个循环的没有优先权的排序策略执行。执行一个Behaviour驱动的类直到它释放控制权(当action()方法返回时发生)。如果放弃控制权的任务仍然没有完成,将把它安排在下一轮。一个行为也可以进入休眠,等待一个消息的到达。详细地说,agent调度程序执行出现在准备好的行为队列中的每个行为的action()方法;当action()方法返回时,调用done()方法来检查该行为是否完成了它的任务。如果完成了,该行为对象从队列中移除。

行为就像合作的线程一样工作,但是没有堆栈保存。因此,整个计算状态必须维持例如各种Behaviour和它的相关Agent。 为了避免一个活动等待消息(浪费CPU时间),允许每个单独Behaviour休眠它自己的计算。一旦action()方法返回,block()方法就将行为放入休眠行为队列中。注意:调用block()方法后休眠效果并不能马上达到,但是只要action()方法返回后。一旦一个新的消息到底,所有休眠的行为就要从新安排,因此,程序员必须注意,如果一个行为对到达的消息没有兴趣,就要再次休眠该行为。而且,一个行为对象可以通过传递间隔时间值给block()方法使自己休眠有限的时间。未来JADE的释放,可能要考虑更多唤醒事件。

由于为agent行为选择了无优先权的多任务模型,agent程序员必须避免使用无端回线,甚至是action()方法内执行太长的操作。记住:当一些行为的action()正在执行的时候,其它行

为不能继续直到该方法结束(当然,这只是相对于同一个agent的行为来说的:其它agents的行为在不同的Java线程中运行,仍然可以独立执行)。

除此之外,因为没有堆栈竞争存在,每次action()方法都从开始执行:没有方法能在行为的action()方法中间打断它,分配CUP给其它行为,从原始行为开始的地方启动它。

例如,假设一个特定的操作op()一步完成太长,所以就分成三个子操作,命名为op1(),op2()和op3()。为了达到期望的功能,行为运行时必须第一次调用op1(),第二次调用op2(),第三次调用op3(),然后该行为必须被标记为结束。代码如下:

按照这个方法,agent行为可以描述为有限状态机,维持整个状态在不同的实例变量中。 当处理复杂的agent行为(作agent交互协议)时,用外部状态变量可能比较繁琐;所以JADE也支持合成技术,由各个简单的行为来建立更复杂的行为。

该框架准备好提供使用Behaviour子类,从而可以包含子行为并按照某些策略执行它们。例如:提供的SequentialBehaviour类,由每个action()引导,它一个接一个的执行它的子行为。 下面的图用UML类图示JADE行为:

从基础类Behaviour开始,类的层次在JADE框架的jade.core.behaviours包中定义。 下面完整地介绍所有这些类。 3.4.1 Behaviour类

这个抽象类为模拟agent任务提供了一个抽象基础类,为行为调度创建了基础,因为它允许状态转换(如:starting, blocking,restarting a Java behaviour object)。

block()方法允许暂停一个行为对象直到某个事件发生(典型地,直到消息到达)。这个方法不影响agent的其它行为,从而能够更好的控制agent的多任务处理。这个方法把行为放入暂停的行为队列中,一旦action()返回就执行。一旦新的消息到达,所有暂停的行为就重新排序。而且,行为对象可以通过传递时间间隔值(你毫秒为单位)给block()方法,使自己暂停有限的时间。在将来的JADE版本,将考虑更多的唤醒事件。一个行为可以通过调用它的restart()方法显式启动。

总之,当下列三个条件之一发生时,一个休眠的行为可以重新执行: 1. 这个行为所属的agent收到一条ACL消息。

2. 和这个行为相关的时间间隔由先前block()调用到期。 3. 这个方法的restart()方法显式调用。 该Behaviour类也提供了两个占位符方法,命名为onStart()和onEnd()。当有些行为在运行时行为执行之前或之后执行时,用户可以通过定义子类重写这些方法。 onEnd()返回一个int代表行为结束值。

应该注意:onEnd()在行为完成和并从agent行为池中移除之后调用。因此在onEnd()内调用reset()是不能循环重复由该行为代表的任务的;除此之外,该行为应该再次添加到agent,例子如下:

这个类也提供了一对方法来为行为获取和设置DataStore。DataStore是对行为间交换数据非常有用的仓库,例如,jade.proto.AchieveREInitiator/Responder类所做的。注意:当行为重置时,DataStore清空,所有包含的数据丢失。

搜索更多关于: 学习agent必备!最全的JADE程序员指南 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

3.3.5基于主题的通信 从JADE3.5版也支持基于主题的通信,除了给一个或多个接收者(addressed by name)发送消息,它还可以发送关于某一给定主体的消息。这种消息将被发给所有在该主题下注册它们的兴趣的agent。如果没有agent在一个主题下注册它的兴趣,给该主题发送消息怎没有任何影响(例如,收不到FAILURE回复)。应该注意一点,发送者agent不需要知道任何关于有哪个agent注册到该主题的信息。 基于主题的通信由jade.core.messaging.TopicManagementService实现,因此必须激活平台上所有的容器(见JADE管理员指南上的JADE Kernel services)。 为了有一个完全一致的API使得既能发送消息给既定的接收者又能发送关于给定的主题消息,主题由AID对象表示

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com