Planification et coordination multiagents sous incertitude - JADE
Transcription
Planification et coordination multiagents sous incertitude - JADE
Planification et coordination multiagents sous incertitude Planification et coordination multiagents sous incertitude JADE Aurélie Beynier CoCoMa, Master 2 ANDROIDE 4 novembre 2014 Planification et coordination multiagents sous incertitude JADE 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 Planification et coordination multiagents sous incertitude JADE JADE : 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 JADE 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.) Planification et coordination multiagents sous incertitude JADE 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. Planification et coordination multiagents sous incertitude JADE 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. Planification et coordination multiagents sous incertitude JADE Architecture Une plateforme JADE 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. Planification et coordination multiagents sous incertitude JADE 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. Planification et coordination multiagents sous incertitude JADE 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. Planification et coordination multiagents sous incertitude JADE 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 JADE. 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. Planification et coordination multiagents sous incertitude JADE 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 JADE avec cette classe. Planification et coordination multiagents sous incertitude JADE Création d’agents (3) JADE 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? Planification et coordination multiagents sous incertitude JADE 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 Planification et coordination multiagents sous incertitude JADE 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. Planification et coordination multiagents sous incertitude JADE 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). Planification et coordination multiagents sous incertitude JADE 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 Planification et coordination multiagents sous incertitude JADE 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, ...) Planification et coordination multiagents sous incertitude JADE 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); Planification et coordination multiagents sous incertitude JADE 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 } Planification et coordination multiagents sous incertitude JADE 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(); } } Planification et coordination multiagents sous incertitude JADE Lancer JADE 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 Planification et coordination multiagents sous incertitude JADE Lancer JADE /* 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(); Planification et coordination multiagents sous incertitude JADE Utilisation de JADE Installation Installer Java Télécharger et décompresser la dernière version de JADE (http://jade.tilab.com/) Modifier votre CLASSPATH Tutorial : http://jade.tilab.com/doc/tutorials/JADEProgramming -Tutorial-for-beginners.pdf