MadKit: Multi-Agents Developpement Kit

Page réalisé par: Mohamed MAHJOUBI

1. Introduction 2. Modèle organisationnel 2-1. Agent 2-2. Groupe 2-3. Rôle 3. Architecture 3-1. Principes 3-2. Le micro-noyau agent 3-2-1. Fonctionnalités 3-2-2. Mécanismes de passage au meta-niveau 3-3. Structure et fonctions d'un agent 3-3-1. Fonctionnalités 3-3-2. Messages 3-3-3. Threads et moteur synchrone 4. Déclinaison 4.1 Modèles d'agents 4.2 Agentification des services 4.3 Applications hôtes 5. Conclusion 6. Références
1. Introduction

La plateforme MadKit (« Multi-Agent Development Kit »), a été conçue en 1996 par Olivier GUTKNECHT et Michel FERBER pour exploiter exclusivement les avantages de la programmation multi-agents. Elle est implémenté en java et a l'originalité d'être basé sur un modèle organisationnel plutôt qu'une architecture d'agent ou un modèle d'interaction spécifique. L'utilisation de groupes et de rôles associés à des agents est mis en œuvre tant en tant qu'outil de modélisation et de conception pour les développeurs de systèmes multi-agents, que de principe d'architecture de la plate-forme elle-même.
Cette architecture est basée sur un noyau agent minimal découplé de tout modèle individuel d'agent. Dans cette plate-forme, les services classiques de passage de message distribués, de migration ou de surveillance sont fournis au meta-niveau par des agents spécialisés afin d'obtenir un maximum de flexibilité. Une interface graphique componentielle et découplée du noyau et des agents permets de supporter différentes modes d'utilisation et d'exploitation de la plate-forme. 

Haut

2 Modèle organisationnel

MadKit est basé sur un modèle organisationnel; Chaque agent est une entité autonome et communicante qui joue un ou plusieurs rôles dans un ou plusieurs groupes. Chaque groupe permet un rapprochement de certains agents ayant des affinités de communication ou de fonctionnalité. Les communications entre agents sont autorisées uniquement au sein d'un même groupe. Les rôles des agents représentent leurs capacités à effectuer un service pour un groupe donné. Un agent peut avoir plusieurs rôles et appartenir à plusieurs groupes en même temps, ce qui offre des possibilités de communication entre groupes ou alors un agent mixte peut servir d'intermédiaire entre deux groupes distincts

FIG. 1 - Le Modèle Organisationnel
Haut

2.1 Agent

Quasiment aucune contrainte n'est posée sur l'architecture interne ou le modèle de comportement de l'agent. L'agent est simplement décrit comme une entité autonome communicante qui joue des rôles au sein de différents groupes. La très faible sémantique associée à l'agent dans ce modèle est tout à fait volontaire. L'optique est bien de laisser la définition d'agent en retrait, non seulement pour ne pas prendre part dans le débat classique de « qu'est-ce qu'un agent », mais surtout pour laisser au concepteur toute liberté pour choisir l'architecture interne appropriée à son domaine applicatif.
Cette liberté se retrouvera dans les principes de MadKit

2.2 Groupe

Le groupe est la notion primitive de regroupement d'agents. Chaque agent peut être membre d'un ou plusieurs groupes. D'une façon un peu simpliste, un groupe peut être vu comme un moyen d'identifier par regroupement un ensemble d'agents. Plus classiquement, associé au rôle, il définira la structuration organisationnelle d'un SMA usuel. Les différents groupes peuvent se recouper librement.

2.3 Rôle

Le rôle est une représentation abstraite d'une fonction, d'un service ou d'une identification d'un agent au sein d'un groupe particulier. Chaque agent peut avoir plusieurs rôles, un même rôle peut être tenu par plusieurs agents, et les rôles sont locaux aux groupes. L'hétérogénéité des situations d'interaction est rendue possible par le fait qu'un agent peut avoir plusieurs rôles distincts au sein de plusieurs groupes, les communications étant clôturées par les groupes. 

Haut

3 Architecture

3.1 Principes

La structure organisationnelle que nous venons de décrire est implémentée au coeur de la plate-forme MADKIT, tant pour fournir un modèle organisationnel aux SMA exécutés que pour le fonctionnement interne du système. L'utilisation de groupes d'agents pour la structuration de plate-formes a été proposée dans d'autres architectures, bien que ces mécanismes sont limités aux problèmes de migration et ne possèdent pas ce trait distinctif de prise en compte de groupes et rôles simultanés pour un agent donné. En plus de ce modèle d'organisation, MadKit est basé sur trois principes :

