Communication JADE

Résolu
sassion Messages postés 25 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 23 août 2012 - 9 juil. 2012 à 21:10
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012 - 13 nov. 2012 à 11:44
Bonjour,

Vraiment je suis bloqué. j'ai un problème lors d'envoie de message. AVEC JADE
En fait, j'utilise 3 familles d'agents qui s’exécutent simultanément. mon problème est que il y a un conflit de message, un message envoyé par Agent1 doit être traité au niveau du comportement 2 de l'agent Agent2 alors que ce message arrive a l'agent Agent2 lorsque ce lui ci est entrain d’exécuter le comportement 1 donc le message en question sera mal traité ou bien je vais avoir des exceptions

Sil vous plait aidez moi
A voir également:

31 réponses

womar Messages postés 2 Date d'inscription lundi 4 juin 2012 Statut Membre Dernière intervention 10 juillet 2012
10 juil. 2012 à 18:31
voilà un exemple :

// send new msg
ACLMessage newmsg = new ACLMessage(ACLMessage.INFORM);
newmsg.addReceiver(AgentID.getAgentID());
newmsg.setContent("New msg");
newmsg.setConversationId("id msg");
newmsg.setReplyWith("Reply msg");
myAgent.send(newmsg);

// receive msg

MessageTemplate msgTemplate = MessageTemplate.and(MessageTemplate.and(
MessageTemplate.MatchPerformative(ACLMessage.INFORM),
MessageTemplate.MatchConversationId("id msg")),
MessageTemplate.MatchReplyWith("Reply msg"));
ACLMessage receivemsg = myAgent.receive(msgTemplate);
if (receivemsg != null) {
//
.....

}

3
womar Messages postés 2 Date d'inscription lundi 4 juin 2012 Statut Membre Dernière intervention 10 juillet 2012
10 juil. 2012 à 18:20
Bonjour,

est-ce que vous pouvez me monter le code java de ton envoie (send msg) et réception (receive msg).
merci
0
sassion Messages postés 25 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 23 août 2012
10 juil. 2012 à 18:37
Womar MERCI pour votre réponse voici un bout de code:
L'envoie de message:
private class prioriteD extends OneShotBehaviour{
int valeurRetour= 0;

public void action() {
MessageTemplate modele = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
ACLMessage msg = myAgent.receive(modele);
for(int i=1;i<=ldm.size();i++){
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(new AID("DM"+i, AID.ISLOCALNAME));
listeOrdreC();
try {
System.out.println("liste des conseillers ordonner a envoyer a DM"+i);
message.setContentObject(loam);
} catch (IOException e) {e.printStackTrace();}
send(message); valeurRetour=valeurRetour+1;
}
}

public int onEnd(){
return valeurRetour;
}
}

La reception de message:


private class ordonnerAcc extends OneShotBehaviour{

int valeurRetour =0;
ArrayList l=new ArrayList();

public void action() {
MessageTemplate modele = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
ACLMessage msg = myAgent.receive(modele);
if(msg!=null)
{
try {
ArrayList list=new ArrayList();
System.out.println("voici le contenu du message desordres"+msg.getContentObject());
System.out.println("je m'appelle"+myAgent.getLocalName());
String ch=myAgent.getLocalName();
ListIterator i=ai.ldm.listIterator();
While(i.hasNext()){
AgentDecideur a=(AgentDecideur)i.next();
if(String.valueOf(ch.charAt(2)).equals(String.valueOf(a.agId))){
l=(ArrayList) msg.getContentObject();
System.out.println("accoinatance sans ordre"+a.accointance);
list= ordonnerAcc(l,a.accointance);
a.accointance=o.copie(list);
System.out.println("accoinatance avec ordre"+a.accointance);
}
}
} catch (UnreadableException e) {e.printStackTrace();}
valeurRetour=1;
}
else{valeurRetour=0;block();
}
}
public int onEnd(){
return valeurRetour;
}
}
0
sassion Messages postés 25 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 23 août 2012
11 juil. 2012 à 10:21
est ce normal que si j'ai 4 agents de même type lors de l’exécution il m'affiche 2 fois seulement "Fin Agent" au lieu de 4??

