Vous êtes sur la page 1sur 14

Jade Java Agent DEvelopment framework

Loc Plissier Rgis Lhoste

Plan

Prsentation gnrale Les agents JADE La plateforme Concrtement Les principaux intrts Implmentation dans les dtails

Prsentation gnrale

FIPA (Foundation for Intelligent Physical Agent)


Plateforme de dveloppement et excution Multi-Agents JAVA Licence LGPL V2 Architecture distribue TILab S.p.A.(anciennement CSELT) Turin Italie Compatible avec le standard FIPA

Form en 1996 afin de construire des standards pour les agents htrognes, en interaction et les SMA Design de spcifications afin de faciliter linteroprabilit entre les diffrents SMA dvelopps par diffrentes socits et organisations Relations fortes avec dautres standard et organisations comme OMG (Object Management Group) www.fipa.org

Diffrentes plateformes FIPA

Plan

Zeus

British Telecom Java FIPA 97-98 Emorphia (Nortel Networks) Java FIPA 2000 (?)

FIPA OS

Prsentation gnrale Les agents JADE La plateforme Concrtement Les principaux intrts Implmentation dans les dtails

Un agent selon JADE


Cycle de vie

Conforme au standard FIPA 2002 (Jade 3) Cycle de vie Possde un ou plusieurs Comportements (Behaviours) qui dfinissent ses actions Communique et interagit avec les autres agents grce des Messages (ACLMessage) Rend des Services

