Annexe A.
~ Le progres technologique n'abolitpas les obstacles; il en
change simplement la nature o - Huxley, Aldous
La plate~~orme Jade
Java Agent DEvelopment Framework
1. Introduction
Pour construire un système
multi-agent (SMA) on utilise une plate-forme multi-agent.
Une plate-forme multi-agent est un ensemble d'outils
nécessaire a la construction et a la mise en service d'agents
au sein d'un environnement spéci fique. Ces outils peuvent servir
également ' l'analyse et au test du SMA ainsi
créé. Ces outils peuvent etre sous la forme d'environnement de
programmation (API) et d'applications permettant d'aider le
développeur. Nous allons étudier dans cette partie la plate-forme
JADE(Java Agent DEvelopment framework).
2. Bref description de JADE
JADE (Java Agent DEvelopement framework) est une
plate-forme multi-agent créé par le laboratoire TILAB
et décrite par Belli femine et al. Dans [BEL 99], [BEL
00]. Elle permet le développement de systèmes
multi-agents et d'applications con formes aux normes FIPA. Elle est
implémentée en JAVA et fourni des classes qui implémentent
o JESS » pour la dé finition du comportement des agents.
JADE possède trois modules principaux (nécessaire aux normes
FIPA).
· DF « Director Facilitor » ;
· ACC «Agent Communication Channel »;
· AMS « Agent Management System ».
Ces trois modules sont activés à chaque
démarrage de la plate-forme.
3. Architecture logiciel de la plate-forme
JADE
Chaque instance de l'environnement d'exécution de JADE
s'appelle un conteneur (container) car il peut contenir plusieurs
agents. L'ensemble des conteneurs acti fs s'appelle une plate forme.
Dans une plate forme, un conteneur spécial appelé conteneur
principal (Main-container) doit toujours etre en activité, les autres
conteneurs s'enregistrent auprès de celui-ci des qu'ils
démarrent. Le conteneur principal héberge les
agents techniques de Jade (DF, AMS, RMA,
DummyAgent, ...).
La figure suivante représente des modules sous
forme des services de base qui sont le Directory Facilitator (DF) et
l'Agent Management System (AMS), mais le
service (MTS) sera chargé a la demande, L'AMS est un autre
composant important car ce service e ffectue la correspondance entre
l'agent et leur identi ficateur (AID), Il n'y a qu'un AMS
par plate-forme.
Fig.1 : Architecture logiciel de La plate-forme
JADE.
4. Architecture de la bibliotheque des
classes
JADE est compose des packages suivantes :
- JADE.CORE : implante le noyau
du systeme et possede les classes 'Agent'
et'behaviours' - Le package JADE.LANG : contient un sous
package' JADE.LANG.ACL' pour chaque
langage de communication utilise jade.
- JADE.CONTENT : contient l'ensemble du classes
qui definissent les ontologie.
- JADE.DOMAIN : contient toutes les classes
java qui representent les entites agent management
definies par FIPA particulierement AMS, DF.
- JADE.GUI : contient les classes utiles pour
creer des GUIs,l'edition des messages et la description des
agents.
- JADE.MTP : contient une interface java que
chaque MIP (MESSAGE TRANSPORT PROTOCOL) doit implementer.
- JADE.PROTO : contient les classes qui
modelisent les protocoles standards d'interaction, et permettre aux
programmeurs d'ajouter d'autres protocoles.
5. Outils de debogage de JADE
Pour supporter la tâche difficile du débogage des
applications multi-agents, des outils ont été
développés dans la plate-forme JADE. Chaque outil est
empaqueté comme un agent, obéissant aux mêmes
règles, aux mêmes possibilités de communication et aux
mêmes cycles de vie d'un agent générique (agentification de
service).
5.1. Agent RMA (Remote Management Agent) :
Le RMA permet de contrôler le cycle de vie de
la plate-forme et tous les agents la composant. L'architecture
répartie de JADE permet le contrôle a distance d'une autre
plate-forme. Plusieurs RMA peuvent etre lances sur la meme plate-forme du
moment qu'ils ont des noms distincts.
Figure 2 : L'interface de l'agent RMA
5.2. Agent Dammy
Cette interface permet la composition et l'envoi de
messages ACL et maintient une liste de messages ACL
envoyés et recus. Cette liste peut etre
examinée par l'utilisateur et chaque message peut etre vu en
détail ou meme édité.ou bien le
sauvegardé sur le disque et renvoyé plus
tard.
Figure 3 : L'interface de l'agent Dammy.
5.3. Agent Direcory Facilitator
L'inter face du DF peut etre lancée a partir du menu du
RMA .Cette action est en fait implantée par l'envoi d'un
message ACL au DF lui demandant de charger son
interface graphique. L'inter face peut etre juste vue sur l'hOte oil
la plate-forme est exécutée. En utilisant cette interface,
l'utilisateur peut interagir avec le DF.
Figure 4 : L'interface de l'agent DF.
5.4 Agent Sniffer
Quand un utilisateur décide d'épier un agent ou un
groupe d'agents, il utilise un agent sniffer. Chaque message partant ou allant
vers ce groupe est capté et affiché sur l'interface du
sniffer.
Figure 5 : L'interface de l'agent Sniffer
5.5 Agent Inspector
Cet agent permet de gérer et de contrôler le cycle
de vie d'un agent s'exécutant et la file de ses messages envoyés
et reçus.
Figure 6 : L'interface de l'agent
Inspector.
6. Cycle de vie d'un agent
Figure7 : Le cycle de vie d'un agent.
Voici la description des di fférents états d'un
agent en accord avec la spéci fication de la FIPA :
-Initiated : l'objet agent est
créé mais n'est pas encore enregistré aupres du
service de nommage (AMS).
- Active : l'objet agent est
enregistré aupres du service de nommage (AMS), il
possède désormais une adresse unique et peut donc communiquer
avec les autres agents.
- Suspended : l'exécution de
l'agent est suspendu.
- Waiting : l'agent est bloqué
et doit attendre un événement comme un message par
exemple. -Transit : l'agent rentre dans cet
état lorsqu'il migre dans un autre conteneur.
-Deleted : l'agent est détruit
et supprimé du service de nommage (AMS).
7. Les Behaviours (Comportements)
Un comportement dé finie les taches qu'e ffectue un
agent. Quelque soit le type du Behaviour, il doit
implémenter la méthode action() qui dé
finit la séquence des instructions a exécuter et
lorsque la méthode done() retourne true elle
s'arrete.
La méthode block() d'un comportement
permet de bloquer ce dernier. Suite a l'arrivée d'un
nouveau message.
Pour ajouter un comportement a la file des comportements de
l'agent, on utilise la méthode addBehaviour(new
BehaviourClass(Parametres)) de la classe 'agent'.
On distingue plusieurs types de comportement, les plus
utilisés sont:
- Classe o Behaviour o : c'est la classe de base
a partir de laquelle sont dérivés les autres classes de
Behaviours.
Exemple :
public class MonBehaviour extends Behaviour{
// Ici vous pouvez declarer des variables
// Un Behaviour possède un constructeur
public MonBehaviour(/*paraml, param2,...*/){
// Initialisation du Behaviour.
}
public void action(){
// Traitement
// cette méthode est exécutée jusqu'a ce que
la méthode done() retourne true.
}
public boolean done() {
return valeurBooleenne;
} }
- Classe OneShotBehaviour : c'est une
spécialisation de la précédente, la méthode
action() est exécutée une seule fois (par dé faut, la
méthode done() retourne true). Donc vous n'avez pas a redé finir
la méthode done().
- Classe CyclicBehaviour : la méthode
action() est exécutée en répétition, la
méthode done() retourne false. N'oublier pas de bloquer le Behaviour a
la fin de la méthode action(), car il fait une boucle infinie
(gaspillage de CPU). Le Behaviour sera
débloqué quand un nouveau message est
inséré dans la file de l'agent.
- Classe WakerBehaviour: la méthode
action() est exécutée apres un temps donne en parametre (exprime
en millisecondes) et une seule fois.
- Classe TickerBehaviour : la méthode
action() est exécutée chaque t milliseconde (t est donne en
parametre a la creation du Behaviour).
8. Communication entre agents
La communication entre agents se fait par un langage qui est
FIPA-ACL(Agent Communication language). La classe ACLMessage représente
les messages qui peuvent être échangés par les agents. La
communication de messages se fait en mode asynchrone. Lorsqu'un agent souhaite
envoyer un message, il doit créer un nouvel objet ACLMessage,
compléter ces champs avec des valeurs appropriées et enfin
appeler la méthode send(). Lorsqu'un agent souhaite recevoir un message,
il doit employer la méthode receive() ou la méthode
blockingReceive().
Un message ACL dispose obligatoirement des champs suivants :
Performative :
|
type de l'acte de communication
|
Sender :
|
expéditeur du message
|
Receiver :
|
destinataire du message
|
reply-to :
|
participant de la communication
|
content :
|
contenu du message
|
language :
|
description du contenu
|
encoding :
|
description du contenu
|
ontology :
|
description du contenu
|
protocol :
|
contrôle de la communication
|
conversation-id :
|
contrôle de la communication
|
reply-with :
|
contrôle de la communication
|
in-reply-to :
|
contrôle de la communication
|
reply-by :
|
contrôle de la communication
|
Tab.1 :Les champs d'un message ACL.
Tous les attributs de la classe ACLMessage peuvent
etre obtenus et modi fies par les methodes set/get(). Le contenu des
messages peut etre aussi bien du texte que des objets car la
serialisation Java est supportee.
8.1. Envoi d'un message
Exemple : Le code suivant correspond a l'envoi
d'un message a l'agent « Yacine » dans le but
de l'in former que (Le match de football est termine)
ACLMessage msg = new
ACLMessage (ACLMessage.INFORM);
msg.addReceiver (new AID ("Yacine", AID.ISLOCALNAME));
msg.setLanguage (" Francais ");
msg.setOntology (" match");
msg.setContent ("le match de football est
terminé ");
send (msg);
|
8.2. Reception d'un message.
Exemple : on bloque le comportement jusqu'a
l'arrive du msg.
ACLMessage msg = receive (); I f
(msg! = null) {
// traiter le message
}Else { Block ();
}
|
. Conclusion
Le rôle de la plate-forme JADE est de réaliser la
couche communication inter-agents de façon à pouvoir faire une
argumentation sans l'intervention de l'humain et donc dans cette optique de les
rendre autonome. On se sert pour cela du langage ACL pour que les agents
s'échangent leurs messages.
|