Les communications des agents jade [Résolu]

cs_ghadouch 10 Messages postés lundi 6 décembre 2010Date d'inscription 11 février 2013 Dernière intervention - 10 avril 2011 à 11:45 - Dernière réponse : happyranda 20 Messages postés samedi 7 mai 2011Date d'inscription 13 novembre 2012 Dernière intervention
- 3 oct. 2012 à 09:13
Bonjour à tous,
je suis débutante en jade et j'essaye maintenant à comprendre comment faire communiquer des agents j'ai trouvé un exemple sur développer.com sur la communication d'un AgentA et un autre AgentB mais j'ai pas réussi à l'appliquer correctement je vais vous donner le code complet et les erreurs que j'ai obtenu:

Concernant l'agentA le code et le suivant:


import jade.core.AID;
import jade.core.Agent;
import jade.core.behaviours.FSMBehaviour;
import jade.core.behaviours.OneShotBehaviour;
import jade.lang.acl.ACLMessage;

public class AgentA extends Agent {

protected void setup(){

System.out.println("---------------------------------------");
System.out.println("----------------agent A----------------");
System.out.println("---------------------------------------");

FSMBehaviour agentA_beh= new FSMBehaviour();

agentA_beh.registerFirstState(new attendreAgentB(), "attendreAgentB");
agentA_beh.registerState(new envoiChiffre(), "envoiChiffre");
agentA_beh.registerLastState(new fin(), "fin");

agentA_beh.registerDefaultTransition("attendreAgentB", "envoiChiffre");
agentA_beh.registerTransition("envoiChiffre", "attendreAgentB",0);
agentA_beh.registerTransition("envoiChiffre", "fin", 1);

addBehaviour(agentA_beh);
}

private class attendreAgentB extends OneShotBehaviour{

@Override
public void action() {

System.out.println("en attente de l agent B");
block();
}
}
/*****************************************************************/
private class envoiChiffre extends OneShotBehaviour{

int valeurRetour = 0;
@Override
public void action() {

ACLMessage messageRecu = receive();
if (messageRecu.getContent().equalsIgnoreCase("pret") ) valeurRetour=0;
else valeurRetour=1;

int chiffre = (int)(Math.random()*10);
System.out.println("envoi de la valeur "+ chiffre);
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(messageRecu.getSender());
message.setContent(chiffre+"");
send(message);
}

public int onEnd(){
return valeurRetour;
}
}
/*****************************************************************/
private class fin extends OneShotBehaviour{

@Override
public void action() {
System.out.println("arret de l'agent");
myAgent.doDelete();
}
}
}

Ici j'ai aucun problème et ça fonctionne correctement et m'affiche dans le console le message suivant:

10 avr. 2011 10:28:30 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/
----------------------------------------
10 avr. 2011 10:28:34 jade.core.BaseService init
INFO: Service jade.core.management.AgentManagement initialized
10 avr. 2011 10:28:34 jade.core.BaseService init
INFO: Service jade.core.messaging.Messaging initialized
10 avr. 2011 10:28:34 jade.core.BaseService init
INFO: Service jade.core.mobility.AgentMobility initialized
10 avr. 2011 10:28:34 jade.core.BaseService init
INFO: Service jade.core.event.Notification initialized
10 avr. 2011 10:28:34 jade.core.messaging.MessagingService clearCachedSlice
INFO: Clearing cache
10 avr. 2011 10:28:34 jade.mtp.http.HTTPServer
INFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
10 avr. 2011 10:28:34 jade.core.messaging.MessagingService boot
INFO: MTP addresses:
http://192.168.1.2:7778/acc
---------------------------------------
----------------agent A----------------
---------------------------------------
en attente de l agent B
10 avr. 2011 10:28:35 jade.core.AgentContainerImpl joinPlatform
INFO: --------------------------------------
Agent container Main-Container@your-ab6cd29f8e is ready.
--------------------------------------------

Mais le problème avec l'AgentB :