Un agent possde toujours un tat (AP_ACTIVE, AP_DELETED...) Cycle de vie gr par cet tat Changement d tat possible
AP_TRANSIT doMove() AP_WAITING

) ait( doW

doSuspend()

doDelete()

AP_INITIATED

doStart()

AP_ACTIVE

do Su spe nd()

AP_DELETE D

AP_SUSPENDED

Un Comportement (Behaviour)

Un Message

Dfini une action dun agent Ordonnancement et excution de tches multiples Peut tre de plusieurs types
Behaviour

Communication entre agents Conforme au standard FIPA ACL Les messages ACL prsentent les caractristiques suivantes :

SimpleBehaviour

ReceiverBehaviour

CompositeBehaviour

CyclicBehaviour

OneShotBehaviour

WakerBehaviour

SequentialBehaviour

ParallelBehaviou r

FSMBehaviour

Typage (INFORM, QUERY) Transport possible d objets Smantique pour les donnes (Ontologies)

SenderBehaviour

Ontologies

Ontologies exemple

Reprsentation structure de la connaissance.


Concepts (Reprsentation abstraite dobjets) Prdicats (Condition binaire sur des concepts) Actions (Traitements proposs par des agents sur des concepts)

Est Pre de (personne, personne)

Predicat

Partager la connaissance en fixant le domaine du discours. Construction graphique avec Protg

Action

Famille

Concept

lien vers Jade via plug-in (BeanGenerator)

Personne :Nom :Age :

Descendance (personne) : squence de personnes

Un Service

Plan

Action enregistre et dispense par la plateforme Comportements dun ou plusieurs agents rpondant a une demande. Notion de pages jaunes Proche de la notion de WebServices

Prsentation gnrale Les Agents JADE La plateforme Concrtement Les principaux intrts Implmentation dans les dtails

Prsentation de la plateforme

Containers (Environnement dexcution pour les agents)


Host 1 Host 2 Jade Distributed Platform Main container Container 2 Container 1 JRE 1.2 JRE 1.2 JRE 1.2 Container 3 Host 3

Une plateforme de dpart (avec ou sans GUI) 3 agents de base (Conforme FIPA)

Agent Management System Directory Facilitator Agent Communication Channel

Quelques outils API

Une plateforme Jade

Agent Management System (AMS)


Gestion du cycle de vie des agents Maintient une liste de tous les agents qui rsident sur la plate-forme (White pages) Contrle l'accs ainsi que l'utilisation du canal de communication des agents (ACC)

Directory Facilitator

Agent Communication Channel


Gre les communications entre les agents

Enregistre les descriptions des agents ainsi que les services qu'ils offrent Les agents peuvent enregistrer leurs services auprs d'un DF ou demander DF de dcouvrir les services offerts par d'autres agents (Yellow Pages)

Intra plateformes, Intra containers : Java Events Intra plateformes, Inter containers : RMI Inter Plateformes : IIOP Corba

Messages ACL (FIPA)

Outils

Jade GUI

Jade GUI DF Agent GUI Dummy Agent Sniffer Agent Introspector Agent

Contrler les agents


Crer Tuer Suspendre

Dmarrer les autres outils

DF Agent GUI

Dummy Agent

Inspecter les Yellow Pages (services enregistrs)

Systme de tests Envoyer et recevoir des messages ACL

Sniffer Agent

Introspector Agent

Surveillance des changes de messages dans une plateforme

Surveiller tat (cycle de vie) dun agent Ainsi que les messages reus ou mis par cet agent

API

Plan

Java Surcharge de classes de base Communication transparente Compatibilit FIPA pour la communication avec des agents non Jade Compatibilit avec Jess et Protege

Prsentation gnrale Les agents JADE La plateforme Concrtement Les principaux intrts Implmentation dans les dtails

Exemple

Un application de e-commerce de musique

Cration des ontologies


Cost Owns Price Item CreditCard Sell

Cration des ontologies Cration des comportements Cration et enregistrement des agents Excution
Wine shop
Red White Wine

e-shopping

CD

Track

Music shop
Single

Cration des comportements


Comportements du vendeur
Action effectue Attente dune requte de disponibilit Informe lacheteur sur la disponibilit Attente dune requte de prix Envoi du prix Attente dune demande de transaction Notification du rsultat de la transaction Nom HandleInform InformOwns HandleQuery InformCost HandleRequest InformDone Type Cyclic OneShot Cyclic OneShot Cyclic OneShot

Deux agents distincts (Vendeur et Acheteur) impliquent deux ensembles de comportements Deux types de comportements sont utiliss :

Cyclic : Attente dun message OneShot : Excution dune action

Comportements de lacheteur
Action effectue Trouver un vendeur Attente dune rponse Demander un prix Effectuer la vente Nom InformSearch HandleInform QueryPrice RequestSale Type OneShot Cyclic OneShot OneShot

Cration et enregistrement des agents


CyclicBehaviour OneShotBehaviour
re ch er ch e

nt me stre egi enr

DF

r po ns e

Vendeur
HandleInform HandleQuery HandleRequest

Acheteur
InformSearch HandleInform

Droulement de la transaction
CyclicBehaviour OneShotBehaviour ACLMessage

Droulement de la transaction
CyclicBehaviour OneShotBehaviour ACLMessage

Vendeur
HandleInform HandleQuery HandleRequest INFORM

Acheteur
InformSearch HandleInform

Vendeur
HandleInform HandleQuery HandleRequest InformOwns

Acheteur
INFO RM
HandleInform

Droulement de la transaction
CyclicBehaviour OneShotBehaviour ACLMessage

Droulement de la transaction
CyclicBehaviour OneShotBehaviour ACLMessage

Vendeur
HandleInform HandleQuery HandleRequest QUERY-REF QueryPrice

Acheteur
HandleInform

Vendeur
HandleInform HandleQuery HandleRequest InformCost INFORM

Acheteur
HandleInform

Droulement de la transaction
CyclicBehaviour OneShotBehaviour ACLMessage

Droulement de la transaction
CyclicBehaviour OneShotBehaviour ACLMessage

Vendeur
HandleInform HandleQuery HandleRequest RequestSale

Acheteur
HandleInform

Vendeur
HandleInform HandleQuery HandleRequest InformDone

Acheteur
HandleInform

UEST REQ

RM INFO

Droulement de la transaction
CyclicBehaviour OneShotBehaviour ACLMessage

Plan

Vendeur
HandleInform HandleQuery HandleRequest

Acheteur
HandleInform

Prsentation gnrale Les agents JADE La plateforme Concrtement Les principaux intrts Implmentation dans les dtails

Les principaux intrts


Perspectives

Compatible FIPA Communaut de plus en plus importante Excution distribue Excution concurrente des agents Communication transparente par message (ACL) Notion de services LEAP Relativement facile a utiliser

AgentCity MAIA ELIN

Architecture de filtrage Communication entre robots LEAP

Robotique Mobile

Plan

Prsentation gnrale Les agents JADE La plateforme Concrtement Les principaux intrts Implmentation dans les dtails

Dvelopper un systme agents Jade

Installer Jade

Excuter Jade

Installer Java (jdk 1.2 ou suprieure)

Lancer Jade avec la ligne de commandes :

Attention au path et au classpath Copier les classes Mettre a jour le classpath :


java jade.Boot java jade.Boot gui java jade.Boot gui [nom de lagent]:[classe de lagent] java jade.Boot gui [nom de lagent]:[classe de lagent]([Paramtres])

Installer le package Jade


Lancer Jade et la GUI

\jade \jade\Lib \jade\Lib\iiop.jar jade\Lib\jade.jar \jade\Lib\jadeTools.jar

Lancer un agent au dmarrage

Lancer un agent avec des paramtres

Installer vos agents comme des classes java classiques

Attention au classpath

Crer un agent

Crer un behaviour
Crer (tendre la classe behaviour ) public class myBehaviour extends SimpleBehaviour Creer le constructeur avec la super public myBehaviour(Agent agent) { super(agent);}

Etendre la classe jade.core.Agent

public class monAgent extends Agent Object[].getArguments() Enregistrer les langages de contenu Enregistrer les Ontologies Enregistrer les Services auprs du DF Dmarrer les Comportements (behaviors)

Traiter les paramtres de dmarrage

classe

Dans la mthode setup() (obligatoire)


Il existe diffrents types de behaviour tendre (simple, oneshot, cyclic, ) Crer la mthode action (obligatoire) qui correspond lexcution du behaviour

public void action() {<code du behaviour>}

Ajouter et dmarrer un behaviour

Crer et enregistrer un service

Dans la mthode Setup() de lagent Ajouter le behaviour Un behaviour ajout est demarr automatiquement

Creer une description du DF Agent


DFAgentDescription dfd = new DFAgentDescription() dfd.setName(this.getAID());

addBehaviour(new myBehaviour(this));

Creer la description du service


ServiceDescription sd = new ServiceDescription(); sd.setType(<nom_type_service>); sd.setName(<nom_service>);

Enregistrer le service auprs du DF Agent


dfd.addServices(sd); try {DFService.register(this, dfd);} catch (FIPAException e) {<code derreur>}

Rechercher des agents proposant une service


Envoyer un message simple


Creer une description du DF Agent Retrouver les agents dans un tableau Parcourir le tableau pour retrouver les agents

DFAgentDescription dfd = new DFAgentDescription(); DFAgentDescription[] result = DFService.search(this, dfd); for (int i=0; i<result.length; i++) { Iterator iter = result[i].getAllServices();

On rcupere toutes les descriptions de service


while (iter.hasNext()) { ServiceDescription sd =(ServiceDescription)iter.next(); <traitement sur les service>}}

Crer lagent qui envoi ce message Crer une instance de la classe ACLMessage avec un template (Inform, Query,) ACLMessage msg = new ACLMessage(ACLMessage.INFORM) Remplir lensemble des agents receveurs dans linstance 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);

