2016-05-09 4 views
1

У меня есть следующее требование в JADE. Мне нужно создать несколько агентов, задача которых состоит в генерации случайных чисел. Другой агент-получатель собирает все генерируемые случайные числа и суммирует их для принятия решения. Это отправитель агент класс расширяет tickerbehaviour и его тик метод OnTick выглядит следующим образомКак добавлять сообщения (целочисленные значения) от нескольких агентов в другом агенте с использованием JADE

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?

ответ

2

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

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

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

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

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

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

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

+0

поведение клеща выполняет OnTick метод каждые 5 сек. Я знаю, что это не суммирует значения. Я хотел бы знать, как я могу получать значения от всех агентов, а затем суммировать их. –

+0

Метод Agent.receive() получает самое старое сообщение в очереди агента. Я создал 2 агента отправителя, каждый отправляет случайное целое каждые 5 секунд. И получатель получает от обоих отправителей, вот журнал с моей консоли: http://pastebin.com/D8sN1fUY –

+1

Это работает следующим образом: стартеры отправителя и получателя, получатель пытается получить сообщение, но очередь пуста. Поэтому его поведение блокирует и ждет сигнала. Затем оба отправителя отправляют свои номера. Приемник получает сигнал о новых сообщениях и вызывает его поведение. Он находит сообщение в очереди, получает его и показывает. Затем снова запускается поведение, находит второе сообщение в очереди, получает его и показывает. –

 Смежные вопросы

  • Нет связанных вопросов^_^