import java.security.acl.Acl;
import jade.core.AID;
import jade.core.Agent;
import jade.core.behaviours.FSMBehaviour;
import jade.core.behaviours.OneShotBehaviour;
import jade.lang.acl.ACLMessage;

public class AgentB extends Agent {

int somme = 0;
boolean stop = false;
protected void setup(){
System.out.println("----------------agent B----------------");
FSMBehaviour agentB_beh= new FSMBehaviour();

agentB_beh.registerFirstState(new attendrechiffre(), "attendrechiffre");
agentB_beh.registerState(new afficher(), "afficher");
agentB_beh.registerState(new fin(), "fin");

agentB_beh.registerTransition("attendrechiffre", "afficher",0);
agentB_beh.registerTransition("attendrechiffre", "fin",1);
agentB_beh.registerDefaultTransition("afficher", "attendrechiffre");

addBehaviour(agentB_beh);
}
private class attendrechiffre extends OneShotBehaviour{

int valeurRetour = 0;

public void action() {
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(new AID("AgentA", AID.ISLOCALNAME));

if(!stop){
message.setContent("pret");
send(message);
valeurRetour=0;
block();
}else{
message.setContent("arret");
send(message);
valeurRetour=1;
}
}
public int onEnd(){
return valeurRetour;
}
}
/**********************************************************************/
private class afficher extends OneShotBehaviour{
@Override
public void action() {
ACLMessage messageRecu = receive();
somme+= Integer.parseInt(messageRecu.getContent());
System.out.println("message recu= "+ messageRecu.getContent());
System.out.println("la somme actuelle = "+somme);
if (somme > 50) stop = true;
}
}
/**********************************************************************/
private class fin extends OneShotBehaviour{
@Override
public void action() {
System.out.println("fin de l'agent");
myAgent.doDelete();
}
}
}

le Message d'erreur est le suivant:

10 avr. 2011 10:34:43 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/
----------------------------------------
10 avr. 2011 10:34:46 jade.core.BaseService init
INFO: Service jade.core.management.AgentManagement initialized
10 avr. 2011 10:34:46 jade.core.BaseService init
INFO: Service jade.core.messaging.Messaging initialized
10 avr. 2011 10:34:46 jade.core.BaseService init
INFO: Service jade.core.mobility.AgentMobility initialized
10 avr. 2011 10:34:46 jade.core.BaseService init
INFO: Service jade.core.event.Notification initialized
10 avr. 2011 10:34:46 jade.core.messaging.MessagingService clearCachedSlice
INFO: Clearing cache
10 avr. 2011 10:34:46 jade.mtp.http.HTTPServer
INFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
10 avr. 2011 10:34:46 jade.core.messaging.MessagingService boot
INFO: MTP addresses:
http://192.168.1.2:7778/acc
----------------agent B----------------
10 avr. 2011 10:34:46 jade.core.AgentContainerImpl joinPlatform
INFO: --------------------------------------
Agent container Main-Container@your-ab6cd29f8e is ready.
--------------------------------------------
*** Uncaught Exception for agent pierre ***
java.lang.NumberFormatException: For input string: "( (action ( agent-identifier :name pierre@your-ab6cd29f8e:1099/JADE :addresses (sequence http://192.168.1.2:7778/acc )) (ACLMessage) ) (MTS-error ( agent-identifier :name AgentA@your-ab6cd29f8e:1099/JADE ) (internal-error "Agent not found: getContainerID() failed to find agent AgentA@your-ab6cd29f8e:1099/JADE")) )"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)
at AgentB$afficher.action(AgentB.java:55)
at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:340)
at jade.core.behaviours.CompositeBehaviour.action(CompositeBehaviour.java:109)
at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:340)
at jade.core.Agent$ActiveLifeCycle.execute(Agent.java:1530)
at jade.core.Agent.run(Agent.java:1468)
at java.lang.Thread.run(Thread.java:662)
ERROR: Agent pierre died without being properly terminated !!!
State was 2

