TP3 - Sma
TP3 - Sma
TP3 - Sma
3
1. Introduction JADE
Chaque agent JADE possède une sorte de boite aux lettres qui
contient les messages qui lui sont envoyés par les autres agents.
Ces boites aux lettres sont sous forme d'une liste qui contient les
4
2. - Format d'un message JADE JADE
5
2. - Format d'un message JADE JADE
Ces messages sont composés en général de :
message.
agents simultanément.
4. Le contenu du message.
6
3. L'envoi d'un message JADE
Pour envoyer un message, il suffit de remplir les champs nécessaires
(l'ensemble des récepteur et le contenu du message et l'acte de communication)
d'un message JADE, puis d'appeler la méthode send() de la classe Agent.
Voici un exemple d'envoi d'un message JADE
Ce message est envoyé à l'agent appelé master-ai pour lui dire bonjour.
7
4. La réception d'un message JADE
La réception d'un message est aussi simple que l'envoi. Il suffit
d'appeler la méthode receive() de la classe Agent pour récupérer le premier
message non encore lu de l'agent.
Exemple :
8
5. L'attente d'un message JADE
Il se peut qu'un agent doive effectuer un certain traitement ou lancer
quelques tâches après avoir reçu un message d'un autre agent. Il est possible
de faire une attente active jusqu'à l'arrivé du message de la manière suivante :
9
5. L'attente d'un message JADE
Mais ce genre d'attente active consomme énormément les ressources
de la machine sur laquelle l'agent s'exécute. On peut aussi bloquer un
Behaviour d'un agent jusqu'à la réception du message, et ceci grâce à la
méthode block() de la classe Behaviour.
Message = receive() ;
If (message == null) block();
//traitement à faire après avoir reçu le message.
10
6. Choisir un message de la boite aux lettres JADE
Lorsqu'un agent communique simultanément avec plusieurs agents, il
peut décider un moment de ne lire que les messages de la provenance d'un
agent particulier ou les messages ayant un acte de communication particulier.
Pour cela un agent peut définir un modèle de message à recevoir.
11
7. Exemple JADE
Voici un exemple de communication entre deux agents. Nous avons deux
• AgentA produit des nombres aléatoires puis les envois à AgentB qui
• Tant que la somme ne dépasse pas un certain seuil (50 dans l'exemple), il
12
7. Exemple JADE
AgentA.java
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();
}
}
AgentA.java 13
7. Exemple JADE
/*****************************************************************/
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();
}
}
}
AgentA.java 14
7. Exemple JADE
AgentB.java
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;
AgentB.java 15
7. Exemple JADE
private class attendrechiffre extends OneShotBehaviour{
int valeurRetour = 0;
AgentB.java 16
7. Exemple JADE
/**********************************************************************/
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();
}
}
}
N.B : L'annotation @Override doit être utilisée lorsqu'une méthode redéfinit la méthode de la
superclasse.
AgentB.java 17
8. Conclusion JADE
18