est ce logique qu'a chaque exécution il m'affiche un ordre différent des messages??


S'il VOUS plait Aidez moi je suis pressé par le temps quel est l'idée qui m’échappe concernant le raisonnement de JADE.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012
5 oct. 2012 à 16:07
bonjour
voila mon code pour récupérer les paramètres d’agents???? lors l’exécution il ne m'affiche rien
S'il VOUS plait Aidez moi je suis pressé par le temps


package firstAgent;
import jade.core.Agent;
import jade.core.AID;

public class ParamAgent extends Agent {

private String Visage;
/**initialisation de l'agent */
protected void setup(){
System.out.println("Hello !AgentParametre"+getAID().getName()+"est pret");
Object[]args = getArguments();
if(args != null && args.length > 0){
Visage = (String) args[0];
System.out.println("le resultat est"+Visage);
}
else {
System.out.println("aucun visage");
// detruire l'agent
doDelete();
}
}

//netyage de l'agent
protected void takeDown(){
System.out.println("Agent"+getAID().getName()+"quitter");
}


}
0
sassion Messages postés 25 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 23 août 2012
5 oct. 2012 à 16:32
Bonjour happyranda
as-tu introduit les paramètres??
0
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012
5 oct. 2012 à 18:24
bonjour sassion

oui j'ai fais ça avec la commende java jade.Boot –gui smith:ParamAgent (vrai face)
dans run configuration - new configuration - arguments

mais y rien comme résultat

aide moi svp
merci
0
sassion Messages postés 25 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 23 août 2012
5 oct. 2012 à 20:39
j'ai exécuté votre code sans arguments est ça marche il m'affiche sans visage
peut être que la balise que tu écris pour les arguments est fausse.
0
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012
5 oct. 2012 à 22:16
re salut
oui je sais il m'affiche aucun visage c le message dans le quel ou l'argument est nul
if(args != null && args.length > 0)

else System.out.println("aucun visage");
donc il passe direct a else c sa le problem
0
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012
5 oct. 2012 à 22:23
BONJOUR
je veux l’exécute avec argument comment je peu faire ça ????

MERCI
0
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012
9 oct. 2012 à 00:33
bonjour
j'ai un problem mon programme ne m'affiche pas les arguments
il passe par par la boucle if
voila mon code

package firstAgent;
import jade.core.Agent;
import jade.core.AID;

public class ParamAgent extends Agent {
// valeur
private String Var;
// initialisation de l'agent
protected void setup() {
// message bienvenu
System.out.println("hello! agent parametre"+getAID().getName()+"lire");
//arguemt
Object[] args = getArguments();
if (args != null && args.length > 0) {
Var = (String) args[0];
System.out.println("prend la valeur"+Var);
}
else {
// Make the agent terminate immediately
System.out.println("non valeur");
doDelete();
}
}
// Put agent clean-up operations here
protected void takeDown() {
// Printout a dismissal message
System.out.println("agent parametre"+getAID().getName()+"terminer");
}
}
malgré quej'ai tapé dans l'onglet arguments le code suivant pour recupper les arguments:
gui jade.Boot nom agent: pakageagent.classeagent (parametres)
0
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012
9 oct. 2012 à 00:41
bonjour
j'ai un problem mon programme ne m'affiche pas les arguments
il passe pas par la boucle if
voila mon code

package firstAgent;
import jade.core.Agent;
import jade.core.AID;

