![Page 1: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/1.jpg)
JadeJava Agent DEvelopment
framework
Loïc Pélissier
Régis Lhoste
![Page 2: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/2.jpg)
Plan
Présentation générale Les agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails
![Page 3: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/3.jpg)
Présentation générale
Plateforme de développement et exécution Multi-Agents
JAVA Licence LGPL V2 Architecture distribuée TILab S.p.A.(anciennement CSELT)
Turin Italie Compatible avec le standard FIPA
![Page 4: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/4.jpg)
FIPA (Foundation for Intelligent Physical Agent)
Formé en 1996 afin de construire des standards pour les agents hétérogènes, en interaction et les SMA
Design de spécifications afin de faciliter l’interopérabilité entre les différents SMA développés par différentes sociétés et organisations
Relations fortes avec d’autres standard et organisations comme OMG (Object Management Group)
www.fipa.org
![Page 5: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/5.jpg)
Différentes plateformes FIPA
Zeus– British Telecom– Java– FIPA 97-98
FIPA – OS– Emorphia (Nortel Networks)– Java– FIPA 2000 (?)
…
![Page 6: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/6.jpg)
Plan
Présentation générale Les agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails
![Page 7: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/7.jpg)
Un agent selon JADE
Conforme au standard FIPA 2002 (Jade 3) Cycle de vie Possède un ou plusieurs Comportements
(Behaviours) qui définissent ses actions Communique et interagit avec les autres
agents grâce à des Messages (ACLMessage) Rend des Services
![Page 8: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/8.jpg)
Cycle de vie
Un agent possède toujours un état (AP_ACTIVE, AP_DELETED...)
Cycle de vie géré par cet état Changement d ’état possible
AP_ACTIVEAP_INITIATED
AP_TRANSIT
AP_SUSPENDED
AP_WAITING
AP_DELETED
doStart()
doM
ove(
)
doSuspend()
doSuspend()
doWait()
doDelete()
![Page 9: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/9.jpg)
Un Comportement (Behaviour)
Défini une action d’un agent Ordonnancement et exécution de tâches multiples Peut être de plusieurs types
Behaviour
SimpleBehaviour CompositeBehaviourReceiverBehaviour
SequentialBehaviour ParallelBehaviour FSMBehaviourCyclicBehaviour OneShotBehaviour WakerBehaviour
SenderBehaviour
![Page 10: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/10.jpg)
Un Message
Communication entre agents Conforme au standard FIPA ACL Les messages ACL présentent les
caractéristiques suivantes :– Typage (INFORM, QUERY…)– Transport possible d ’objets– Sémantique pour les données (Ontologies)
![Page 11: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/11.jpg)
Ontologies
Représentation structurée de la connaissance.– Concepts (Représentation abstraite d’objets)– Prédicats (Condition binaire sur des concepts)– Actions (Traitements proposés par des agents sur des
concepts)
Partager la connaissance en fixant le domaine du discours.
Construction graphique avec Protégé – lien vers Jade via plug-in (BeanGenerator)
![Page 12: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/12.jpg)
Ontologies exemple
Personne :Nom:Age:…
Famille
Est Père de (personne, personne) Predicat
Concept Descendance (personne) : séquence de personnes
Action
![Page 13: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/13.jpg)
Un Service
Action enregistrée et dispensée par la plateforme
Comportements d’un ou plusieurs agents répondant a une demande.
Notion de pages jaunes Proche de la notion de « WebServices »
![Page 14: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/14.jpg)
Plan
Présentation générale Les Agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails
![Page 15: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/15.jpg)
Présentation de la plateforme
Une plateforme de départ (avec ou sans GUI) 3 agents de base (Conforme FIPA)
– Agent Management System– Directory Facilitator– Agent Communication Channel
Quelques outils API
![Page 16: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/16.jpg)
Containers (Environnement d’exécution pour les agents)
Host 1
JRE 1.2
Host 2
JRE 1.2
Host 3
JRE 1.2
Jade Distributed Platform
Main container
Container 1
Container 2 Container 3
![Page 17: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/17.jpg)
Une plateforme Jade
![Page 18: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/18.jpg)
Agent Management System (AMS)
Gestion du cycle de vie des agents Maintient une liste de tous les agents qui
résident sur la plate-forme (White pages) Contrôle l'accès ainsi que l'utilisation du canal
de communication des agents (ACC)
![Page 19: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/19.jpg)
Directory Facilitator
Enregistre les descriptions des agents ainsi que les services qu'ils offrent
Les agents peuvent enregistrer leurs services auprès d'un DF ou demander à DF de découvrir les services offerts par d'autres agents (Yellow Pages)
![Page 20: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/20.jpg)
Agent Communication Channel
Gère les communications entre les agents– Intra plateformes, Intra containers : Java Events– Intra plateformes, Inter containers : RMI– Inter Plateformes : IIOP Corba
Messages ACL (FIPA)
![Page 21: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/21.jpg)
Outils
Jade GUI DF Agent GUI Dummy Agent Sniffer Agent Introspector Agent
![Page 22: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/22.jpg)
Jade GUI
Contrôler les agents
– Créer– Tuer– Suspendre – …
Démarrer les autres outils
![Page 23: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/23.jpg)
DF Agent GUI
Inspecter les Yellow Pages (services enregistrés)
![Page 24: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/24.jpg)
Dummy Agent
Système de tests
Envoyer et recevoir des messages ACL
![Page 25: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/25.jpg)
Sniffer Agent
Surveillance des échanges de messages dans une plateforme
![Page 26: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/26.jpg)
Introspector Agent
Surveiller état (cycle de vie) d’un agent Ainsi que les messages reçus ou émis par cet
agent
![Page 27: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/27.jpg)
API
Java Surcharge de classes de base Communication transparente Compatibilité FIPA pour la communication
avec des agents non Jade Compatibilité avec Jess et Protege
![Page 28: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/28.jpg)
Plan
Présentation générale Les agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails
![Page 29: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/29.jpg)
ExempleUn application de e-commerce de musique
Création des ontologies Création des comportements Création et enregistrement des agents Exécution
![Page 30: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/30.jpg)
Création des ontologies
Item
Price CreditCarde-shopping
Music shopCD Track
Single
Owns
WineRed
White
Wine shop
Cost
Sell
![Page 31: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/31.jpg)
Création des comportements
Deux agents distincts (Vendeur et Acheteur) impliquent deux ensembles de comportements
Deux types de comportements sont utilisés :– Cyclic : Attente d’un message– OneShot : Exécution d’une action
![Page 32: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/32.jpg)
Comportements du vendeur
Action effectuée Nom Type
Attente d’une requête de disponibilité
HandleInform Cyclic
Informe l’acheteur sur la disponibilité
InformOwns OneShot
Attente d’une requête de prix
HandleQuery Cyclic
Envoi du prix InformCost OneShot
Attente d’une demande de transaction
HandleRequest Cyclic
Notification du résultat de la transaction
InformDone OneShot
![Page 33: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/33.jpg)
Comportements de l’acheteur
Action effectuée Nom Type
Trouver un vendeur
InformSearch OneShot
Attente d’une réponse
HandleInform Cyclic
Demander un prix QueryPrice OneShot
Effectuer la vente RequestSale OneShot
![Page 34: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/34.jpg)
Création et enregistrement des agents
AcheteurVendeur
DF
enregistrement
rechercheréponse
HandleRequest
HandleQuery
HandleInform
HandleInform
InformSearch
CyclicBehaviour
OneShotBehaviour
![Page 35: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/35.jpg)
Déroulement de la transaction
AcheteurVendeur
HandleRequest
HandleQuery
HandleInform
HandleInform
InformSearchINFORM
CyclicBehaviour
OneShotBehaviour
ACLMessage
![Page 36: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/36.jpg)
Déroulement de la transaction
AcheteurVendeur
HandleRequest
HandleQuery
HandleInform
HandleInform
InformOwnsINFORM
CyclicBehaviour
OneShotBehaviour
ACLMessage
![Page 37: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/37.jpg)
Déroulement de la transaction
AcheteurVendeur
HandleRequest
HandleQuery
HandleInform
HandleInformQueryPriceQUERY-REF
CyclicBehaviour
OneShotBehaviour
ACLMessage
![Page 38: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/38.jpg)
Déroulement de la transaction
AcheteurVendeur
HandleRequest
HandleQuery
HandleInform
HandleInformInformCostINFORM
CyclicBehaviour
OneShotBehaviour
ACLMessage
![Page 39: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/39.jpg)
Déroulement de la transaction
AcheteurVendeur
HandleRequest
HandleQuery
HandleInform
HandleInformRequestSale
REQUEST
CyclicBehaviour
OneShotBehaviour
ACLMessage
![Page 40: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/40.jpg)
Déroulement de la transaction
AcheteurVendeur
HandleRequest
HandleQuery
HandleInform
HandleInform
InformDone INFORM
CyclicBehaviour
OneShotBehaviour
ACLMessage
![Page 41: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/41.jpg)
Déroulement de la transaction
AcheteurVendeur
HandleRequest
HandleQuery
HandleInform
HandleInform
CyclicBehaviour
OneShotBehaviour
ACLMessage
![Page 42: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/42.jpg)
Plan
Présentation générale Les agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails
![Page 43: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/43.jpg)
Les principaux intérêts
Compatible FIPA Communauté de plus en plus importante Exécution distribuée Exécution concurrente des agents Communication transparente par message
(ACL) Notion de services LEAP Relativement facile a utiliser
![Page 44: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/44.jpg)
Perspectives
AgentCity MAIA ELIN
– Architecture de filtrage
Robotique Mobile – Communication entre robots– LEAP
![Page 45: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/45.jpg)
Plan
Présentation générale Les agents JADE La plateforme Concrètement Les principaux intérêts Implémentation dans les détails
![Page 46: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/46.jpg)
Développer un système à agents Jade
![Page 47: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/47.jpg)
Installer Jade
Installer Java (jdk 1.2 ou supérieure)– Attention au « path » et au « classpath »
Installer le package Jade– Copier les classes– Mettre a jour le « classpath » :
\jade \jade\Lib \jade\Lib\iiop.jar jade\Lib\jade.jar \jade\Lib\jadeTools.jar
Installer vos agents comme des classes java classiques– Attention au « classpath »
![Page 48: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/48.jpg)
Exécuter Jade
Lancer Jade avec la ligne de commandes :– java jade.Boot
Lancer Jade et la GUI– java jade.Boot –gui
Lancer un agent au démarrage– java jade.Boot –gui [nom de l’agent]:[classe de l’agent]
Lancer un agent avec des paramètres– java jade.Boot –gui [nom de l’agent]:[classe de l’agent]
([Paramètres])
![Page 49: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/49.jpg)
Créer un agent
Etendre la classe jade.core.Agent– public class monAgent extends Agent
Traiter les paramètres de démarrage– Object[].getArguments()
Dans la méthode setup() (obligatoire)– Enregistrer les langages de contenu– Enregistrer les Ontologies– Enregistrer les Services auprès du DF– Démarrer les Comportements (behaviors)
![Page 50: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/50.jpg)
Créer un behaviour
Créer (étendre la classe « behaviour »)public class myBehaviour extends SimpleBehaviour Creer le constructeur avec la super classepublic myBehaviour(Agent agent) { super(agent);}
Il existe différents types de behaviour à étendre (simple, oneshot, cyclic, …)
Créer la méthode « action » (obligatoire) qui correspond à l’exécution du behaviour
public void action() {<code du behaviour>}
![Page 51: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/51.jpg)
Ajouter et démarrer un behaviour
Dans la méthode Setup() de l’agent
Ajouter le behaviouraddBehaviour(new myBehaviour(this));
Un behaviour ajouté est demarré automatiquement
![Page 52: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/52.jpg)
Créer et enregistrer un service
Creer une description du DF Agent DFAgentDescription dfd = new DFAgentDescription() dfd.setName(this.getAID()); Creer la description du service ServiceDescription sd = new ServiceDescription(); sd.setType(<nom_type_service>); sd.setName(<nom_service>); Enregistrer le service auprès du DF Agent dfd.addServices(sd); try {DFService.register(this, dfd);} catch (FIPAException e) {<code d’erreur>}
![Page 53: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/53.jpg)
Rechercher des agents proposant une service
Creer une description du DF Agent DFAgentDescription dfd = new DFAgentDescription(); Retrouver les agents dans un tableauDFAgentDescription[] result = DFService.search(this, dfd); Parcourir le tableau pour retrouver les agentsfor (int i=0; i<result.length; i++) { Iterator iter = result[i].getAllServices(); On récupere toutes les descriptions de service while (iter.hasNext()) { ServiceDescription sd =(ServiceDescription)iter.next();
<traitement sur les service>}}
![Page 54: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/54.jpg)
Envoyer un message simple
Créer l’agent qui envoi ce message Créer une instance de la classe ACLMessage avec un template
(Inform, Query,…) – ACLMessage msg = new ACLMessage(ACLMessage.INFORM)
Remplir l’ensemble des agents receveurs dans l’instance ACLMessage. – msg.addReceiver(new AID(« nom_du_receveur, AID.ISLOCALNAME)
Remplir le texte du contenu du message– msg.setContent(« Salut ça va ? »);
Envoyer le message au receveur avec– send(ACLMessage m);
![Page 55: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/55.jpg)
Recevoir un message simple
Créer l’agent receveur Créer le comportement (behaviour)de réception de message.
– Déclarer le ou les Templates (Inform, Query,…) de message a recevoirprivate static final MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
– Dans la méthode action() Créer une instance du message et le recevoir
ACLMessage msg = myAgent.receive(mt); La reception peut être bloquante, dans ce cas, utiliser blockingReceive(mt)
Ajouter le behaviour a l’agent (dans setup() )– addBehaviour(new ReceiverBehaviour(this));
![Page 56: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/56.jpg)
Créer une ontologie de description de message (1/3)
Créer l’objet Java représentant le contenu du message. Créer l’ontologie de description représentant le message
son nom et son vocabulaire (exemple avec la description d’un objet « Personne »)– public class PersonOntology extends Ontology { public static final String ONTOLOGY_NAME = "Person-ontology";
public static final String PERSON = "Person";public static final String PERSON_NAME = "name";public static final String PERSON_AGE = "age";
Le vocabulaire correspond aux champs de l’objet “personne”
![Page 57: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/57.jpg)
Créer une ontologie de description de message (2/3)
Une instanceprivate static Ontology theInstance = new PersonOntology();
public static Ontology getInstance() {return theInstance;}
Le constructeur fait office de “traducteur”private PersonOntology() {super(ONTOLOGY_NAME, BasicOntology.getInstance());try {add(new PredicateSchema(PERSON), Person.class); PredicateSchema ps = (PredicateSchema) getSchema(PERSON); ps.add(PERSON_NAME,(PrimitiveSchema) getSchema(BasicOntology.STRING)); ps.add(PERSON_AGE,(PrimitiveSchema)
getSchema(BasicOntology.INTEGER));} catch (OntologyException oe) { oe.printStackTrace();} }
![Page 58: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/58.jpg)
Créer une ontologie de description de message (3/3)
import jade.content.onto.*;import jade.content.schema.*;public class PersonOntology extends Ontology { public static final String ONTOLOGY_NAME = "Person-ontology"; public static final String PERSON = "Person"; public static final String PERSON_NAME = "name"; public static final String PERSON_AGE = "age"; private static Ontology theInstance = new PersonOntology(); public static Ontology getInstance() { return theInstance;} private PersonOntology() { super(ONTOLOGY_NAME, BasicOntology.getInstance()); try { add(new PredicateSchema(PERSON), Person.class); PredicateSchema ps = (PredicateSchema) getSchema(PERSON); ps.add(PERSON_NAME,(PrimitiveSchema) getSchema(BasicOntology.STRING)); ps.add(PERSON_AGE,(PrimitiveSchema) getSchema(BasicOntology.INTEGER)); } catch (OntologyException oe) { oe.printStackTrace(); } }
}
![Page 59: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/59.jpg)
Envoyer un message avec une ontologie
Créer l’ontologie de message Créer l’agent envoyeur Déclarer le content manager,le codec et l’ontologieprivate ContentManager manager = (ContentManager)getContentManager();private Codec codec = new SLCodec();private Ontology ontology = PersonOntology.getInstance();
Envoyer le message en ajoutant l’ontologie ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID(“<nom_receveur>",AID.ISLOCALNAME)); msg.setLanguage(codec.getName()); msg.setOntology(ontology.getName()); manager.fillContent(msg,<ontologie>); send(msg);
![Page 60: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/60.jpg)
Recevoir un message avec une ontologie (1/2)
Créer le comportement de receptionpublic class ReceiverBehaviour extends CyclicBehaviour {
Declarer CM, et le template du messageprivate ContentManager manager = myAgent.getContentManager();private final static MessageTemplate mt =
MessageTemplate.MatchPerformative(ACLMessage.INFORM);
Constructeur public ReceiverBehaviour(Agent agent) { super(agent);}
Action public void action() { ACLMessage msg = myAgent.receive(mt); if (msg != null) { try {
ContentElement ce = manager.extractContent(msg); if (ce instanceof MyOntology) {
MyOntology myOntologie = ( MyOntology ) ce;}
![Page 61: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/61.jpg)
Recevoir un message avec une ontologie (2/2)
Créer l’agent receveurpublic class ReceiverAgent extends Agent {
Declarer les CM, codec et Ontology private ContentManager manager = (ContentManager)getContentManager(); private Codec codec = new SLCodec(); private Ontology ontology = MyOntology.getInstance();
Ajouter le comportement protected void setup() {
manager.registerLanguage(codec); manager.registerOntology(ontology); addBehaviour(new ReceiverBehaviour(this));}
![Page 62: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/62.jpg)
Retour sur les Behaviours et les Protocoles
![Page 63: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/63.jpg)
Behaviours
Une super classe– Behaviour
De nombreuses spécialisations– cf. graphe d ’héritage ci-après
![Page 64: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/64.jpg)
Graphe d ’héritage
Behaviour
SimpleBehaviour CompositeBehaviourReceiverBehaviour
SequentialBehaviour ParallelBehaviour FSMBehaviourCyclicBehaviour OneShotBehaviour WakerBehaviour
SenderBehaviour
![Page 65: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/65.jpg)
Retour sur Behaviour
Agent :– void setup()– void takeDown()– ACLMessage receive([MessageTemplate mt])– ACLMessage blockingReceive([MessageTemplate
mt[,long Timeout]]) – void addBehaviour(Behaviour b)
![Page 66: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/66.jpg)
Fonctionnement des Behaviours
Constructeur :– Behaviour([Agent a])
Méthodes de gestion du cycle de vie:– void onStart()– int onEnd()– void action()– boolean done()
![Page 67: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/67.jpg)
Un peu plus loin
Méthodes intéressantes :– void block([long millisecondes])– void reset()– Behaviour root()
Attributs:– Agent myAgent– CompositeBehaviour parent
![Page 68: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/68.jpg)
Problème des CompositeBehaviour
Pas d ’échange entre les différents Behaviours composant le CompositeBehaviour
Solution :– DataStore
![Page 69: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/69.jpg)
DataStore
DataStore = HashMap– Partageable par plusieurs Behaviours
Dans Behaviour :– setDataStore(DataStore ds)– DataStore getDataStore()
![Page 70: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/70.jpg)
Fonctionnement du DataStore
Méthodes :– Object get(Object Key)– Object put(Object Key,Object Value)– Object remove(Object Key)– boolean containsKey(Object Key)– boolean isEmpty()– int size()– etc...
![Page 71: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/71.jpg)
Problème du DataStore
Pas de typage
– méthode get retourne un Object
– nécessite un contrôle fort sur les données
![Page 72: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/72.jpg)
FSMBehaviour
Finite State Machine Behaviour– Automate dont les nœuds sont des behaviours
Enchaîner séquentiellement des Behaviours dans un ordre fixé ou non par des transitions
![Page 73: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/73.jpg)
Fonctionnement
Méthodes supplémentaires– Gestion des états de l ’automate :
registerFirstState(Behaviour b,String name) registerLastState(Behaviour b, String name) registerState(Behaviour b, String name)
– Gestion des transitions : registerDefaultTransition(String from,String to) registerTransition(String from, String to, int event)
![Page 74: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/74.jpg)
Subtilités
Partager les données entre les Behaviours fils– Créer un DataStore dans le FSMBehaviour– Le partager par tous les états
Déterminer les valeurs des transitions– ACLMessage performative = int
![Page 75: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/75.jpg)
Protocoles
ContractNet :– Implémenté par deux FSMBehaviour :
ContractNetInitiator ContractNetResponder
![Page 76: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/76.jpg)
![Page 77: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/77.jpg)
ExempleInitiator Responder1 Responder2
cfp
cfp
propose
propose
accept-proposal
reject-proposal
inform
Responder3
cfp
refuse
![Page 78: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/78.jpg)
ContractNetInitiatorRECEIVE_CFP
PREPARE_PROPOSE_STATE
SEND_PROPOSE_STATE
WAIT_ACCEPTANCE_STATE
PREPARE_RESULT_NOTIFICATION_STATE
SEND_RESULT_NOTIFICATION_STATE
HANDLE_OUT_OF_SEQUENCE_STATE
HANDLE_REJECT_STATE
RESET_STATE
X
X
PROPOSE
ACCEPT_PROPOSAL
X
X
X
X
X
X
REJECT_PROPOSAL
TIMEOUT_EXPIRED
prepareResponse()
prepareResultNotification()
handleOutOfSequence()
handleRejectProposal()
![Page 79: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/79.jpg)
ContractNetResponderPREPARE_CFPS
SEND_ALL
RECEIVE_REPLY
CHECK_ALL_REPLIES_RECEIVED
HANDLE_REFUSE HANDLE_NOT_UNDERSTOOD
HANDLE_INFORM HANDLE_FAILURE
HANDLE_OUT_OF_SEQ
HANDLE_PROPOSE
HANDLE_ALL_RESPONSES HANDLE_ALL_RESULT_NOTIFICATIONS
DUMMY_FINAL
CHECK_REPLY
X
X
X
X
XX
XX X
X
X
X
0
PROPOSEREFUSE NOT_UNDERSTOOD
INFORM FAILURE
ALL_RESPONSES_RECEIVED
ALL_RESULT_NOTIFICATION_RECEIVED
prepareCfps()
handlePropose()
handleRefuse()
handleNotUnderstood()
handleInform () handleFailure ()
handleOutOfSequence ()
![Page 80: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/80.jpg)
A noter
Notion de « Conversation » Slot protocol à fixer dans les messages Doit prendre en compte :
– Reply-By (Deadline/Timeout)– Reply-with (???)
![Page 81: Jade Java Agent DEvelopment framework Loïc Pélissier Régis Lhoste](https://reader036.vdocuments.site/reader036/viewer/2022062303/551d9d90497959293b8c6836/html5/thumbnails/81.jpg)
Bibliographie
http://jade.cselt.it/ Tutoriel de Jiri Vokrinek.
http://agents.felk.cvut.cz/teaching/ui2/JADEtutorial.doc