.
Prparation
du message
Envoi du message Bob
Alice Bob
Mise en file dattente dans la
bote de rception de Bob
Lecture et traitement
du message
Rception de messages
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Rception bloquante dun message :
La mthode ACLMessage m = blockingReceive()se
bloque jusqu ce quun message arrive. Lagent passe dans
ltat Waiting jusqu rception dun nouveau message.
TOUS les comportement seront arrts jusqu la rception dun
nouveau message.
Rception non-bloquante dun message :
La mthode ACLMessage m = receive()retourne null si la
file de message est vide
Lagent reste dans ltat Active
SON comportement reste activ, et sera excut de faon cyclique,
mme si aucun message na t reu
La solution : utiliser la mthode block(), qui suspend LE comportement
jusqu la rception dun nouveau message.
Rception de messages
Rception de messages (2/5)
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Utiliser blockingReceive() dans les mthodes setup() et
takeDown()
Utiliser receive() / block() dans le corps des Behaviours
Rception de messages (3/5)
ACLMessage receive = receive();
if(receive != null){
// Traitement du message
}
else{
block();
}
ACLMessage receive = blockingReceive();
// Traitement du message
Rception de messages
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Par dfaut, les mthodes blockingReceive() et receive()
rcuprent tous les messages prsents dans la bote de rception
Rception slective de messages
Utilisation de la classe MessageTemplate dfinie au sein du package
jade.lang.acl,
La classe MessageTemplate permet de crer des filtres sur chaque attribut du
message : MessageTemplate.Match<Attribute>()
Ces diffrentes conditions peuvent tre combines par les mthodes not(),
or() et and().
Lenvoi et la rception de messages peuvent tre mis en place au
sein de comportements de lagent
Rception de messages
Rception de messages (4/5)
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Exemple : Rception de messages (5/5)
MessageTemplate perfmt =
MessageTemplate.MatchPerformative(ACLMessage.INFORM);
MessageTemplate protmt = MessageTemplate.MatchProtocol("ping");
MessageTemplate template = MessageTemplate.and(perfmt, protmt);
ACLMessage receive = receive(template);
if(receive != null){
ACLMessage inform = receive.createReply();
inform.setPerformative(ACLMessage.INFORM);
inform.setContent("pong");
send(inform);
}
else {
block();
}
Rception de messages
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Lenvoie dun message ncessite de connatre lAID du/des
destinataire(s)
Dans JADE, les inscriptions des agents ne sont pas simultanes.
Les rfrencements possibles sont :
Soit par leur nom au sein du service de pages blanches (AMS)
Soit par le(s) service(s) propos(s) enregistrs au sein du service de pages
jaunes (DF) : jade.domain.DFService
Contrairement lAMS ce rfrencement nest pas automatique
Chaque agent doit sinscrire auprs du DF : DFService.register()
Chaque agent doit se dsinscrire du DF : DFService.deregister()
Le DF permet de rechercher les agents offrant un type de service
dsir : DFService.search()
Services du DF
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Pour se rfrencer, lagent doit dcrire:
Les services quil fournit
Type, nom, langage(s), ontologie(s), protocole(s), proprit(s),
Classe jade.domain.FIPAAgentManagement.ServiceDescription
Classe jade.domain.FIPAAgentManagement.DFAgentDescription
Il est recommand de se rfrencer lentre dans le systme
// Enregistrement aupres du directory facilitator
try {
DFAgentDescription dfd = new DFAgentDescription();
dfd.setName(this.getAID());
ServiceDescription sd = new ServiceDescription();
sd.setType("participant");
dfd.addServices(sd);
DFService.register(this, dfd);
}
catch (FIPAException fe) {fe.printStackTrace();}
Rfrencement auprs du DF (1/2)
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Inversement, lagent doit se dsinscrire du DF
sa sortie du systme :
Mthode deregister()
try{
DFService.deregister(myAgent);
}
catch(FipaException fe){
fe.printStackTrace();
}
Rfrencement auprs du DF (2/2)
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Recherche de la description dagents fournissant un
service particulier
// Description du service des experts
DFAgentDescription participants = new DFAgentDescription();
ServiceDescription sde = new ServiceDescription();
sde.setType("participant");
participants.addServices(sde);
try{
ACLMessage reply = msg.createReply();
reply.setPerformative(ACLMessage.INFORM);
DFAgentDescription[] results = DFService.search(agent, participants);
for (int i = 0; i < results.length; ++i){
reply.addReceiver(results[i].getName());
}
agent.send(reply);
}
catch (FIPAException e) {e.printStackTrace();}
Recherche au sein du DF
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Protocoles dinteraction
Les protocoles spcifient lenchanement des messages entre les
agents.
Ils dfinissent les messages envoyer en prcisant :
" Le performatif
" Le contenu
" Le(s) destinataire(s)
et tablissent les rponses ses messages.
Jade propose des protocoles prdfinis disponibles dans le
package jade.proto
" Ce package contient des protocoles cl en main
" rpondant aux spcifications qui ont t tablies par la FIPA
Pour plus dinformations : http://www.fipa.org/repository/ips.php3
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Appartient aux protocoles du package
jade.proto
Dvelopper des agents utilisant le CNP,
ncessite de dfinir les
comportements :
De lInitiateur de linteraction
jade.proto.ContractNetInitiator
Du Participant linteraction
jade.proto.ContractNetResponder
et de surcharger les mthodes :
handle<Performatif>
registerHandle<Performatif>
Dtails du Contract Net Protocol
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Initiateur :
1. Recherche un bien dont le prix ne dpasse pas une valeur seuil donne (CFP),
2. Accepte la proposition qui maximise lcart entre le seuil et les prix proposs par les
diffrents participants puis prvient le vainqueur (accept-proposal).
3. Refuse les autres propositions en prvenant les participants vaincus (reject-
proposal).
Participant :
1. Rpond la demande de lInitiateur
" propose sil possde le bien en spcifiant le prix demand,
" refuse sinon.
2. Informe lInitiateur du rsultat de lexcution.
" inform si lexcution est russie,
" failure sinon.
Dtails du Contract Net Protocol
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Agent Initiateur : Initialisation de lagent
import jade.core.Agent;
import jade.core.AID;
...
public class Initiateur extends Agent {
private double prix;
protected void setup(){
Object[] args = getArguments();
if (args != null && args.length == 2) {
prix = Double.parseDouble((String)args[1]);
ACLMessage cfp = new ACLMessage(ACLMessage.CFP);
cfp.setProtocol(FIPANames.InteractionProtocol.FIPA_CONTRACT_NET);
cfp.setReplyByDate(new Date(System.currentTimeMillis() + 10000));
cfp.addReceiver(new AID("participant", AID.ISLOCALNAME));
cfp.setContent((String)args[0]);
addBehaviour(new ContractNetInitiator(this, cfp) {
// Traitement des messages : surcharge des mthodes handle });
} else {System.out.println("Usage : <titre> <seuil>");}
} }
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Agent Initiateur : Traitement des
messages (1/3)
Rception dun message PROPOSE
protected void handlePropose(ACLMessage propose, Vector v) {
System.out.println("Info : L'agent
"+propose.getSender().getName()+" propose
"+propose.getContent());
}
Rception dun message REFUSE
protected void handleRefuse(ACLMessage refuse) {
System.out.println("Info : L'agent
"+refuse.getSender().getName()+" ne possde pas l'objet
dsir");
}
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Agent Initiateur : Traitement des
messages (2/3)
Rception dun message FAILURE
protected void handleFailure(ACLMessage failure) {
if (failure.getSender().equals(myAgent.getAMS())) {
System.out.println("Le destinataire n'existe pas");
}
else {
System.out.println("Erreur : Action non ralise"
+failure.getSender().getName()+")");
}
}
Rception dun message INFORM
protected void handleInform(ACLMessage inform) {
System.out.println("Succes : Achat ralis avec succs
auprs de l'agent "+inform.getSender().getName());
}
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Agent Initiateur : Traitement des
messages (3/3)
Prparation des rponses
protected void handleAllResponses(Vector reponses, Vector acceptes) {
double bestPrice = 0;
ACLMessage accept = null;
for(Enumeration e = reponses.elements(); e.hasMoreElements();){
ACLMessage msg = (ACLMessage) e.nextElement();
if (msg.getPerformative() == ACLMessage.PROPOSE) {
ACLMessage reply = msg.createReply();
reply.setPerformative(ACLMessage.REJECT_PROPOSAL);
acceptes.addElement(reply);
double price = Double.parseDouble(msg.getContent()) - prix;
if (price < bestPrice) {
bestPrice = price;
accept = reply;
}
}
}
if (accept != null)
accept.setPerformative(ACLMessage.ACCEPT_PROPOSAL);
}
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Agent Participant : Initialisation de lagent
import jade.core.Agent;
import jade.core.AID;
...
public class Participant extends Agent {
private Hashtable have;
protected void setup() {
MessageTemplate template = MessageTemplate.and(
MessageTemplate.MatchProtocol(FIPANames.InteractionProtocol.FIPA_CONTRACT_NET),
MessageTemplate.MatchPerformative(ACLMessage.CFP));
have = new Hashtable();
Object [] args = getArguments();
int i = 0;
while(i<args.length){
have.put(args[i++], args[i++]);
}
addBehaviour(new ContractNetResponder(this, template) {
// Traitement de messages : surcharge des mthodes handle } );
} }
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Agent Participant : Traitement des
messages (1/2)
Rception dun message CFP
protected ACLMessage handleCfp(ACLMessage cfp)
throws RefuseException, FailureException,
NotUnderstoodException {
String title = cfp.getContent();
if(have.containsKey(title)){
double price = Double.parseDouble((String) have.get(title));
ACLMessage propose = cfp.createReply();
propose.setPerformative(ACLMessage.PROPOSE);
propose.setContent((new Double(price)).toString());
return propose;
} else {
throw new RefuseException("Objet non disponible");
} }
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Agent Participant : Traitement des
messages (2/2)
Rception dun message Accept-Proposal
protected ACLMessage handleAcceptProposal(ACLMessage cfp,
ACLMessage propose, ACLMessage accept)
throws FailureException {
String title = cfp.getContent();
if (have.containsKey(title)) {
ACLMessage inform = accept.createReply();
inform.setPerformative(ACLMessage.INFORM);
have.remove(title);
return inform;
}
else {throw new FailureException("Vente impossible")}
}
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Les comportements sont dfinis par drivation
de la classe jade.core.behaviours.Behaviour
ou dune de ses classes drives
Les mthodes suivantes doivent tre surcharges :
void action()
La fonctionnalit du comportement !
Doit tre rapide !!
boolean done ()
Retourne vrai lorsque la tche implmente par le comportement est
termine
Attribut manipulable : myAgent
Utilis pour envoyer/recevoir des messages et ajouter des
comportements
Comportements
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Les comportements behaviours dfinissent le comportement de
lagent.
Lajout dun comportement est ralis par la mthode
addBehaviour()
Utilis dans la mthode setup()
ou dans un autre comportement de lagent
Lordonnanceur interne dun agent excute un comportement, action
par action jusqu ce que la condition de fin done() du
comportement soit satisfaite
Gestion dune liste de comportements actifs,
Choix dun comportement
Excution de la mthode action()du comportement
Excution de la mthode done() du comportement pour tester la fin du
comportement
Si le comportement est termin, retrait de la liste de comportements actifs,
sinon insertion du comportement dans la liste des comportements actifs
Comportements
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Ajout/Suppression dun comportement
addBehaviour()
removeBehaviour()
Actions excutes au lancement/terminaison du
comportement
onStart()
onEnd()
Suspension de lexcution du comportement
block(), block(long milliseconds),
Reprise de lexcution du comportement
restart()
Rinitialisation du comportement
reset(), reset():
Mthodes d'un comportement
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
public class BehaviourExampleAgent extends Agent {
protected void setup () {
addBehaviour(new TrivialBehaviour());
}
public class TrivialBehaviour extends Behaviour {
public action() {
System.out.println(exemple de comportement);
}
public boolean done() {
return true;
}
}
}
Exemple de comportement
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Behaviour
CyclicBehaviour OneShotBehaviour
Excution ?
unique cyclique
Tche ?
SimpleBehaviour
simples
CompositeBehaviour
composes
Ordonnancement ?
FSMBehaviour
SequentialBehaviour
ParallelBehaviour
parallle
automate
s
q
u
e
n
t
i
e
l
Types de comportements
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
import jade.core.behaviours.SimpleBehaviours;
public class InitiateurBehaviour extends SimpleBehaviour {
private boolean finished = false;
private Initiateur init;
public InitiateurBehaviour(Initiateur agent){
// Constructeur
}
pulic void action(){
// Description du comportement de lagent
}
public boolean done(){
// Renvoie true ssi la mthode action ne doit plus tre invoque
return finished;
}
}
Behaviour pour CNET
Initiateur : behaviour (1/3)
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
public InitiateurBehaviour(Initiateur agent){
init = agent;
// Cration du CFP
ACLMessage cfp = new ACLMessage(ACLMessage.CFP);
cfp.setProtocol(FIPANames.InteractionProtocol.FIPA_CONTRACT
_NET);
cfp.addReceiver(new AID("participant", AID.ISLOCALNAME));
cfp.setContent(init.titre);
// Envoi du message
init.send(cfp);
}
Envoi du Call For Proposal lagent Participant
Behaviour pour CNET
Initiateur : behaviour (2/3)
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Initiateur (3/3) : behaviour de traitement de
messages
public void action(){
ACLMessage receive =
init.receive(MessageTemplate.MatchProtocol(FIPANames.Interaction
Protocol.FIPA_CONTRACT_NET));
if(receive != null){
if(receive.getPerformative() == ACLMessage.REFUSE);
if(receive.getPerformative() == ACLMessage.FAILURE);
if(receive.getPerformative() == ACLMessage.INFORM);
if(receive.getPerformative() == ACLMessage.PROPOSE){
// Evaluer la propositions
ACLMessage reply = receive.createReply();
if(ok){
reply.setPerformative(ACLMessage.ACCEPT_PROPOSAL);
finished = true;
}
else {reply.setPerformative(ACLMessage.REJECT_PROPOSAL);}
init.send(reply); }
else{block();} }
Behaviour pour CNET
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Les comportements complexes sont des drivations de
la classe CompositeBehaviour :
SequentialBehaviour et ParallelBehaviour
" Excution en squentiel :
! Arrt lorsque tous les sub-behaviours sont termins
" Excution en parallle
! Arrt lorsque un ou plusieurs comportement sont termins,
! Arrt conditionn par le programmeur.
" Ajout de sous-comportements : addSubBehaviour()
" Suppression : removeSubBehaviour()
Avantages :
Dcomposition de tches complexes,
Simplification de la programmation.
Composite Behaviour
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
FSM Behaviour
Enchanement des sous-comportement la manire
dun automate
A
C
B
D
1
2
FSMBehaviour fsm = new FSMBehaviour(this);
fsm.registerFirstState(new behaviourA(), "A");
fsm.registerState(new behaviourB(), "B");
fsm.registerState(new behaviourC(), "C");
fsm.registerLastState(new behaviourD(), "D");
fsm.registerTransition("A", "B", 1);
fsm.registerTransition("A", "C", 2);
fsm.registerDefaultTransition("B", "D");
fsm.registerDefaultTransition("C", "D");
addBehaviour(fsm);
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
OneShotBehaviour
A
C
B
D
1
2
public class behaviourA extends OneShotBehaviour {
private Agent agent;
private int exit;
public A(Agent agent){
this.agent = agent;
}
public void action(){
if(agent.getLocalName().equals("A")){
exit = 1;
}
else {
exit = 2;
}
}
public int onEnd() {
return exit;
}
}
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Jade propose deux autres behaviours :
TickerBehaviour
- Hrite de SimpleBehaviour
- Excution rgulire dune action :
" Implmentation de la mthode onTick()
WakerBehaviour
- Excution unique de laction un temps T :
" Implmentation de la mthode handleElapsedTimeOut()
Utilit : sauvegarde, ping, automatisation de tches,
Ticker/Waker Behaviour
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Aperu de JADE API
jade.core :
Implmentation du noyau de la plateforme JADE
Classe Agent qui doit tre spcialises par les programmeurs dapplication.
jade.core.behaviours : classe de comportements Behaviours qui implmentent les tches ou
les intentions dun agent.
jade.content :
ensemble de classes support aux ontologies dfinies par les utilisateurs et les langages de
contenu.
jade.content.lang.sl : SL codec2, parser et encodeur.
jade.lang.acl :
traitement du Agent Communication Language selon les spcifications de la FIPA.
jade.proto :
Classes pour la modlisation des protocoles dinteraction standard (fipa-request, fipa-query, fipa-
contract-net, fipa-subscribe, ), ainsi que les classes pour aider les programmeurs dapplication
crer leurs propres protocoles.
jade.FIPA :
Module IDL dfini par la FIPA pour le transport de message respectant le protocole IIOP.
jade.wrapper :
wrappers des fonctionnalits de haut niveau de JADE permettant dutiliser JADE comme une
bibliothque, o des applications Java externes lancent des agents et des conteneurs.
API
Systmes Multi-Agents : Plateforme JADE O. Boissier G2I/ENSM Saint-Etienne
Aperu de JADE API
jade.domain package :
Ensembe des classes qui reprsentent les entits de gestion des agents dfinies par la FIPA, en
particulier lAMS, le DF, ainsi que toutes les constantes dfinies par la FIPA
jade.domain.FIPAAgentManagement : Ontologie FIPA-Agent-Management et toutes les
classes reprsentant ses concepts.
jade.domain.JADEAgentManagement : Extensions JADE pour la gestion des agents
(espionnage des messages, contrle du cycle de vie des agents, ), incluant lontologie
correspondante et toutes les classes correspondantes.
jade.domain.introspection : Concepts utiliss pour les communications entre outils JADE
(Sniffer et Introspector par exemple) et le noyau JADE.
jade.domain.mobility : Ensemble des concepts utiliss pour la communication sur la mobilit.
jade.gui :
Ensemble de classes gnriques pour la cration dinterfaces graphiques pour afficher et diter
des Agent-Identifiers, Agent Descriptions, ACLMessages,
jade.mtp :
Interface Java que tout protocole de transport de message doit implmenter pour tre intgr
dans le framework JADE, implmentation de lensemble de ces protocoles.
jade.tools :
Classes implmentant des outils pour simplifier ladministration et le dveloppement
dapplications
jade.util (resp. jade.util.leap) :
Classes utilitaires pour la gestion des proprits notamment (resp. remplacement des collections
pour J2ME)
API