public class ParamAgent extends Agent {
// valeur
private String Var;
// initialisation de l'agent
protected void setup() {
// message bienvenu
System.out.println("hello! agent parametre"+getAID().getName()+"lire");
//arguemt
Object[] args = getArguments();
if (args != null && args.length > 0) {
Var = (String) args[0];
System.out.println("prend la valeur"+Var);
}
else {
// Make the agent terminate immediately
System.out.println("non valeur");
doDelete();
}
}
// Put agent clean-up operations here
protected void takeDown() {
// Printout a dismissal message
System.out.println("agent parametre"+getAID().getName()+"terminer");
}
}
malgré quej'ai tapé dans l'onglet arguments le code suivant pour recupper les arguments:
gui jade.Boot nom agent: pakageagent.classeagent (parametres)
0
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012
9 oct. 2012 à 00:44
bonjour

j'ai un problem mon programme ne m'affiche pas les arguments
il passe pas par la boucle if
voila mon code

package firstAgent;
import jade.core.Agent;
import jade.core.AID;

public class ParamAgent extends Agent {
// valeur
private String Var;
// initialisation de l'agent
protected void setup() {
// message bienvenu
System.out.println("hello! agent parametre"+getAID().getName()+"lire");
//arguemt
Object[] args = getArguments();
if (args != null && args.length > 0) {
Var = (String) args[0];
System.out.println("prend la valeur"+Var);
}
else {
// Make the agent terminate immediately
System.out.println("non valeur");
doDelete();
}
}
// Put agent clean-up operations here
protected void takeDown() {
// Printout a dismissal message
System.out.println("agent parametre"+getAID().getName()+"terminer");
}
}
malgré quej'ai tapé dans l'onglet arguments le code suivant pour recupper les arguments:
gui jade.Boot nom agent: pakageagent.classeagent (parametres)


voila ce que m'affiche quand je l'execute


9 oct. 2012 00:37:26 jade.core.Runtime beginContainer
INFO: ----------------------------------
This is JADE 3.6 - revision 6032 of 2008/05/05 14:07:10
downloaded in Open Source, under LGPL restrictions,
at http://jade.tilab.com/
----------------------------------------
9 oct. 2012 00:37:26 jade.core.AgentContainerImpl init
ATTENTION: Automatic main-detection mechanism initialization failed (Error setting up multicast socket [nested java.net.SocketException: IP_ADD_MEMBERSHIP failed (out of hardware filters?)]). Mechanism disabled!
9 oct. 2012 00:37:27 jade.core.BaseService init
INFO: Service jade.core.management.AgentManagement initialized
9 oct. 2012 00:37:27 jade.core.BaseService init
INFO: Service jade.core.messaging.Messaging initialized
9 oct. 2012 00:37:27 jade.core.BaseService init
INFO: Service jade.core.mobility.AgentMobility initialized
9 oct. 2012 00:37:27 jade.core.BaseService init
INFO: Service jade.core.event.Notification initialized
9 oct. 2012 00:37:27 jade.core.messaging.MessagingService clearCachedSlice
INFO: Clearing cache
9 oct. 2012 00:37:28 jade.mtp.http.HTTPServer
INFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
9 oct. 2012 00:37:28 jade.core.messaging.MessagingService boot
INFO: MTP addresses:
http://randa-PC:7778/acc
9 oct. 2012 00:37:28 jade.core.AgentContainerImpl joinPlatform
INFO: --------------------------------------
Agent container Main-Container@randa-PC is ready.
--------------------------------------------
hello! agent parametreSmith@randa-PC:1099/JADElire
non valeur
agent parametreSmith@randa-PC:1099/JADEterminer

j'attend vous reponse svp aide moiiiiiiiiiiiiiiiiiiiiiiiiiiiii
0
womar2006 Messages postés 20 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 13 novembre 2012
9 oct. 2012 à 11:20
Bonjour,

l'agent n'est pas un objet vous pouvez pas injecté des arguments .
les agents communiquent entre eux en échangeant des messages.
Agent-RequestMsg :
...
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(votre id agent receiver);
message.setContent("votre message ici");
send(message);
...

Agent-ReceiveMsg :
...
ACLMessage messageRecu = receive();
...
Sysout(messageRecu.getContent());