Concrètement, MadKit est un ensemble des packages Java qui implémentent le noyau agent, diverses bibliothèques de base de messages, d'agents et de sondes. Le choix de Java a été fait très tôt pour des raisons de portabilité, mais également pour la richesse des bibliothèques de bases, les possibilités de sérialisation d'objets et de présence de réflexivité, même sommaire.

FIG. 2 - L'Architecture Générale du MadKit

Haut

Le principe essentiel de MADKIT est d'utiliser partout où cela est possible la plateforme pour sa propre gestion et exécution. Tous les services hors ceux assurés par le micro-noyau sont implémentés par des agents à part entière. Ceci vient à la fois d'un souci d'unicité de modèle, mais également de mise à l'épreuve des SMA comme modèle de programmation. Cela le rapproche également fortement des approches meta en architectures objets à ceci près que nous plaçons la relation au meta entre agents applications et "systèmes" (communication, ordonnancement, surveillance...). MadKit n'est pas une plate-forme agent dans le sens classique, centrée autour d'un modèle particulier d'agent ou d'interaction. La taille réduite et les fonctionnalités du noyau de base, la neutralité des types agents, associée à ce principe de services agentifiés et de découplage par rapport aux applications "hôtes" permet en fait d'obtenir toute une gamme d'environnements d'exécutions aux finalités parfois complètement opposées.

Haut

3.2 Le micro-noyau agent

Le "micro-noyau" de MADKIT est un environnement d'exécution d'agents de taille réduite (moins de 40 Ko). Le terme "micro-noyau" est utilisé ici intentionnellement comme référence au modèle des systèmes d'exploitation à micro-noyau.

3.2.1 Fonctionnalités

Le noyau ne prend en charge que les fonctions suivantes :

Le noyau lui-même est en fait encapsulé dans un agent particulier, le KernelAgent qui est créé automatiquement à l'amorçage de la plate-forme. Il agit comme représentant du noyau dans le monde agent : toutes les demande de surveillance ou de contrôle sont alors écrites comme une interaction inter-agent et préservent l'unicité du modèle

Haut

3.2.2 Mécanismes de passage au meta-niveau

Le noyau lui-même est extensible par des "hooks", des points d'interceptions sur ses opérations. Un agent autorisé (par exemple en ayant rempli les conditions d'accès au groupe "système") a la possibilité de demander un accès à l'un de ces hook. La demande se fait par une interaction agent avec le KernelAgent mentionné plus haut.
Ce hook sont un mécanisme de publication/abonnement qui permettent soit la surveillance, soit l'interception des opérations. Quasiment toutes les fonctionnalités de base du noyau (lancement d'un agent, accès et modifications à la structure organisationnelle, passage de message) sont concernées. Cela permet donc d'écrire facilement des agents d'analyse d'un SMA en fonctionnement, ou bien des agents étendant les fonctionnalités de base de la plate-forme.
Le nombre réduit de fonctionnalités bien définies favorise la modification du comportement des opérations de base tout en préservant au maximum leur sémantique. Pour toute opération noyau, il existe deux types de hooks :

L'autre mécanisme d'extension du noyau consiste à invoquer manuellement des opérations de base. Dans ce cas, ce sont des agents habilités qui enverront une demande au KernelAgent pour que le noyau effectue une opération. Par exemple, un agent de communication réinjectera par ce biais les messages venus d'une machine distante dans le noyau local.

Haut

3.3 Structure et fonctions d'un agent

La classe de base d'un agent MadKit (AbstractAgent), définit quelques fonctionnalités de base pouvant être nécessaires dans les modèles classiques.

3.3.1 Fonctionnalités

Les fonctions associées à tout agent sont :

Haut

3.3.2 Messages

Les messages sont définis par héritage à partir d'une classe de base qui ne définit que la notion d'émetteur et destinataires. Certain messages de base sont néanmoins fournis (encapsulation d'une chaîne ou d'un objet arbitraire, messages KQML et FIPAACL, messages XML), mais restent extensibles pour s'adapter à tout protocole d'interaction.

3.3.3 Threads et moteur synchrone

Pour faciliter les implémentations de modèles classique d'agents autonomes, cette classe de base est déclinée vers une implémentation associant un thread d'exécution à un agent.
Néanmoins, pour certains types de systèmes, en particulier les SMA réactifs, il est nécessaire de gérer un grand nombre d'agents (jusqu'à centaines de milliers) de granularité assez fine, et de contrôler leur ordonnancement. Cela est quasi-impossible si l'on se repose sur un mécanisme de thread à cause de la surcharge induite. Dans ce cas, on utilise ces agents "synchrones" via des agents externes qui vont définir leur politique d'exécution synchrone. Des agents d'observation peuvent être ajoutés pour avoir une vue globale sur certaines propriétés, à l'instar des plateformes classique de simulation comme CORMAS ou Swarm.

