Как добавить сообщения (целочисленные значения) от нескольких агентов в другой агент, используя 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 ответ
Я проверил ваш код, и агент получателя получает сообщение от всех агентов отправителя.
У меня есть несколько вопросов и замечаний:
Как часто агенты отправителя должны отправлять свой номер? Только один раз или циклически, по истечении заданного времени?
Ваш агент-получатель не суммирует полученные значения, он всегда сравнивает последнее полученное значение.
Лучше использовать эту структуру для логики, после получения сообщения:
if (msg_IncomingLoadDetails != null) { // your logic } else { block(); }
это может помочь предотвратить некоторые проблемы, такие как NullPointerException