PDA

View Full Version : Chiarimento su JADE


marco-87
14-11-2010, 11:44
Ciao a tutti sono Marco. Vorrei chiedervi un aiuto sulla piattaforma JADE. Io sto utilizzando JADE per la mia tesi di laurea, ma nelle fasi iniziali sono incappato in un problema, secondo me molto banale, che purtroppo mi ha bloccato il lavoro.
Vi spiego il mio problema: io ho la necessità di far comunicare gli agenti di due piattaforme diverse, per cui come esempio, ho creato un'agente per ciascun piattaforma e gli ho fatto scambiare un semplice messaggio INFORM con l'altro agente, che poi a sua volta risponde con un REPLY; dalla GUI di JADE attraveso l'opzione ADD PLATFORM VIA AMS AID ho aggiunto la piattaforma remota in entrambi i pc e ho mandato in esecuzione il codice ma le due piattaforme non comunicano, se però clicco sull'agente mittente e faccio SEND MESSAGE, definendo mittente, destinario e messaggio, i due agenti cominciano a comunicare.Ovviamente questo non è giusto perchè i due agenti dovrebbero comunicare automaticamente, come avviene tra agenti della stessa piattaforma, senza bisogno che io dia questo "input".Io non penso che sia un problema di codice, anche perchè è molto semplice, per cui penso che sia un problema risolvibile a livello di GUI,o relativo agli indirizzi di rete (come pensa il mio relatore) ma non riesco a trovare la soluzione. Credo che sia veramente una cosa da nulla, che però non mi permette di andare avanti.Vi invio il codice così se avete la possibilità di dargli un'occhiata potreste suggerirmi una soluzione.Vi ringrazio anticipatamente e spero che mi possiate essere d'aiuto.

import jade.core.AID;
import jade.core.Agent;
import jade.lang.acl.ACLMessage;

public class Mittente extends Agent{
protected void setup() {
System.out.println("Agente "+getLocalName()+" inizializzato");
addBehaviour(new Azione_mittente());
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
AID destinatario = new AID("destinatario",AID.ISLOCALNAME);
msg.addReceiver(destinatario);
msg.setContent("Ciao destinatario");
send(msg);
}
protected void takeDown() {
System.out.println("Agente "+getLocalName()+" terminato");
}
}


import jade.core.behaviours.CyclicBehaviour;
import jade.lang.acl.ACLMessage

public class Azione_mittente extends CyclicBehaviour {
public void action() {
ACLMessage msg = myAgent.receive();
if (msg != null) {
System.out.println("Messaggio ricevuto da: "+msg.getSender().getLocalName());
System.out.println("Contenuto: "+msg.getContent());
}
else
block();
}
}

import jade.core.Agent;

public class Destinatario extends Agent{
protected void setup() {
System.out.println("Agente "+getLocalName()+" inizializzato");
addBehaviour(new Azione_destinatario());
}
protected void takeDown() {
System.out.println("Agente "+getLocalName()+" terminato");
}
}

import jade.core.behaviours.CyclicBehaviour;
import jade.lang.acl.ACLMessage;

public class Azione_destinatario extends CyclicBehaviour {
public void action() {
ACLMessage msg = myAgent.receive();
if (msg != null) {
String contenuto = msg.getContent();
if (contenuto.equalsIgnoreCase("Ciao destinatario")) {
System.out.println("Messaggio ricevuto da: "+msg.getSender().getLocalName());
System.out.println("Contenuto: "+msg.getContent());
ACLMessage reply = msg.createReply();
reply.setPerformative(ACLMessage.INFORM);
reply.setContent("Ciao mittente");
myAgent.send(reply);
}
}
else
block();
}
}

banryu79
14-11-2010, 19:26
Ti conviene modificare il post e ripubblicare il codice usando il tag CODE, ben identato, a beneficio dei lettori.
Per JADE purtroppo non so aiutarti.