Recevoir un message simple


Crer une ontologie de description de message (1/3)


Crer lagent receveur Crer le comportement (behaviour)de rception de message. Dclarer le ou les Templates (Inform, Query,) de message a recevoir private static final MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessag e.INFORM); Dans la mthode action()

Crer lobjet Java reprsentant le contenu du message. Crer lontologie de description reprsentant le message son nom et son vocabulaire (exemple avec la description dun objet Personne )

Crer une instance du message et le recevoir La reception peut tre bloquante, dans ce cas, utiliser

ACLMessage msg = myAgent.receive(mt); blockingReceive(mt) Ajouter le behaviour a lagent (dans setup() ) addBehaviour(new ReceiverBehaviour(this));

public class PersonOntology extends Ontology { public static final String ONTOLOGY_NAME = "Personontology"; 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 lobjet personne

Crer une ontologie de description de message (2/3)

Crer une ontologie de description de message (3/3)


import jade.content.onto.*; import jade.content.schema.*; public class PersonOntology extends Ontology { public public public public static static static static final final final final String String String String ONTOLOGY_NAME = "Person-ontology"; PERSON = "Person"; PERSON_NAME = "name"; PERSON_AGE = "age";

Une instance
private 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(); } }

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(); } }

Envoyer un message avec une ontologie


Recevoir un message avec une ontologie (1/2)


Crer lontologie de message Crer lagent envoyeur Dclarer le content manager,le codec et lontologie Envoyer le message en ajoutant lontologie
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);

Crer le comportement de reception Declarer CM, et le template du message Constructeur 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;}

public class ReceiverBehaviour extends CyclicBehaviour {

private ContentManager manager = (ContentManager)getContentManager(); private Codec codec = new SLCodec(); private Ontology ontology = PersonOntology.getInstance();

private ContentManager manager = myAgent.getContentManager(); private final static MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM);

public ReceiverBehaviour(Agent agent) { super(agent);}

10

Recevoir un message avec une ontologie (2/2)


Crer lagent receveur Declarer les CM, codec et Ontology


private ContentManager manager = (ContentManager)getContentManager(); private Codec codec = new SLCodec(); private Ontology ontology = MyOntology.getInstance();

Retour sur les Behaviours et les Protocoles

