Java 如何使用JADE在另一个代理中添加来自多个代理的消息(整数值)
我对玉有以下要求。 我必须创建多个代理,其任务是生成随机数。另一个接收代理收集生成的所有随机数,并将它们相加以做出决定。 这是sender代理类扩展了tickerbehaviour,其tick-onTick方法如下Java 如何使用JADE在另一个代理中添加来自多个代理的消息(整数值),java,agents-jade,multi-agent,Java,Agents Jade,Multi Agent,我对玉有以下要求。 我必须创建多个代理,其任务是生成随机数。另一个接收代理收集生成的所有随机数,并将它们相加以做出决定。 这是sender代理类扩展了tickerbehaviour,其tick-onTick方法如下 protected void onTick() { ACLMessage msg_LoadDetails = new ACLMessage(ACLMessage.INFORM); msg_
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();
}
接收器类扩展循环行为及其作用方法如下
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,请有人帮我编写代码好吗?我测试了您的代码,接收方代理从所有发送方代理获取消息 我有一些问题和意见:
if (msg_IncomingLoadDetails != null) {
// your logic
} else {
block();
}
它可以帮助防止一些问题,如NullPointerException勾选行为每5s执行一次勾选方法。我知道这不是价值的总和。我想知道如何从所有代理接收值,然后求和代理。receive()方法接收代理队列中最早的消息。我创建了2个发送方代理,每个代理每5秒发送一个随机整数。接收方从两个发送方接收消息,下面是我的控制台的日志:这是这样工作的:发送方和接收方代理启动,接收方尝试获取消息,但队列为空。所以他的行为阻碍了他,并在等待信号。然后两个发送者都发送他们的号码。接收者收到新消息的信号并触发其行为。它在队列中找到消息,获取并显示它。然后,再次触发行为,在队列中找到第二条消息,获取并显示它。