Planification et coordination multiagents sous incertitude Aurélie Beynier CoCoMa, Master 2 ANDROIDE 4 novembre 2014
Les plateformes agents Faciliter la mise en place d applications basées sur les systèmes à base d agents. Permettre le déploiement de ces applications sur différents systèmes, réseaux de communication... Assurer la gestion d opérations telles que la migration des agents ou la communication. Permettre l intégration des systèmes développés avec d autres technologies
: Présentation Plateforme pour le développement d applications à base d agents API Java Développée depuis 1998 par Telecom Italia (Open Source depuis 2000, licence LGPL) Basée sur les spécifications FIPA fournit des fonctionnalités, indépendantes d une application spécifique, afin de simplifier la réalisation d applications distribuées à base d agents (gestion des envois de messages entre agents, de la mobilité des agents, etc.)
Paradigmes Un agent est autonome et proactif : chaque agent s exécute sur un thread qui lui est propre. Il contrôle son cycle de vie et décide de manière autonome comment agir. Les agents peuvent communiquer : La communication est basée sur des envois de messages asynchrones. Il n y a pas de dépendances temporelles entre les agents. Les destinataires peuvent choisir de traiter certains messages et pas d autres. Il n y pas de blocage du côté de l expéditeur.
Paradigmes (2) Système pair à pair : Chaque agent est identifié par un nom unique (Agent Identifier, AID). Il peut entrer ou quitter la plateforme n importe quand. Il est possible de découvrir de nouveau agent grâce à un système de pages blanches (AMS) et de pages jaunes (DF). Chaque agent peut émettre ou recevoir des messages à n importe quel moment.
Architecture Une plateforme est composée de containers pouvant être distribués sur un réseau. Un container contient des agents et procure tous les services nécessaires à l exécution des agents. Plusieurs containers peuvent être créés sur une même machine. Chaque container correspond à un processus JAVA (une JVM). 1 agent correspond à un thread Java. Il est possible de faire communiquer des agents appartenant à des containers différents.
Architecture (2) Le main container est créé lors du lancement de la plateforme. Tous les autres containers sont lancés à partir de celui-ci. Il gère la table des containers (CT) à laquelle s enregistre chaque container lorsqu il est créé. Il gère la table des descripteurs des agents (GADT, Global Agent Descriptor Table) : enregistre chaque agent présent dans la plateforme, leur localisation et leur état. Il gère les pages blanches et les pages jaunes.
Architecture (3) AMS : Agent Management System Pages blanches Chaque agent doit s enregistrer auprès de l AMS afin d obtenir un AID valide (géré par la plateforme) DF : Directory Facilitator Pages jaunes Chaque agent peut enregistrer les services qu il propose auprès du DF. Un agent peut également demander à être informé lorsque certaines modifications sont réalisées (ajout ou suppression d un certain service par exemple). L AMS et le DF sont implémentés par des agents.
Création d agents Afin de créer un nouveau type d agents, il est nécessaire de définir une classe héritant de la classe Agent de. Cette classe doit implémenter la méthode setup() qui contient l initialisation de l agent. Il est possible de spécifier des arguments lors de la création de l agent. Ces arguments peuvent être obtenus dans la classe Agent à l aide de la méthode getarguments Les arguments doivent alors être spécifiés lors de la création de l agent En ligne de commande : séparés par des espaces et entourés de parenthèses Avec GUI : dans le textarea prévu à cet effet.
Création d agents (2) import jade.core.aid; import jade.core.agent; public class HelloWorldAgent extends Agent { } } public void setup(){ System.out.println("Hello, my name is "+ getlocalname()); Compiler la classe avec Java puis créer un agent dans avec cette classe.
Création d agents (3) propose différents agents prédéfinis : DUMMY AGENT : Permet l envoi de messages à des agents. Utile lors de la conception afin de vérifier la réaction d un agent à la réception d un message. SNIFFER AGENT : Permet de visualiser l enchaînement des messages entre les agents. Représentation graphique de l échange des messages. Les agents à sniffer peuvent être sélectionnés. INTROSPECTOR AGENT : Permet de débugger le comportement d un agent Permet de savoir quels comportements d un agent sont exécutés, dans quel ordre, quand?
Ajout de comportements Un agent peut avoir un ou plusieurs comportements. Un agent n exécute qu un seul comportement à la fois. C est au concepteur de gérer l alternance des comportements des agents. Pour ajouter un comportement à un agent : addbehaviour() Pour définir un comportement : Étendre une des classes de jade.core.behaviour : Behaviour OneShotBehaviour CyclicBehaviour
Ajout de comportements (2) Quelle que soit la classe dont on hérite, il faut implémenter les méthodes : public void action() public boolean done() Lorsque le comportement d un agent est exécuté, la méthode action() de son comportement est exécutée jusqu à ce qu elle se termine (elle ne s interrompt pas pour laisser l exécution à un autre comportement) attention aux boucles infinies dans la méthode action(). La méthode done() indique si le comportement s est exécuté complètement et peut être retiré de l ensemble des comportements que l agent exécute.
Ajout de comportements (3) Tout comportement hérite des méthodes onstart() et onend() de la classe Behaviour. La méthode onstart() est appelée avant l exécution de la méthode action(). La méthode onend() est appelée après la méthode done() lorsque celle-ci retourne true. Les classes WakerBehaviour et TickerBehaviour permettent d implémenter des comportements qui se produisent à certains moments (par exemple, 10 secondes après la création de l agent ou toutes les 10 secondes).
Ajout de comportements (4) Il est possible de composer des comportements : SequentialBehaviour : comportements fils exécutés dans l ordre de leur ajout FSMBehaviour : définition d une machine à états finis où les états sont des comportements, les transitions dépendents des valeurs de terminaison des comportements ParallelBehaviour : comportements fils exécutés en parallèle
Communication entre agents Messages FIPA-ACL : émetteur du message (AID) liste des destinataires {AID} performatif (REQUEST, INFORM, QUERY IF,...) contenu, langage, ontologie, éventuelles informations additionnelles (id de conversation, reply-with,...)
Communication entre agents (2) ACLMessage msg = new ACLMessage(ACLMessage.INFORM); msg.addreceiver(new AID("Peter", AID.ISLOCALNAME)); msg.setlanguage("francais"); msg.setontology("conversation"); msg.setcontent("bonjour, comment ca va?"); send(msg);
Communication entre agents (3) Les agents doivent gérer eux-mêmes leur boîte aux lettres Relever la boîte aux lettres avec receive() Gestion FIFO ACLMessage msg = receive(); if(msg!= NULL){ // Traiter le message }
Communication entre agents (4) Message bloquant : permet à un comportement d être suspendu jusqu à l arrive d un message public void action(){ ACLMessage msg = myagent.receive(); if(msg!= null){ // comportement à exécuter }else{ block(); } }
Lancer Depuis un terminal : java -cp jade.jar:. jade.boot -gui -host localhost -port 8888 Peter:HelloWorldAgent Depuis un programme Java : Création d un runtime Lancement de la plateforme Création des agents
Lancer /* Création du runtime*/ Runtime rt = Runtime.instance(); /*Lancement de la plateforme*/ Profile pmain = new ProfileImpl("localhost", 8888, null); AgentContainer mc = rt.createmaincontainer(pmain); /* Lancement d un agent */ AgentController ac = mc.createnewagent("peter", HelloWorld.class.getName(), null); ac.start();
Utilisation de Installation Installer Java Télécharger et décompresser la dernière version de (http://jade.tilab.com/) Modifier votre CLASSPATH Tutorial : http://jade.tilab.com/doc/tutorials/programming -Tutorial-for-beginners.pdf