Рис.1.5. Запуск платформы JADE.
Каждый агент платформы JADE должен расширять базовый класс jade.core.Agent. В
простейшем случае агент может быть реализован следующим образом:
Коды агентов:
Пакет А (Агент А): /* * To change this template, choose Tools | Templates and open the template in the editor.*/ package A; import jade.core.Agent; import jade.core.AID; import jade.domain.AMSService; import jade.domain.FIPAAgentManagement.*; import jade.core.behaviours.*; import jade.lang.acl.*; /** * * @author TRSteep */ public class AMain extends Agent { public void setup() { System.out.println("Привет! агент "+getAID().getName()+" готов."); addBehaviour(new CyclicBehaviour(this) // Поведение агента исполняемое в цикле { public void action() { ACLMessage msg = receive(); if (msg!= null) { System.out.println(" – " + myAgent.getLocalName()+ " received: "+ msg.getContent()); } //Вывод на экран локального имени агента и полученного сообщения block(); //Блокируем поведение, пока в очереди сообщений агента не появится хотя бы одно сообщение } }); AMSAgentDescription [] agents = null; try { SearchConstraints c = new SearchConstraints(); c.setMaxResults(new Long(-1)); agents = AMSService.search(this, new AMSAgentDescription(), c); } catch (Exception e) { System.out.println("Problem searching AMS: " + e); e.printStackTrace(); } for(int i=0; i<4; i++) { AID agentID = agents[i].getName(); ACLMessage msg = new ACLMessage(ACLMessage.INFORM); msg.addReceiver(agentID); // id агента которому отправляем сообщение msg.setLanguage("English"); //Язык msg.setContent("Ping"); //Содержимое сообщения send(msg); //отправляем сообщение } }} Пакет В (Агент В): /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package B; import jade.core.Agent; import jade.core.behaviours.*; import jade.lang.acl.*; /** * * @author TRSteep */ public class BClass extends Agent { protected void setup() { System.out.println("Привет! агент "+getAID().getName()+" готов."); addBehaviour(new CyclicBehaviour(this) { public void action() { ACLMessage msg = receive(); if (msg!= null) { System.out.println(" – " + myAgent.getLocalName() + " received: " + msg.getContent()); //Вывод на экран локального имени агента и полученного сообщения ACLMessage reply = msg.createReply(); reply.setPerformative(ACLMessage.INFORM); reply.setContent("Pong"); //Содержимое сообщения send(reply); //отправляем сообщения } block(); } }); }} |
Рис 1.6. Диаграмма взаимодействия межу агентами.
PingAgent - очень простой агент, дожидающийся сообщений. Если сообщение REQUEST с контентом PING получено, сообщение INFORM с подтверждением PONG посылается назад. Если же получено любое другое сообщение, назад отправляется сообщение NOT_UNDERSTOOD.