ROBOT & AI

首页 | 新闻 | 产品 | 竞赛 | 学苑 | 读书 | 硬件 | 软件 | 智能 | 制作 | 项目 | 资源 | 论坛
 您的位置:首页 >> 智能 >> 智能体 >> 正文
站内搜索:   

使用 JADE 平台进行智能体开发

来源:  邓 学 字体:[ ]  2007-01-09

关键词:

2. jde.core.behaviours.CyclicBehaviour
这种类型的行为将循环执行。
3. Generic behaviours
一般行为包含一个状态位,并且由状态位决定执行不同的操作。当满足所给定条件时,行为结束。例如:

public class MyTwoStepBehaviour extends Behaviors
{
private int step=0;
public void action()
{
switch(step)
{
case 0:
//perform operation X
step++;
break;
case 1:
//perform operation Y
step++;
break;
}
}
public Boolean done()
{
return step==2;
}
}


操作X和Y依次执行一次,然后行为结束。JADE也提供了把以上几种简单的行为组合成复杂行为的能力。例如:顺序行为SequentialBehaviour, 并发行为ParallelBehaviour和有限状态机行为FSMBehaviou。
智能体通信
JADE智能体提供的最重要的特征之一就是其通信能力。通信过程中所采用的通信模式为图5所示的异步消息传递。也就是说,每个智能体都有一个消息队列,如果其他智能体需要与其通信时,JADE runtime就把相应消息投递到其队列中。当消息队列中出现消息时,相应的智能体被通知。这时是否对消息做出响应那就是程序员的事了。

图5
 
1. ACL语言
智能体是通过ACL(Agent Communication Language)语言进行通信的,而ACL是由FIPA制定的智能体互操作国际标准。ACL消息格式主要包括消息发送方﹑消息接收方﹑通信原语以及消息内容。在JADE中,消息是由jade.lang.acl.ACMessage类对象表示。
2. 发送消息
在JADE中发送消息非常简单,您只需使用Agent类的send方法即可。以下代码表明了如何向别名为Peter的智能体发出通知消息,告诉其今天下雨。

ACLMessage msg=new ACLMessage(ACLMessage.INFORM);
Msg.addReceiver(new AID("Peter",AID.ISLOCALNAME));
Msg.setLanguage("English");
Msg.setContent("Today it's raining");
Send(msg);


3. 接收消息
智能体通过receive方法就可以从其消息队列中接收消息。这个方法返回消息队列中第一条消息。如果队列为空,则返回null。
构造PingAgent 通过以上的一系列介绍,我们就开始建立PingAgent,清单一给出了部分源代码。

 package examples.PingAgent;
public class PingAgent extends Agent {

class WaitPingAndReplyBehaviour extends SimpleBehaviour {
private boolean finished = false;
public WaitPingAndReplyBehaviour(Agent a) {
super(a);
}
public void action() {
ACLMessage msg = blockingReceive();
if(msg != null){
ACLMessage reply = msg.createReply();
if(msg.getPerformative()== ACLMessage.QUERY_REF){
String content = msg.getContent();
if ((content != null) && (content.indexOf("ping") != -1)){
reply.setPerformative(ACLMessage.INFORM);
reply.setContent("pong");
}
}
send(reply);
}
}else{
System.out.println("No message received");
}
}

public boolean done() {
return finished;
}
}

protected void setup() {
DFAgentDescription dfd = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("AgentcitiesPingAgent");
sd.setName(getName());
sd.setOwnership("TILAB");
dfd.setName(getAID());
dfd.addServices(sd);
try {
DFService.register(this,dfd);
} catch (FIPAException e) {
System.err.println(getLocalName()+" registration with DF unsucceeded.
Reason: "+e.getMessage());
doDelete();
}
WaitPingAndReplyBehaviour PingBehaviour = new
WaitPingAndReplyBehaviour(this);
addBehaviour(PingBehaviour);

}
}


在清单1中,我们注意到PingAgent拥有一个WaitPingAndReplyBehaviour行为。这个行为的action方法很简单,它的逻辑主要是判断智能体是否收到了类型为QUERY_REF并且内容为"ping"的消息。在setup方法中,主要的操作是在DF中注册智能体。

4页 上一页 [1] [2] [3] [4] 下一页 

录入:master 点击:

[发表评论] [打印文章] [关闭窗口]  

原创文章属本站所有,转载请注明来源:Robotain.com  
相关文章

 网友评论(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

发表评论 昵称:

  

  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
最新推荐
热门文章
论坛精华
网站简介设为首页 加入收藏在线留言友情链接联系我们 - 广告服务 - 版权申明

Copyright © Robotain.com  all rights reserved  浙ICP备07003355号

版权所有 机器与智能网