public class ReceiverAgent extends Agent {

Ajouter le comportement
protected void setup() { manager.registerLanguage(codec); manager.registerOntology(ontology); addBehaviour(new ReceiverBehaviour(this));}

Behaviours

Graphe d hritage
Behaviour

Une super classe

Behaviour
SimpleBehaviour ReceiverBehaviour CompositeBehaviour

De nombreuses spcialisations

cf. graphe d hritage ci-aprs


CyclicBehaviour OneShotBehaviour WakerBehaviour SequentialBehaviour ParallelBehaviour FSMBehaviour

SenderBehaviour

Retour sur Behaviour

Fonctionnement des Behaviours

Agent :

Constructeur :

void setup() void takeDown() ACLMessage receive([MessageTemplate mt]) ACLMessage blockingReceive([MessageTemplate mt[,long Timeout]]) void addBehaviour(Behaviour b)

Behaviour([Agent a]) void onStart() int onEnd() void action() boolean done()

Mthodes de gestion du cycle de vie:


11

Un peu plus loin

Problme des CompositeBehaviour

Mthodes intressantes :

void block([long millisecondes]) void reset() Behaviour root() Agent myAgent CompositeBehaviour parent

Pas d change entre les diffrents Behaviours composant le CompositeBehaviour Solution :

Attributs:

DataStore

DataStore

Fonctionnement du DataStore

DataStore = HashMap

Mthodes :

Partageable par plusieurs Behaviours

Dans Behaviour :

setDataStore(DataStore ds) DataStore getDataStore()

Object get(Object Key) Object put(Object Key,Object Value) Object remove(Object Key) boolean containsKey(Object Key) boolean isEmpty() int size() etc...

Problme du DataStore
Pas de typage

FSMBehaviour
Finite State Machine Behaviour

Automate dont les nuds sont des behaviours

mthode get retourne un Object ncessite un contrle fort sur les donnes

Enchaner squentiellement des Behaviours dans un ordre fix ou non par des transitions

12

Fonctionnement

Subtilits

Mthodes supplmentaires

Partager les donnes entre les Behaviours fils


Gestion des tats de l automate :


registerFirstState(Behaviour b,String name) registerLastState(Behaviour b, String name) registerState(Behaviour b, String name) registerDefaultTransition(String from,String to) registerTransition(String from, String to, int event)

Crer un DataStore dans le FSMBehaviour Le partager par tous les tats ACLMessage performative = int

Dterminer les valeurs des transitions

Gestion des transitions :


Protocoles

ContractNet :

Implment par deux FSMBehaviour :


ContractNetInitiator ContractNetResponder

Exemple
Initiator Responder1 Responder2 Responder3 cfp cfp cfp propose propose refuse accept-proposal reject-proposal inform

ContractNetInitiator
RECEIVE_CFP X PREPARE_PROPOSE_STATE X SEND_PROPOSE_STATE
PROPOSE

handleOutOfSequence() prepareResponse() HANDLE_OUT_OF_SEQUENCE_STATE

X X X RESET_STATE
REJECT_PROPOSAL TIMEOUT_EXPIRED

WAIT_ACCEPTANCE_STATE

ACCEPT_PROPOSAL

PREPARE_RESULT_NOTIFICATION_STATE X prepareResultNotification()

HANDLE_REJECT_STATE SEND_RESULT_NOTIFICATION_STATE X handleRejectProposal()

13

ContractNetResponder
PREPARE_CFPS X SEND_ALL X 0

prepareCfps()

A noter
DUMMY_FINAL

RECEIVE_REPLY X handleRefuse() handlePropose()


PROPOSE

handleOutOfSequence () X X HANDLE_OUT_OF_SEQ
NOT_UNDERSTOOD

X CHECK_REPLY
REFUSE

Notion de Conversation Slot protocol fixer dans les messages Doit prendre en compte :

HANDLE_PROPOSE
INFORM

HANDLE_REFUSE X X X

HANDLE_NOT_UNDERSTOOD
FAILURE

Reply-By (Deadline/Timeout) Reply-with (???)

handleNotUnderstood() X X

HANDLE_INFORM handleInform ()

HANDLE_FAILURE handleFailure ()

CHECK_ALL_REPLIES_RECEIVED

ALL_RESPONSES_RECEIVED ALL_RESULT_NOTIFICATION_RECEIVED

HANDLE_ALL_RESPONSES

HANDLE_ALL_RESULT_NOTIFICATIONS

Bibliographie

http://jade.cselt.it/ Tutoriel de Jiri Vokrinek. http://agents.felk.cvut.cz/teaching/ui2/JADEtuto rial.doc

14

Vous aimerez peut-être aussi