j'ai essayé pas mal de fois de résoudre le problème mais j'ai pas réussi, j'ai utilisé eclipse et j'ai mis chaque class dans un workspace distinct et je ne sais pas est ce c'est juste ou non.
s'il vous plait j'ai besoin de votre aides pour avancer un peux car j'ai un projet de SMA et je dois comprendre d'abord les notions de base.Donc si quelqu'un a une idée je serais très reconnaissante cordialement...
Afficher la suite 

5 réponses

Répondre au sujet
islammomo 1 Messages postés lundi 9 mai 2011Date d'inscription 17 mai 2011 Dernière intervention - 17 mai 2011 à 01:40
+3
Utile
Bjr,pr installé jade 4.0.1voici lé étapes:
Télécharger le fichier JADE-all-4[1].0.1.zip à partir du site :
http ://www.jade.tilab.com
ü Décompresser le fichier JADE-all-4[1].0.1.zip.
(Clique droit sur le nom du fichier puis cliquer sur Extraire vers JADE-all-4[1].0.1\)
ü Décompresser les fichiers (JADE-bin-4.0.1.zip, JADE-doc-4.0.1.zip, JADE-examples-4.0.1.zip, JADE-src-
4.0.1.zip).
ü Mettre à jour la variable CLASSPATH
– Clic droit sur poste de travail, choisir propriétés
– Cliquer sur l'onglet Avancé puis sur variables d'environnement,
– Une fenêtre intitulée « variables d'environnement » apparaît, dans la zone variables système,
chercher la variable d'environnement qui porte le nom CLASSPATH.
Si elle n’existe pas, cliquer sur Nouveau, puis taper CLASSPATH dans le champ Nom de la
variable, et taper le chemin du fichier jade.jar dans le champ valeur de la variable (C:\JADE-all-
4[1].0.1\JADE-bin-4.0.1\jade\lib, par exemple)
– Si elle existe, cliquer sur Modifier, puis dans le champ valeur de la variable taper « ; » suivi du
chemin du fichier jade.jar (C:\JADE-all-4[1].0.1\JADE-bin-4.0.1\jade\lib, par exemple)
– Valider par Ok.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de islammomo
happyranda 20 Messages postés samedi 7 mai 2011Date d'inscription 13 novembre 2012 Dernière intervention - 7 mai 2011 à 12:09
0
Utile
bonjour;
je travail sur un projet sma je veu installer la plateforme jade mais je ne sais pas comment l'installer jade 4.0.1 est ce que y quelque qui peu m'aidé
merci
Commenter la réponse de happyranda
cs_ghadouch 10 Messages postés lundi 6 décembre 2010Date d'inscription 11 février 2013 Dernière intervention - 20 mai 2011 à 02:59
0
Utile
si vous avez des questions concernant jade je suis à votre disposition ça me fait plaisirs car j'ai admiré ce domaine.
Commenter la réponse de cs_ghadouch
yosrarihani 4 Messages postés mardi 2 juin 2009Date d'inscription 10 août 2012 Dernière intervention - 10 août 2012 à 11:17
0
Utile
Bonjour,
je veux faire communiquer deux agents sur deux machines différentes sans utiliser l'interface graphique de JADE,merci de m'aider
Commenter la réponse de yosrarihani
happyranda 20 Messages postés samedi 7 mai 2011Date d'inscription 13 novembre 2012 Dernière intervention - 3 oct. 2012 à 09:13
0
Utile
bonjour
je veut créé 5 agents ,
agent1 dans contenair 1
agent2 dans contenair 1
agent3 dans contenair 1
agent4 dans contenair 2
agent5 contenaire 3
les trois premiere agents envoi une variable booleen soit 0 ,1
l'agent 4 reçoi ces valeurs si c valeur tous positive =1 ce derneir envoi un message ok a 5 agent si le contraire alors agent 4 envoi message not ok
Commenter la réponse de happyranda

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.