JADE: piccolo esempio di comunicazione tra agenti

Ecco un piccolo esempio di comunicazione tra agenti JADE.

Agente mittente

import jade.core.Agent;
import jade.core.AID; //libreria necessaria per definire il destinatario
import jade.core.behaviours.*;
import jade.lang.acl.*;

class mioBehaviour extends CyclicBehaviour {
public void action() {
ACLMessage reply = myAgent.receive(); //è l'agente che riceve la risposta
if (reply != null) //appena ricevo una sola risposta non vuota blocco l'agente
{
System.out.println("Ho ricevuto la risposta " + reply.getContent() + " dall'agente " + reply.getSender() );
}
block();
}
}

public class sender extends Agent {
public void setup() {
System.out.println("Agente " +getAID()+ " inizializzato");
ACLMessage msg  = new ACLMessage(ACLMessage.INFORM); //definisco il tipo di messaggio da inviare
msg.setContent("Antani"); //definisco il contenuto del messaggio da inviare
msg.addReceiver( new AID( "destinatario", AID.ISLOCALNAME) ); //destinatario è il nickname che ho assegnato all'agente che riceverà il messaggio
send(msg); //invio il messaggio
System.out.println("Ho inviato il messaggio " + msg.getContent());
addBehaviour(new mioBehaviour()); //ascolto eventuali risposte
}
}

Agente destinatario

import jade.core.Agent;
import jade.core.AID;
import jade.core.behaviours.*;
import jade.lang.acl.*;

class myBehaviour extends CyclicBehaviour {
public void action() {
ACLMessage msg = myAgent.receive(); //è l'agente che riceve la risposta
if (msg != null) //appena ricevo una sola risposta non vuota blocco l'agente
{
System.out.println("Ho ricevuto il messaggio " + msg.getContent() + " dall'agente " + msg.getSender());
ACLMessage reply = msg.createReply();
reply.setPerformative( ACLMessage.INFORM );
reply.setContent("Ricevuto");
myAgent.send(reply);
}
block();
}
}

public class receiver extends Agent{
public void setup() {
System.out.println("Agente " +getAID()+ " inizializzato");
addBehaviour(new myBehaviour());
}
}

Per prima cosa vengono inizializzati i 2 agenti. Successivamente l’agente mittente invia un messaggio all’agente destinatario. Quest’ultimo, alla ricezione del messaggio, elaborerà una risposta da inoltrare all’agente mittente.

Da notare che la ricezione dei messaggi viene gestita mediante dei CyclicBehaviour (ovvero dei behaviour che vengono eseguiti continuamente), proprio per fare in modo che l’agente rimanga in ascolto.

Se l’agente non riceve alcun messaggio il behaviour viene immediatamente arrestato fino alla ricezione del prossimo messaggio non vuoto. Ciò viene implementato attraverso l’istruzione block().

Il codice comunque dovrebbe apparire piuttosto chiaro (sono presenti diversi commenti).

Per ulteriori delucidazioni non esitate a contattarmi. A presto.

JADE: piccolo esempio di comunicazione tra agentiultima modifica: 2009-12-24T14:47:15+01:00da nazarenolatella
Reposta per primo quest’articolo