FIG. 4 - Fonctionnement des agents asynchrones

Ce modèle permet l'utilisation de plusieurs ordonnanceurs simultanés en structurant un système simulé par le mécanisme de groupe et rôle. L'intérêt de cette implémentation est que les agents exécutés dans ces systèmes synchrones ont exactement les mêmes fonctionnalités (passage de message, vue organisationnelle, ...) que les agents threadés, et peuvent donc être associés facilement en systèmes hybrides. De plus, la gestion du mécanisme de simulation ou d'observation repose encore une fois sur l'approche en groupe et rôle (on va par exemple associer une sonde à une certaine propriété présente dans les tenants d'un rôle donné sur un certain groupe).

Haut

4 Déclinaisons

4.1 Modèles d'agents

La définition d'un agent étant plutôt minimaliste, différentes bibliothèque implémentant des architectures d'agents classiques ont été construites en complément de cette architecture. On peut par exemple citer :

L'utilisation d'un de ces modèles n'est nullement exclusif : il est courant d'exécuter simultanément sur la même plate-forme MadKit des agents Scheme, réactifs, systèmes, BDI ...

Haut

4.2 Agentification des services

A l'opposé de plateformes plus monolithiques, MadKit utilise donc des agents pour implémenter au niveau meta des services comme le passage de message distribué, la migration d'agent, la sécurité d'organisations d'agents et divers aspects de gestion du système ; et ce éventuellement à l'aide des mécanismes d'extension du noyau.
Comme ces services sont mis en oeuvre par des agents, et décrits par la structure organisationnelle, les interactions entre ces agents systèmes, le noyau, et les agents de l'applications sont décrits dans le modèle agent-groupe-role. Ceci implique qu'un agent offrant une fonctionnalité donnée peut être remplacé par un autre de façon transparente (et éventuellement durant le fonctionnement d'une application), à partir du moment où les groupes, rôles et interactions sont respectées.
Baser les services sur des agents décrits en terme de rôles a également l'effet de faciliter une montée en puissance. Un agent tenant plusieurs rôles peut, au fur et à mesure que les besoins de l'application grandissent, déléguer dynamiquement à de nouveaux agents certains de ses rôles pour réduire sa charge.
De plus, la structuration en groupe agissant souvent en "masquage" et délégation d'un SMA complexe, un rôle ne correspond pas forcément à une mise en oeuvre par un et un seul agent. Par exemple, un agent fournissant un rôle de communication système peut être un simple représentant d'un groupe d'agents spécialisés prenant en charge chacun un protocole.
Avoir découplé les services du noyau permet aussi de ne pas alourdir les applications: deux plateformes exécutant un SMA localement ou en distribué ne diffèrent que par le lancement ou non des agents de communication (figure 5).

FIG. 5 - Agents de communication distribuée

Haut

4.3 Applications hôtes

Le noyau de la plateforme ne fournit aucune interface graphique pour l'utilisateur. Il est par contre possible de lui associer une application hôte qui la mettra en oeuvre. De plus, chaque agent peut définir un objet graphique pour sa représentation, d'un simple bouton à une application classique encapsulée. L'hôte aura alors la charge, au lancement d'un agent, de décider de la mise en place de l'objet graphique défini par l'agent (dans des fenêtres séparées, combiné avec l'interface d'un autre agents, etc..) et de les gérer au niveau global. Associé au principe d'agentification des services, cela permet de modulariser complètement la plateforme. Par exemple, les variétés suivantes de MadKit ont été déja mise en oeuvre :

Haut

5 Conclusion

MadKit (Multi-agents Developpement Kit), est une plate-forme multi-agent basée sur un modèle organisationnel, Elle est implémenté en java et permet d'intégrer au sein d'un même outil une grande variété d'architectures d'agents et de modèles de comunication.
MadKit repose sur le modèle conceptuel Aalaadin de Jacques Ferber. Elle est très modulaire, mais n'est pas optimisée spécialement pour la simulation. Par contre, le fait qu'elle soit implémentée en Java lui offre des méthodes " clé-en-main " pour utiliser les protocoles réseaux. De plus, les outils de communication sont déjà implémentés et gèrent les envois de messages distants (en utilisant le protocole TCP/IP). Les agents Madkit sont des Threads Java, ils sont donc indépendants les uns des autres et évoluent de manière asynchrone. Le scheduler est donc nécessaire pour ordonner une simulation dans ce type de plate-forme.

Haut

6 Bibliographie
Haut