Knowledge Management - Gestion des Connaissances

Systèmes Multi Agents 
 


Sytème Multi-Agents OpenCybele

DESS GLA

Ce document est issu de l'étude menée en partenariat avec Lionel Najman en 2002 dans le cadre du DESS GLA. Le projet consistait à sélectionner un des Sytèmes Multi-Agents disponible sur le Web en version open, d'en établir une fiche descriptive après avoir développé une petite application de démonstration.

OpenCybele est une version open source de l’infrastructure Cybele de Intelligent Automation Incorporated (IAI).

OpenCybele est un environnement construit au-dessus de la plate-forme Java 2 pour le contrôle et l’exécution des agents. L’exécution des agents est dirigée par évènements et contrôlée par OpenCybele.

OpenCybele adopte une architecture sur plusieurs couches promouvant la possibilité d’ajouter des services plug-and-play, tels que les gestions des erreurs, des threads, des évènements (internes ou provenant de l’interface), des horloges, la communication, la concurrence,… On accède aux services par le biais des GSI (Genereric Service Layer).

Layers

A. Introduction à la notion d’Agents

1. Qu’est-ce qu’un agent

Les définitions retenues pour un agent et une activité sont les suivantes :

Un Agent est un groupe d’activités dirigées par des évènements, ces activités partagent des données, des threads et une structure de concurrence.

Une Activité est un objet actif qui opère sur des données internes. Les données internes et les méthodes sont encapsulées, c’est à dire qu’elles ne sont pas accessibles directement par les autres objets.

2. La Programmation Centrée sur les Activités (ACP)

Une décomposition du domaine d’application conduit à la modélisation de fonctionnalités ou d’entités physiques sous forme d’Agents. Les Activités sont les composants de base des agents. De la même manière qu’un système est composé d’agents autonomes, un agent est composé d’activités autonomes.

Aucune activité ne peut appeler directement une méthode d’une autre activité.

3. Les différences entre la Programmation Orientée Objet et la Programmation Centrée sur les Activités

La Programmation Centrée sur les Activités (ACP) peut être vue comme une couche au-dessus de la Programmation Orientée Objet (OOP) dans la mesure ou l’ACP restreint l’accessibilité aux activités.

Programmation Centrée sur les Activités

Les méthodes qui manipulent des données sont privées, d’autres méthodes sont publiques mais elles n’acceptent que des évènements comme paramètres.

B. La Programmation Centrée sur les Activités

Le Modèle de Concurrence

Bien que les activités soient dirigées par les évènements, l’exécution d’une activité dépend de l’état des autres activités avec lesquelles elle a une relation de concurrence ou une dépendance d’exécution.

Les Etats d’Exécution

Une Activité peut être dans un des six états suivants :

Les Relations de Concurrence entre activités

Entre deux activités, il peut exister une des relations suivantes :

Transition d’Etat d’Activités et Modèle de Concurrence

Lorsqu’une activité parent lance une activité fille, :

Une structure de forêt de dépendance est utilisée.

C. Utilisation d’OpenCybele : les Rôles et les Responsabilités

Différents rôles sont définis pour l’utilisation d’OpenCybele :

Au-delà de la signification même de ces différents rôles, il faut surtout retenir que bien que ces rôles soient purement fonctionnels (rien n’est étudié dans les classes Java pour forcer ces responsabilités), ils traduisent néanmoins la réflexion qui a été menée dès le départ sur le fonctionnement en utilisation réelle de la plate-forme. Cela permet ainsi de distinguer les rôles, et donc les comportements à suivre, pour des experts du domaine, des architectes… qui souhaitent utiliser OpenCybele.

D. La Programmation

Nous ne reprenons ici que les points qui nous ont paru essentiels pour acquérir une idée du fonctionnement de (et des possibilités offertes par) la plate-forme OpenCybele.

1 AOPI pour lancer l’Environnement Cybele

C’est aussi simple que créer une classe Java. Il faut un appel à Cybele.startup(). Ceci lance toutes les gestions de service : gestion des exceptions, des concurrences, des événements, des threads, des évènements internes de la communication et des timers.

2 Agent Delegate Class

Il faut définir une classe qui implémente la classe Handler. Un agent doit respecter les conventions de la ACP : accessibilité des méthodes, évènement en paramètres des méthodes publiques.

3 Lancement d’un Agent

L’application demande à Cybele de créer un agent par Cybele.createAgent(String name, String description, Handler handler, Serializable[] pars, int priority).

