我在JADE中有以下要求。 我必须创建多个代理,其任务是生成随机数。另一个接收代理收集生成的所有随机数并将它们相加以做出决定。 这是发送方代理类扩展tickerbehaviour及其tick onTick方法如下
protected void onTick()
{
ACLMessage msg_LoadDetails = new ACLMessage(ACLMessage.INFORM);
msg_LoadDetails.addReceiver(new AID("LoadCoordinator", AID.ISLOCALNAME));
msg_LoadDetails.setContent(String.valueOf(getLoad()));
LoadConv.send(msg_LoadDetails);
//load = (int)(Math.random()*1000+1);
}
接收器类扩展循环行为,其动作方法如下
public void action()
{
ACLMessage msg_IncomingLoadDetails = LoadCoordinator.receive();
if(msg_IncomingLoadDetails!=null)
totalLoad = Integer.parseInt(msg_IncomingLoadDetails.getContent());
if(totalLoad>500)
{actioncommand = "off";}
else
{actioncommand = "on";}
System.out.println("The current load is:" +totalLoad+ "; the load will be switched " +actioncommand);
block();
}
这里的问题是收到的值仅适用于我创建的一个代理(来自控制台)。我想接收所有已创建代理的值。这是否需要我创建一系列代理?如何从许多代理消息中读取值?如果我是JAVA和JADE的新手,有人可以帮忙解决这个问题吗?
答案 0 :(得分:3)
我测试了您的代码,接收代理从所有发件人代理处获取消息。
我有一些问题和评论:
发件人代理发送号码的频率如何?在给定时间之后,只有一次或周期性?
您的接收方代理不对收到的值求和,他总是比较上次收到的值。
收到消息后,最好将此结构用于逻辑:
if (msg_IncomingLoadDetails != null) {
// your logic
} else {
block();
}
它可以帮助防止一些问题,如NullPointerException