Jade n'est pas destiné à un seul type d'agent, il te fournit un ensemble d' "outils" et c'est à toi de les utiliser pour développer des agents cognitifs
PS: je n'ai travaillé que sur des agents réactifs
Version imprimable
Jade n'est pas destiné à un seul type d'agent, il te fournit un ensemble d' "outils" et c'est à toi de les utiliser pour développer des agents cognitifs
PS: je n'ai travaillé que sur des agents réactifs
bonjour
comment sont géré les conditions dans jade
es qu'il propose une base de règle ou base de fait
merci
tu le lance à partie de la ligne de commande , ou directement à partir du GUI du JADE ,mais il faut que les classe de ton agents sont dans un dossier dont le chemin fait partie de la variable d'environnement classpath,Citation:
.je n'arrive pas a lancer l'agent B.
en d'autre terme, si les classe de l'agent sont dans le dossier c:\AgentLand il faut ajouter se chemin à la variable d'environnement classpath
j'ai pas compris ta 2e question
bonjour
es qu'il faut que les deux agents A et B soient dans le même dossier pour qu'ils puissent envoyer et recevoir des messages
parce que l'agent A est bien lance et il est en attente de l'agent B. mon problème est comment lance deux agent agents au même temps
merci
je veux dire les connaissances d'un agent comment sont présenté es que sous forme de règle de production
exemple si agent X fournit une offre avec un prix minimale alors agent Y accepte cet offre
merci
les deux agents ne doivent pas forcement être sur le même dossier,
comme je te l'ai déja dis, tu peux lancer une centaines d'agents en parallèle ou bien par la ligne de commande :
ou directement à partir du GUI du JADECitation:
java jade.Boot -container nomAgent:ClassAgnet
PS: il se peux que la commande ci dessus soit erronée, j'ai pas travaillé avec JADE depuis plus d'une année, et je l'ai pas actuellement sur ma machine
bonjour,
j'ai réussi à exécuter l'exemple de communication des agents en utilisant un agent lanceur.maintenant je veux qu'un agent A pose une question à l'agent B
et l'agent B répond à cette question.
le code de l'agent A est le suivant:
le code de l'agentB est le suivant:Citation:
public class AgentA extends Agent {
String question = (String)("");
public void setup(){
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(new AID("AgentB",AID.ISLOCALNAME));
message.setContent(question);
send(message);
doDelete();
}}
resultat:Citation:
public class AgentB extends Agent {
String reponse = (String)("");
public void setup(){
ACLMessage messageRecu = receive();
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(messageRecu.getSender());
message.setContent(reponse);
send(message);
doDelete();
}}
Citation:
Uncaught Exception for agent AgentB ***
java.lang.NullPointerException
at collaboration.AgentB.setup(AgentB.java:13)
at jade.core.Agent$ActiveLifeCycle.init(Agent.java:1490)
at jade.core.Agent.run(Agent.java:1436)
at java.lang.Thread.run(Unknown Source)
ERROR: Agent AgentB died without being properly terminated !!!
State was 2
j'ai quelques petites remarques qui peuvent t'aider à résoudre le problème:
l'instruction :
va tuer l'agent A des l'envoi du message donc il ne peux pas recevoir la réponseCode:doDelete();
l'agent B exécute tous son code et n'attend pas l'arrivé du message; voici comment le faire:
http://djug.developpez.com/java/jade/communication/#LV
il faut lancer l'agent B avant l'agent A ,parce que l'agent B va contenir l'instruction
qui l'oblige à attendre, contrairement à l'agent A qui va envoyé le message avant même la création de l'agent B, donc il sera perduCode:block();
bonjour
j'ai enlevé la méthode doDelete() de l'agent A et j'ai ajouté la méthode block() à l'agent B.mais comment je lance l'agent B avant l'agent A
merci
bonsoir,
j'ai modifié les codes d'exemple de communication des agents pour que l'agent A pose une question et l'agent B répond à cette question. j'ai utilisé un agent lanceur qui va lancer mes agents.voilà le code de mes agents:
Citation:
package compA;
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 Seq1 extends Agent {
protected void setup(){
System.out.println("---------------------------------------");
System.out.println("----------------Seq1----------------");
System.out.println("---------------------------------------");
FSMBehaviour Seq1_beh= new FSMBehaviour();
Seq1_beh.registerFirstState(new attendreSeq2(), "attendreSeq2");
Seq1_beh.registerState(new envoiQuestion(), "envoiQuestion");
//Seq1_beh.registerState(new attendrereponse(), "attendrereponse");
Seq1_beh.registerLastState(new fin(), "fin");
Seq1_beh.registerDefaultTransition("attendreSeq2", "envoiQuestion");
Seq1_beh.registerTransition("envoiQuestion","attendreSeq2",0);
//Seq1_beh.registerTransition("envoiQuestion","attendrereponse",1);
Seq1_beh.registerTransition("attendreSeq2", "fin", 2);
addBehaviour(Seq1_beh);
}
private class attendreSeq2 extends OneShotBehaviour{
@Override
public void action() {
System.out.println("en attente de l agent Seq2");
block();
}
}
/*****************************************************************/
private class envoiQuestion extends OneShotBehaviour{
int valeurRetour = 0;
@Override
public void action() {
ACLMessage messageRecu = receive();
if (messageRecu.getContent().equalsIgnoreCase("pret") ) valeurRetour=0;
else valeurRetour=1;
String question = (String)("..............");
System.out.println("envoi de la question= "+ question);
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(messageRecu.getSender());
message.setContent(question+"");
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();
}
}
}
j'ai obtenu le résultat suivant:Citation:
package compA;
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 Seq2 extends Agent {
boolean stop = false;
protected void setup(){
System.out.println("----------------Seq2----------------");
FSMBehaviour Seq2_beh= new FSMBehaviour();
Seq2_beh.registerFirstState(new attendrequestion(), "attendrequestion");
Seq2_beh.registerState(new afficher(), "afficher");
Seq2_beh.registerState(new fin(), "fin");
Seq2_beh.registerTransition("attendrequestion", "afficher",0);
Seq2_beh.registerTransition("attendrequestion", "fin",1);
Seq2_beh.registerDefaultTransition("afficher", "attendrequestion");
addBehaviour(Seq2_beh);
}
private class attendrequestion extends OneShotBehaviour{
int valeurRetour = 0;
public void action() {
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(new AID("Seq1", 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();
String reponse=(String)("..............") ;
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.setContent(reponse);
send(message);
System.out.println("la reponse = "+reponse);
stop=true;
}
}
/**********************************************************************/
private class fin extends OneShotBehaviour{
@Override
public void action() {
System.out.println("fin de l'agent");
myAgent.doDelete();
}
}
}
merci de m'aiderCitation:
l'agent SimpleAgent va lancer les deux agents AgentA et AgentB
---------------------------------------
----------------Seq1----------------
---------------------------------------
en attente de l agent Seq2
----------------Seq2----------------
envoi de la question= ..............
en attente de l agent Seq2
la reponse = ..............
envoi de la question= ..............
fin de l'agent
ERROR: Agent Seq1 died without being properly terminated !!!
State was 2
21 déc. 2010 19:37:04 jade.core.messaging.MessagingService boot
INFO: MTP addresses:
http://sweet-74721f200.lan:2211/acc
21 déc. 2010 19:37:04 jade.core.AgentContainerImpl joinPlatform
INFO: --------------------------------------
Agent container Container-1@192.168.1.64 is ready.
--------------------------------------------
*** Uncaught Exception for agent Seq1 ***
java.lang.RuntimeException: Inconsistent FSM. State: envoiQuestion event: 1
at jade.core.behaviours.FSMBehaviour.handleInconsistentFSM(FSMBehaviour.java:377)
at jade.core.behaviours.FSMBehaviour.scheduleNext(FSMBehaviour.java:369)
at jade.core.behaviours.CompositeBehaviour.action(CompositeBehaviour.java:96)
at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:344)
at jade.core.Agent$ActiveLifeCycle.execute(Agent.java:1500)
at jade.core.Agent.run(Agent.java:1439)
at java.lang.Thread.run(Unknown Source)
bonjour
es que la seule méthode d'échanger des message entre les agents est d'utiliser les FSMBehaviour?
merci
FSMBehaviour concerne les comportement des agents et non pas la communication,
oui, il est possible d'utiliser des FSMBehaviour pour mettre en œuvre une série d'échanges entre les agents, mais tu peux également utiliser l'un des protocoles de communication/ négociation entre les agents (jet un coup d'œil sur la documentation officielle pour plus d'informations)
Bonjour,
Vous trouverez à cette adresse un exemple simpliste de déploiement d'une plateforme en local (4 agents, 1+3 conteneurs, 1 agent envoie un message et 1 autre l'attrape) avec des simpleBehaviours. Le code n'est pas beau, mais il essaye d'aller à l'essentiel. Le tout, directement depuis Eclipse.
http://www-desir.lip6.fr/~herpsonc/d...romEclipse.zip
En espérant que cela vous soit utile.
Bonjour,
Je me suis basé sur l'exemple des 2 agents qui communiquent (agentA, agentB) pour résoudre le problème du voyageur de commerce
AgentA exécute un algorithme génétique, et AgentB execute le Recuit Simulé.
Ces 2 algorithmes doivent s'executer l'un apres l'autre.
Lorsqu'un agent à terminé l'éxécution de son algo, il envoie un message à l'autre agent, qui peut alors executer le sien.
Le probleme est que lorsque j'utilise la fonction block(), il n'attend pas de recevoir un message. Donc j'ai un java.lang.NullPointerException.
Comment marche cette fonction block() ?
est ce qu'il faut refaire un message = receive() juste après ?
Est ce que ca veut dire que l'agent a bien reçu un message, mais qu'il n'arrive pas à le lire ?
Merci d'avance pour vos conseils
EDIT :j'ai réussi à "corriger" le probleme, avec :
Code:
1
2
3
4
5
6 ACLMessage messageRecu = receive(); while (messageRecu == null) { block(); messageRecu = receive(); }
Citation:
Bonjour à tous;
OK j'ai suivi tout ces étapes mais j'ai le même problème !!!
Mais j'ai déjaCode:
1
2
3
4
5
6
7
8
9
10 gent container Main-Container@super-com-PC is ready. ------------------------------------------- ello oving ... avr. 2011 08:14:42 jade.core.mobility.AgentMobilityService$CommandSourceSink h ndleInformMoved RAVE: Destination Container-1 does not exist or does not support mobility he agent has terminated its itinirary
Quelqu'un peut me dis ou le problème S.V.P !! ?Code:
1
2
3 INFO: -------------------------------------- Agent container Container-1@super-com-PC is ready. --------------------------------------------