Rapport du projet A4MA Une application de commerce électronique en utilisant CLAIM Étudiants : DINH Quang Ninh (dinhquangninh@gmail.com) PHAM Trong-Tôn (trongtonfr@yahoo.fr) Wiki : http://dev.deptrai.org/wiki/doku.php?id=projet_a4ma:start Janvier 2005
Rapport du projet CLAIM cours A4MA Master2 IAD 1. Introduction Ce projet vise à démontrer l application du système multi-agents (SMA) dans une application réelle: simulation de l activité de commerce électronique sur Internet. Trois acteurs principaux dans ce contexte sont : le marché (classe Market), l acheteur (classe Buyer) et le client (classe Client). Ces trois derniers sont interagir dans un environnement virtuel afin d atteindre son but dans une transaction de commerce électronique. Dans cette application, on concentre à l interaction, la communication, la mise a jour la connaissance et la mobilité des agents autonomes. Ce projet est réalisé dans le cadre du cours «Apprentissage automatique, agents autonomes et multi-agents» de Master 2 Recherche IAD. Dans ce cadre, nous allons implémenter le système E- Commerce sur le plateformes d agent mobiles SyMPA en utilisant le langage de programmation orienté d agent CLAIM développés par Alexandru Suna du Laboratoire d Informatique de Paris 6 (LIP6). 1. Etat de l'art : CLAIM et SyMPA 1.1.Langage CLAIM CLAIM est un langage de programmation orientée d agents mobiles. Il permet de développer des agents intelligents, communicants et mobiles. C'est-à-dire il peut avoir de compétences de gestion les processus concurrents et de migration de manière autonome vers d autres agents. Un agent contient aussi les éléments cognitifs comme les connaissances, les buts et ses capacités qui permet de raisonnement réactif ou de raisonnement proactif. Un agent peut-être inclus dans un autre agent et peut aussi contenir d autres agents. Figure 1 représente l architecture d un agent dans CLAIM. parent Knowledge Effects Goal Output Messages Capabilities Input Messages sub-agents Figure 1 : Architecture du CLAIM Un système multi-agents (SMA) est un ensemble de hiérarchies distribuées sur plusieurs ordinateurs connectés en réseau. Chaque agent joue un rôle comme un nœud dans cette structure hiérarchique. 2
Rapport du projet CLAIM cours A4MA Master2 IAD Le langage CLAIM permet ainsi de provoquer une fonction JAVA dans sa définition de classe. Cette possibilité étend la capacité de langage CLAIM dans les applications plus compliquées sans trop d effort de programmation. On peut compiler les fonctions statique en JAVA et puis les provoquer avec le syntaxe Java(VotreClasse.votreFonction(param)). 1.1.Plateforme SyMPA SyMPA est un système multi plateforme d agents implémenté en langage JAVA. L architecture du SyMPA est compatible avec les spécifications de MASIF (une norme proposée pour Object Management Group). La main d avantages du SyMPA est de supporter d implémenter des agents en langage de programmation d orientée d agent dont CLAIM a été développé pour ce but. Le plateforme SyMPA offre les outils les fonctions suivantes : Un éditeur pour la conception des définitions d agents CLAIM Compilateur pour langage CLAIM Gestion et exécution d un système multi-agents distribué Un environnement sécurisé : authentification, permissions, cryptage, audit et tolérance aux pannes. La plate-forme SyMPA n est pas évidence à utiliser au début. Pourtant, il supporte bien la gestion des agents mobiles. Après avoir édité les définitions des classes de l application, il faut ouvrir ce fichier.adf en utilisant la fonction Open du menu d un système d agents. Ensuite il faut compiler les définitions en utilisant la fonction Run du menu Execution. Lorsque les classes d agents sont crées, on peut instancier des agents à partir des classes définies, en utilisant le menu : Execution Add Agent. Les interfaces graphiques des agents permettent de visualiser leur exécution View Agent (état interne, communication et mobilité). 2. Développement du système multi-agents ECommerce 2.1.Conception générale Prendre la connaissance de la demande du sujet, nous avons modélisé le problème par le diagramme dans Figure 5. Figure 5 : Modélisation du système E-commerce 3
Rapport du projet CLAIM cours A4MA Master2 IAD Nous avons décidé d'implémenté un système plus évolué que la demande, dans la quelle la somme d'argent du client ne dépasse jamais, et chaque Client peut avoir plusieurs Buyers exécutants en même temps. Le Market Les agents Markets sont créés auparavant. Leurs connaissances sont initialisés à partir un fichier en utilisant la fonction Ecommerce.getKnowledge. Ce fichier contient le budget du Market, la liste des produits offerts avec sa quantité et son prix. Il est capable de répondre aux acheteurs s'il est suffisamment quantité d'un produit à vendre grâce à sa capacité askname. Quand un acheteur lui demande à vendre un produit, il est capable de le vendre (sell) en diminuant sa stockage, et envoyer à acheteur l'addition indiquant le nom de produit vendu, sa quantité, son prix, et le montant à payer. A l'aide de la capacité receivemoney, il peut recevoir le paiement l'acheteur et mettre à jours son budget. Le Client Le Client lit la liste des produits à partir d un fichier grâce à la fonction Java Ecommerce.getKnowledge. Après avoir créé tous les agents Buyers dans ses connaissances, il les démarre en leur envoyant le message start(). Le Client reçoit la confirmation des produits à rechercher par les Buyers, et les ajoute dans ses buts (goals) grâce à la capacité receivegoal. Tous les buts de Client sont atteints lorsqu'il reçoit tous les produits souhaités à partir des agents Buyer. Le Buyer La tâche principale de l agent Buyer est d intégrer dans tous les agents Market existés (message findmarket()) afin de choisir le meilleur prix pour un produit par le fonction de JAVA ECommerce.findBestMarket(). Dans ce processus le Buyer doit interroger ainsi le Market s il possède suffisamment de produit à vendre en vérifiant la condition booléen ECommerce.haveEnoughProd(). Si toutes les conditions sont vérifiées, le Buyer va migrer (envoyer message prédéfini moveto()) dans ce Market et exécuter la transaction de commerce. Sinon, la capacité nomoney lui permet l'abandonner en recherchant autre Market avec autre produit à y aller. La capacité pay sert à simuler un paiement électronique virtuel entre les deux agents. Apres la transaction, les deux agents sont mise a jour leurs connaissances (nombre de produit et la somme d agent) par le message prédéfini tell() de CLAIM. Enfin, l agent Buyer retourne a son créateur Client les produits achetés en envoyant le message give. 2.2.Développement du système en CLAIM Le Système se compose de 3 classes d'agent principales: Client, Buyer et Market. Nous avons développé une classe additionnelle, la class Simulateur, afin de simplifier la lancement du système. La classe Simulateur Cet agent est créé pour lancer la simulation du système multi agent defineagentclass Simulateur(?f){ capabilities={ initmarket{ message=initmarket(); 4
initclient{ message=initclient(); processes={java(ecommerce.getknowledge(this,?f)).send(this,initmarket()).send(this,initclient()) Rapport du projet CLAIM cours A4MA Master2 IAD Les capacités initmarket et initclient ont pour but de créer tous les agents Markets et Clients définit dans le fichier de connaissance. Le format du contenu de ce fichier est [Market(?name,?file)]* [Client(?name,?file)]* La classe Client L'agent Client soit créé par l'agent Simulateur, soit créé directement par utilisateur. defineagentclass Client(?f){ //?f: le fichier configuration capabilities={ startbuyer{ //Démarrage des Buyers receivegoal{ //Confirmation des goals receiveprod{ //Recevoir des produits achetés checkgoal{ //Examination ses goals processes= { // Initialisation des connaissances La classe Buyer Cette classe est créée par Client, les arguments sont son budget et un fichier contient tous les produits à acheter defineagentclass Buyer(?money,?file){ knowledge= {money(?money); capabilities { askname{ // Demande de nom des Markets ayant suffisant produit ackmarket{ // Prise en compte ses Markets findmarket{ // Recherche les meilleurs Markets preparetogo{ // Chosit d'un Marrket pour y aller gotobuy{ // s'intégrer, et acheter le produit nomoney{ // dans le cas il n'a pas assez d'argent pay{ // Paiement, reception, et transfert le produit à son créateur processes={ //Initialisation 5
Rapport du projet CLAIM cours A4MA Master2 IAD Chaque ligne dans ce fichier représente un produit, donc le premier argument est son nom, et la deuxième est sa quantité [needproduct(?name,?quantity);]+ La classe Market La classe Market représente le marché dans le système. Elle est créée soit par la classe Simulateur ; soit directement par utilisateur. A la création ; il charge ses connaissances à partir d un fichier defineagentclass Market(?file){ //?file: fichier configuration capabilities { answer{ // réponse au acheteur s'il a sufisamment produit à vendre sell{ // vendre un produit. receivemoney{ //Reception d'argent. processes={ Le fichier de configuration contient son budget et tous les produit qu il a money(?money); [haveproduct(?name,?quantity,?priceunit);]+ 2.3.Les fonctions Java du ECommerce.java L implémentation Java est pour but d ajouter les fonctionnalités qu ils ne sont pas possibles de programmer en CLAIM. Nous avons réutilisé le fichier ECommerce.java offert, ajouté des commentaires pour qu il soit plus compréhensible, et écrit des fonctions nécessaires. Les fonctions principales sont: public static void addgoal (Agent a, String gname, String args1, String args2) Ajouter le goal de type gname(arg1,arg2) au agent a public static int getmoney(agent a) Retourner la somme d argent d un agent public static boolean haveenoughmoney (Agent a, int qt, int price) Pour tester si l agent a a suffisant d argent pour acheter un produit avec quantité qt, prix par unité price public static boolean haveenoughprod (Agent a, String pname, int qp) Vrai si l agent a de type Market a suffisant produit pname pour la demande d une quantité qp public static int getproductquant 6
(Agent a, String pname) Retourner la quantité du produit pname de l agent Market a public static int getproductprice (Agent a, String pname) Retourner le prix du produit pname de l agent Market a 3. Teste fonctionnalité Rapport du projet CLAIM cours A4MA Master2 IAD Nous avons créé des fichiers exemplaires pour les testes. Ils sont dans le répertoire Files. Pour lancer des testes; il suffit de les mettre dans le répertoire Sympa et puis créer un agent Simulateur avec sa fichier configuration correspondante. Teste 1: 1 Client 1 Buyer n Markets Pour lancer la teste, créer un agent Simulateur avec le fichier simu1. Le Buyer a suffisamment d'argent pour acheter tous les produits. Il y a trois Markets en concurrents de certains produits. Le Buyer achète le produit du Market ayant suffisant quantité, et ayant le prix le moins chers. Teste 2: 1 Client 1 Buyer n Markets Pour lancer la teste, créer un agent Simulateur avec le fichier simu2. Le Buyer n'a pas assez d'argent pour acheter tous les produits. Les Markets sont les même dans la teste 1. Le Buyer n'achète pas le produit qu'il n'a pas suffisant d'argent. Teste 3: 1 Client n Buyer n Markets Pour lancer la teste, créer un agent Simulateur avec le fichier simu3. C'est la teste mélangé les deux teste précédant, donc un Buyer on assez d'argent pour tous acheter, l'autre n'en a pas. Chaque Buyer achète des produits différents. Il y a 5 Markets en concurrents. 4. Observations et propositions Editeur 4.1.SyMPA Pas de prévention de sauvegarder le fichier de définition édité. 7
Rapport du projet CLAIM cours A4MA Master2 IAD Ajouter la fonction «highlight» et bloque de code facile à percevoir le code réutiliser les éditeur de code open-source en Java sur l Internet (http://www.jcreator.com/, http://www.jext.org/) Supporter multi-document éditer simultanément plusieurs ficher de définition Compileur Pas de message d erreur apparaître le fenêtre d information Temps de compiler un fichier est assez longue optimiser le parseur?? Tracer de l erreur n est pas très intuitive imprimer la ligne du code en train de «parsing» Central System Peu de fonctionnalité sauf visualisation des agents ajouter les fonctions de gestion des clients connectée : Start : démarrer agent Stop : arrêter agent Ilde : arrêter temporel agent 4.2.CLAIM Impossible d ajouter les commentaires dans la définition de classe Définir une norme pour la représentation de la connaissance 5. Conclusions Ce projet nous emporte une vue pratique de la fonctionnalité d un système multi-agent. Ceci nous aide à clarifier le côté de la théorie et la recherche actuelle dans ce domaine. En travaillant avec la plate-forme SyMPA et le langage CLAIM, nous constatons que c est un système riche en fonction, flexible et extensible bien qu ils doivent encore développer et raffiner. Dans l application de commerce électronique, nous avons implémenté un système bien complet en utilisant au maximum les ressources fournies. Ce système est déployé sur la plate-forme de SyMPA en utilisant langage de programmation orientée d agent CLAIM. En plus, nous avons essayé d étendre le système en ajoutant les nouvelles fonctions pour qu il marche plus réellement. Les scénarios de cette application sont encore simples. Mais il réflexe essentiellement la procédure de commerce électronique actuel. On peut toute fois développer un système plus avancé pour servir à l application dans la réalité basé sur cette idée. Bref, en réalisant ce projet nous avons acquis la connaissance sur des différentes architectures du système multi-agents, ainsi que, la compétence de développement d un système multi-agents sur un système concret. 8