...

pour plus d'info : http://perso.limsi.fr/jps/enseignement/examsma/2005/1.plateformes_3/index-Ferguen.html
http://djug.developpez.com/java/jade/communication/
0
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012
9 oct. 2012 à 20:24
bonjour ;
ok mais ce que je veut moi c récupérer un argument

merci
0
womar2006 Messages postés 20 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 13 novembre 2012
9 oct. 2012 à 23:29
Bonjour Happyranda,


Si vous voulez passez des arguments ou un flux d'information à un agent, vous pouvez utiliser un autre agent, par exemple utilise l'agent DummyAgent de Jade.
Est ce que c'est possible de m'expliquer votre algorithme ?

Cordialement,

womar.
0
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012
9 oct. 2012 à 23:37
bonjour ;

ben mon travail c'est realisé 3 agent le premeir agent envoi recuper une valeur ( par argument) aprés verifié cette valeur si supérieur a 0 alors en envois messsage a deuxeme agent pour dire "good detection" sinon envoi un message au troisième agent dit le "bad detection"

agent1
agent 2
agent 3
message ''good detection" entre agent1 et agent2 aprés verification d'arguemnt
sinon
message "bad detection" entre agent1 et agent3

voila le but de mon travail svp c possibe aideeeeeeeee moi
0
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012
9 oct. 2012 à 23:55
bonjour womar2006

j'ai bosoin ton aide dans mon travail

voila mon adress mail chikiouirima@yahoo.fr
aidé moiiiiiiiii svppppp

salutation
merciiiiii
0
womar2006 Messages postés 20 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 13 novembre 2012
11 oct. 2012 à 10:04
Salut,

en fait, pour passer des flux d'information à l'agent1, vous pouvez utilisé une interface graphique à l'agent1 ou utilisez l'agent DummyAgent de Jade.
le code de l'agent 1 est (si on utilise l'agent dummy) :

// receive msg
// filtre des msg entrant 
MessageTemplate msgTemplate = MessageTemplate.and( MessageTemplate.MatchPerformative(ACLMessage.INFORM),
MessageTemplate.MatchConversationId("id msg"));
ACLMessage receivemsg = myAgent.receive(msgTemplate);
if (receivemsg != null) {
  if(receivemsg.getContent() > 0 ){
    ACLMessage newmsg = new ACLMessage(ACLMessage.INFORM);
newmsg.addReceiver(Agent2ID);
newmsg.setContent("good detection");
newmsg.setConversationId("id msg");
myAgent.send(newmsg);
  } else {
         ACLMessage newmsg = new ACLMessage(ACLMessage.INFORM);
newmsg.addReceiver(Agent3ID);
newmsg.setContent("bad detection");
newmsg.setConversationId("id msg");
myAgent.send(newmsg);
  }

}



code de l'agent 2 et 3 :


MessageTemplate msgTemplate = MessageTemplate.and( MessageTemplate.MatchPerformative(ACLMessage.INFORM),
MessageTemplate.MatchConversationId("id msg"));
ACLMessage receivemsg = myAgent.receive(msgTemplate);
if (receivemsg != null) {
....
}



plus d'info méthode d'utilisation de l'agent dummy ici :http://perso.limsi.fr/jps/enseignement/examsma/2005/1.plateformes_3/index-Ferguen.html

cordialement
0
happyranda Messages postés 20 Date d'inscription samedi 7 mai 2011 Statut Membre Dernière intervention 13 novembre 2012
12 oct. 2012 à 01:12
bonjour,
j'ai un pb avec la communication entre les agents, le 1er agent effectue correctement l'envoie, mais le 2eme ne reçoit rien, càd que qd le 1er agent lance correctement par contre le deuxième ne lance pas .
si qlq peut m'aider j'en serait reconnaissante;
cordialement

ps : ma question comment en lance deux agents
0
Rejoignez-nous