如何使用JADE从另一个代理中的多个代理添加消息(整数值)

时间:2016-05-09 15:41:43

标签: java agents-jade multi-agent

我在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的新手,有人可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

我测试了您的代码,接收代理从所有发件人代理处获取消息。

我有一些问题和评论:

  1. 发件人代理发送号码的频率如何?在给定时间之后,只有一次或周期性?

  2. 您的接收方代理不对收到的值求和,他总是比较上次收到的值。

  3. 收到消息后,最好将此结构用于逻辑:

    if (msg_IncomingLoadDetails != null) {
        // your logic
    } else {
        block();            
    }
    

    它可以帮助防止一些问题,如NullPointerException