Mathieu Castets Master 2 TI Année 2012-2013 Rapport – Fishmarket UE Systèmes Multi-Agents Introduction Ce dossier présente le programme implémentant le protocole d’enchère au poisson (Fishmarket) vu en cours grâce aux agents. Le code fourni en annexe ainsi que le programme implémente le protocole dans la version la plus avancée « Plusieurs enchères, un vendeur et un nombre quelque de preneurs par enchère » Architecture du programme Le projet Fishmarket a été développé sous l’IDE NetBeans. Il est découpé en 3 paquetages comme le montre la figure ci-contre. Package « agents » Ce package contient les 3 agents nécessaires pour utiliser le protocole. Chaque instance d’agent à sa propre interface graphique. Le fichier Buyer.java contient le code de l’agent Acheteur. Le fichier Market.java contient le code de l’argent Marché, aussi appelé Modérateur. Ce fichier est au centre du protocole, il gère le protocole d’enchère et fait la liaison entre les agents acheteurs et vendeurs. Package « gui » Ce package contient les interfaces graphiques pour chaque agent. On retrouve donc logiquement 3 fichiers : un fichier pour chaque agent. Package « utils » Ce package contient des classes utilisées pour communiquer entre les agents. Le fichier Bid.java représente une enchère et contient forcement l’identifiant de l’agent vendeur et le montant de son enchère et peut contenir éventuellement l’identifiant d’un agent preneur. Le fichier Message.java représente le contenu d’un message ACL dans JADE. Cette classe est sérializable et nous permet, de passer en paramètre d’un message ACL de nombreuses informations (action à réaliser, enchère correspondante, …) plutôt qu’une simple chaine de caractères. Mathieu Castets Master 2 TI Année 2012-2013 Ces classes servent à formaliser les paramètres que les agents doivent s’échanger. Par exemple, lors d’une annonce, le vendeur diffusera, via un objet de notre classe Message, une enchère (= un objet de notre classe Bid). Choix de conception/Informations additionnelles Lorsqu’un agent a choisi son mode de contrôle, il récupère la liste de toutes les enchères en cours en faisant une demande de type TO_SUBSCRIBE au modérateur. Lorsqu’un agent participe à une enchère, il doit attendre une réponse (positive s’il reçoit un message de type TO_ATTRIBUTE ou négative) pour pouvoir participer à une autre enchère. Deux modes de contrôle d’un agent acheteur sont proposés (automatique ou manuel), le choix de ce mode se fait dans un 1er écran et ne peut plus être modifié par la suite comme le montre les captures d’écrans ci-dessous. En bas de l’interface des agents vendeurs et acheteurs se trouve un espace qui a été réservé aux messages d’informations afin de pouvoir suivre plus aisément le déroulement des enchères et d’avoir des retours sur ce qu’il se passe. Lors du lancement du programme, les interfaces des agents seront à gauche, celle du modérateur sera centrée tandis que les interfaces des vendeurs se trouveront à droite. Cependant il se peut que les fenêtres d’une même catégorie d’un agent se superposent car leur placement vertical est aléatoire. Figure 1 - Initialisation et choix du mode de contrôle pour les acheteurs 2 Mathieu Castets Master 2 TI Année 2012-2013 Figure 2 - Capture d'écran du programme après initialisation 3 Mathieu Castets Master 2 TI Année 2012-2013 Directives d’exécution Le programme a été développé avec NetBeans, il est donc facile de l’exécuter sous cet environnement : 1. Importer le projet dans NetBeans 2. Créer une configuration de lancement spécifique comme ci-dessous : La liste des arguments complète est : -gui -local-host 127.0.0.1 "Victor:agents.Seller(modo);Vincent:agents.Seller(modo);Aurore:agent s.Buyer(modo);Anne:agents.Buyer(modo);modo:agents.Market" Il est important de préciser le nom de l’agent Marché (ici modo) en paramètre des agents vendeurs et acheteurs. Cette liste peut être modifiée à votre convenance si vous voulez plus ou moins d’agents vendeurs/preneurs. 3. Construire/Run le projet Bien que la méthode NetBeans soit celle que je vous conseille le plus, il est aussi possible de se passer de NetBeans en configurant le CLASSPATH pour les libraires de jade puis en se plaçant dans le dossier des sources .java (Fishmarket/src) et en lançant la commande suivante : java jade.Boot -gui -local-host 127.0.0.1 "Victor:agents.Seller(modo);Vincent:agents.Seller(modo);Aurore:agent s.Buyer(modo);Anne:agents.Buyer(modo);modo:agents.Market" 4 Mathieu Castets Master 2 TI Année 2012-2013 Spécification du comportement Vendeur Acheteur 5 Mathieu Castets Master 2 TI Année 2012-2013 Spécification de modérateur Le Réseau de Pétri est le même que celui vu en TD. Malheureusement, je n’ai pas réussi, par manque de temps, à trouver un outil gratuit permettant de dessiner des réseaux de Pétri celui-ci sur ordinateur, je me permets d’emprunter celui-ci. Figure 3 - Source : http://seminaire-verif.enseeiht.fr/FAC/2000/Papiers/9sibertin.pdf 6