Как добавить сообщения (целочисленные значения) от нескольких агентов в другой агент, используя JADE

У меня есть следующее требование в 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 ответ

Я проверил ваш код, и агент получателя получает сообщение от всех агентов отправителя.

У меня есть несколько вопросов и замечаний:

  1. Как часто агенты отправителя должны отправлять свой номер? Только один раз или циклически, по истечении заданного времени?

  2. Ваш агент-получатель не суммирует полученные значения, он всегда сравнивает последнее полученное значение.

  3. Лучше использовать эту структуру для логики, после получения сообщения:

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

    это может помочь предотвратить некоторые проблемы, такие как NullPointerException

Другие вопросы по тегам