On note que cette méthode ne retourne pas de valeur donc pas d’Id : aucun objet, même le créateur n’a de référence sur l’agent créé.

4 Activité Delegate Class

Les possibilités d’accès entre activités sont limitées aux échanges de messages et aux évènements (ouverture de canaux). Les seules méthodes publiques qui acceptent des paramètres autres que des évènements sont les méthodes statiques.

5 Lancement des Activités

Le lancement d’une activité est similaire à celui d’un agent et ne peut être effectué que dans une classe d’activités ou d’agents. La méthode est Agent.createActivity(String activityId, String activityName, Object[] initPar, int priority, int concurRel, boolean inherited).

Contrairement au lancement d’un agent, les paramètres ne sont pas copiés avant l’appel : les activités peuvent partager des données.

Le programmeur doit préciser la relation de concurrence souhaitée, ainsi que l’héritage ou non des relations de concurrence.

6 L’Ouverture des Canaux de Message

L’appel se fait par la méthode statique String Activity.openChannel(String tag, String callback, Handler handler, int peririty, Serializable xdata).

La chaîne retournée est un ticket qui permet la gestion du canal.

Le tag correspond à une déclaration de capacité, il suit une définition ontologique.

Le callback est le nom de la méthode et le handler la référence à l’objet qui ouvre ce canal : ces paramètres seront utilisés par Cybele pour transmettre l’événement.

7 La Mise en Place des Timers

Elle passe par la création d’une horloge : String Cybele.createClock(String clockId, int clockType, long startTime, double pace).

On installe ensuite les timers : String Activity.setTimer(String clockId, long time, Handler handler, Boolean repeat, String callback, Seializable xdata).

8 L’Ouverture d’un Canal d’Evènements Internes

Un tel canal permet de recevoir des évènements d’autres activités du même agent. Un événement interne est similaire à un message mais il a une priorité maximale (il permet en fait un "appel détourné de méthode").

9 L’Envoi d’un Message

Il existe quatre différents envois de message : BroadCasting et Point-to-Point, synchrones ou asynchrones.

10 Le Contrôle des Canaux et des Timers

Le ticket retourné lors de leur création est un handle qui permet leur gestion : pause, resume et cancel.

11 La Synchronisation des Activités

C’est le paramètre int concurRel qui permet d’établir la relation souhaitée entre l’activité parent et fille : attente de la fin de l’exécution, concurrence entre les filles, …

E. Quelques conclusions de cette prise en main

OpenCybele est une plate-forme qui apporte de nombreux services : communication par différents types de messages, distribution d’agents, évènements, threads, timers, …

OpenCybele permet la modélisation de systèmes complexes par une équipe de spécialistes dans différents domaines. La définition de différents types d’utilisateurs n’est pas superflue : elle précise (la taille de l’outil) les différentes étapes de modélisation et implémentation. L’installation nécessite des connaissances certaines en informatique (ce qui est normal pour un outil pouvant communiquer entre différentes machines).

La compilation des (sources fournies des) classes du cœur de Cybele et des démonstrations ne nous a pas posé de difficulté particulière, aussi bien avec IBM Visual Java qu’avec JBuilder. Les documentations fournies sont assez précises (nous n’avons pas la documentation développeur).

Les différentes démonstrations sont explicites. De la plus simple à la plus complexe, elles permettent d’identifier la richesse et l’étendue des fonctionnalités.

Les extensions prévues (GUI et gestion des évènements, création de code, migration d’agents) sont intéressantes mais restent cependant assez floues quant à leur réalisation. Nous pouvons également, pour finir, nous interroger sur le bien-fondé de la réalisation d’une nouvelle plate-forme qui souhaite apparemment établir un standard de fait (cf. le groupe de travail sur les GSI) alors qu’il existe une norme établie et qui n’est pas supportée (FIPA-ACL).

Systèmes Multi Agents, quelques liens

L'objectif de ce site est de décrire simplement (clairement autant que faire se peut) les différentes techniques de Représentation des Connaissances et leur utilisation dans les domaines de la Gestion des Connaissances et de l'Intelligence Économique. N'hésitez pas à nous contacter pour proposer un simple échange de liens ou la diffusion d'un texte pédagogique sur une de ces techniques.

LAURENT Jean-Marc - Conseil Gestion des Connaissances - OCSIMA - Consultant Knowledge Management
Valid XHTML 1.0 Strict Dernière révision avril 07 Pour nous écrire, cliquez ici :