République Algérienne Démocratique et
Populaire Ministère de l'enseignement supérieur et de la
recherche scientifique Université de Tébessa Faculté
: Sciences et technologie Département : Informatique
MEMOIRE DE FIN D'ETUDES En vue de
l'obtention du diplôme d'ingénieur d'état en
informatique
Option : Systèmes d'Informations
Thème
Planification multi-agents pour la composition
dynamique de services web
Réalisé par : Encadré par
:
Ilhem BRAKNI M. Rohallah BENABOUD
Ouahiba AOUNALLAH
Promotion 2009-2010
Remerciements
Avant tout, nous tenons à remercier Dieu
tout puissant de nous avoir aider à réaliser ce travail.
Puis, nos remerciements s'adressent :
- À nos parents, nos soeurs et nos frères pour
leurs énormes aides et encouragements.
- À notre encadreur M. R Benaboud pour nous avoir
encadré pendant cette année et de nous avoir fait confiance dans
le parcours de notre projet.
- À tous les membres du jury pour l'honneur qu'ils nous
font en acceptant de juger notre travail. - À tous nos enseignants et
nos camarades de promotion « 2009-2010 ».
- Et à toute personne a participée à
l'élaboration de notre projet de prés ou de loin.
Résumé
Le développement rapide dans le monde informatique a
entraîné le développement de nouveaux paradigmes
d'interaction entre applications. Notamment, l'architecture orienté
service a été mise en avant afin de permettre des interactions
entres applications distantes. Cette architecture est construite autour de la
notion de service web. L'intérêt des services web
est de permettre à une entreprise d'exporter, via le réseau
Internet, ses compétences et son savoir-faire, ou encore d'ouvrir de
nouveaux marchés et de nouveaux supports à la vente.
Afin d'exploiter au maximum les avantages de ce nouveaux types
d'applications, la communauté des services web doit ce doter d'outils
donnant la possibilité de pouvoir assembler différents services
entre eux. C'est la composition de services web.
L'approche actuelle de composition de services web consiste
à définir des processus métiers, i.e., des
enchaînements réutilisables de services. Une autre approche
envisageable est la composition « dynamique ». Les
services web sont composés dynamiquement en fonction de leurs
fonctionnalités, et de leur disponibilité.
L'objectif de ce travail est d'étudier les
mécanismes nécessaires à la mise en oeuvre de la
composition dynamique de services web et plus particulièrement de
proposer un modèle de composition s'appuyant sur l'approche agents. Nous
proposons, ensuite, une étude de cas permettant de montrer
l'efficacité du modèle proposé.
Mots-clés : Services web, Agents,
Composition.
Abstract
The rapid development in computing has involved the
development of new paradigms of interaction between applications. Notably, the
service-oriented architecture has been proposed to allow interactions enter
distant applications. This architecture is built around the concept of
web service. The interest of web services is to enable a
company to export via the Internet, its competences and its know-how, or even
to open new markets and new supports for sale.
In order to maximize the benefits of this new type of
applications, web services community must develop tools that give the
possibility to assemble various services among them. It is the
composition of web services.
The current approach to web service composition is to define
business processes, i.e., reusable sequences of services. Another possible
approach is the "dynamic" composition. Web services are
composed dynamically according to their functionality, and availability.
The objective of this work is to study the mechanisms needed
to implement the dynamic composition of web services and more particularly to
propose a composition model based on the agents approach. We propose, then, a
case study allowing the demonstration of the effectiveness of the proposed
model.
Key-words : Web services, Agents,
Composition.
Introduction générale 1
1. Planification et systèmes multi-agents
3
Introduction .. 3
1. La planification .. 3
1.1. Définition et aspects . 3
1.2. La planification classique . 4
1.2.2. Modèle de base . 4
1.2.2. Représentation et langages 4
1.2.3. Recherche d'une solution (calcul d'un plan) 10
2. Les SMA 12
2.1. Qu'est ce qu'un agent? . 12
2.2. Architectures d'agents .. 13
2.2.1. Agents réactifs .. 13
2.2.2. Agents délibératifs 13
2.2.3. Agents hybrides 13
2.3. Systèmes multi-agents 13
3. La planification multi-agents 15
3.1. Planification et coordination . 16
3.2. Modèles de la planification multi-agents 16
3.2.1. Planification centralisée 16
3.2.2. Planification distribuée . 17
Conclusion 17
2. Des services web aux services web sémantiques
18
Introduction .. 18
1. Services web .. 18
1.1. Qu'est ce qu'un service web ? .. 18
1.2. Architecture, modèle de fonctionnement .. 19
1.3. Principales technologies utilisées . 20
1.4. Problèmes existants dans le domaine des services web
22
2. vers les services web sémantiques . 22
3. Services web sémantiques .. 23
3.1. Le langage OWL-S 23
3.1.1. Le Service Profile . 24
3.1.2. Le Service Process Model 25
3.1.3. Le Service Grounding 26
Conclusion 27
3. Composition de services web : état de l'art et
approche proposée 28
Introduction 28
1. La composition : état de l'art 28
1.1. Un model abstrait pour la composition de SW .. 28
1.2. Approches existantes . 30
1.2.1. Composition statique des services web . 31
1.2.2. Composition dynamique des services web 31
2. La composition : Approche proposée . 33
2.1. Spécification du problème . 34
2.3. Le modèle proposé : Présentation
générale et architecture 35
Conclusion 36
4. Composition par planification multi-agents :
Conception du système 37
Introduction .. 37
1. Analyse du système : vue externe et vue interne 37
2. Méthodologies et langages exploités dans la
conception 38
3. Vue externe du système .. 38
3.1. Description générale du système
38
3.2. Identification et représentation des
fonctionnalités offertes par le système 39
3.2.1. Diagramme de cas d'utilisation . 39
3.2.2. Diagrammes d'activités . 41
4. Vue interne du système ... 42
4.1. Architecture interne du système 42
4.2. Architectures internes et fonctionnement des agents . 43
4.3. Interactions entre les agents du système 58
5. Etude de cas 61
Conclusion 62
5. Composition par planification multi-agents :
Réalisation du système 63
Introduction .. 63
1. Etapes de la réalisation 63
2. Outils exploités 63
3. Création des descriptions OWL-S .. 64
4. Implémentation du traducteur OWL-S vers
opérateurs STRIPS 69
5. Implémentation du planificateur . 70
6. Implémentation des agents du système .. 74
7. Interfaces du système . 79
Conclusion 82
Conclusion générale 83
Bibliographie 85
Annexes A-1
Annexe A : Outils pour la conception du système
A-1
1. UML A-1
2. AUML . A-2
3. Le langage FIPA-ACL A-3
Table des matières
|
iii
|
Annexe B : Outils pour la réalisation du
système
|
B-1
|
1.
|
Eclipse .
|
B-1
|
2.
|
OWL-S IDE
|
B-1
|
3.
|
JADE
|
B-2
|
4.
|
JBuilder IDE
|
B-4
|
1.1
|
Exemple du monde de blocs
|
5
|
1.2
|
L'exemple du monde de blocs dans l'état S'
|
7
|
1.3
|
Exemple d'un problème de planification dans le monde des
blocs
|
8
|
1.4
|
Modèles de la planification multi-agents
|
17
|
2.1
|
Modèle de fonctionnement de l'architecture service web
|
20
|
2.5
|
Eléments d'une description OWL-S
|
24
|
2.6
|
Ontologie de processus
26
|
|
2.7
|
Relation entre OWL-S et WSDL .
|
27
|
3.1
|
Cadre général du système de composition de
services
29
|
|
3.2
|
Vue générale de l'orchestration
|
30
|
3.3
|
Vue générale de la chorégraphie
|
31
|
3.4
|
Différentes phases du modèle proposé
|
35
|
4.1
|
Description générale du système ..
|
38
|
4.2
|
Description externe du système
|
39
|
4.3
|
Diagramme de cas d'utilisation du système .
|
40
|
4.4
|
Diagramme d'activités pour << Demander service
>> .
|
41
|
4.5
|
Diagramme d'activités pour << Annuler demande
service >> ..
|
41
|
4.6
|
Diagramme d'activités pour << Fournir owl-s service
et ensemble de données>> ......
|
41
|
4.7
|
Diagramme d'activités pour << Identifier
administrateur >>
|
42
|
4.8
|
Architecture générale d'un agent cognitif
|
43
|
4.9
|
Mode de fonctionnement d'un agent cognitif ..
|
43
|
4.10
|
Diagramme d'activités pour le fonctionnement de l'agent
utilisateur .
|
44
|
4.11
|
Diagramme d'activités pour le fonctionnement de l'agent
administrateur ..
|
46
|
4.12
|
Architecture interne de << l'agent service >> ..
|
47
|
4.13
|
Correspondance processus atomique OWL-S et opérateur
STRIPS
|
49
|
4.14
|
Diagramme d'activités pour le fonctionnement de l'agent
service ..
|
51
|
4.15
|
Architecture interne de << l'agent médiateur
>> ..
|
52
|
4.16
|
Diagramme d'activités pour le fonctionnement de l'agent
médiateur .
|
58
|
4.17
|
Diagramme de protocole d'interactions d'AUML << agent
administrateur - agent
|
|
|
utilisateur >> ..
|
59
|
4.18
|
Diagramme de protocole d'interactions d'AUML << agent
administrateur - agent
|
|
|
médiateur >> ..
|
60
|
4.19
|
Diagramme de protocole d'interactions d'AUML << agent
utilisateur - agent
|
|
|
médiateur >> ..
|
60
|
4.20
|
Diagramme de protocole d'interactions d'AUML << agent
médiateur - agent
|
|
|
service >>
|
61
|
4.21
|
Architecture générale des services proposés
en terme d'entrées et de sorties
|
62
|
4.22
|
Architecture d'un service en terme de préconditions et
effets .
|
62
|
65
65
66
69
70
A-4
5.1 Classe Java implémentant le service de
réservation de vols aériens
5.2 Une partie de la description OWL-S du modèle de
processus générée en mode
graphique .. 5.3 Une partie de la description OWL-S du
modèle de processus générée en mode
textuel .. 5.4 La description OWL-S du process model du
service « Réservation de vols aériens ».. 5.5 Fonction
Java implémentant le traducteur OWLS vers opérateurs STRIPS
A.2 Exemple d'un message ACL
Liste des tableaux
2.1
|
Comparaison entre STRIPS et ADL
|
9
|
A.1
|
Eléments d'un message FIPA-ACL .
|
A-4
|
A.2
|
Actes communicatifs du langage ACL
|
A-6
|
Introduction générale
De nos jours, le web n'est plus simplement un énorme
entrepôt de texte et d'images, son évolution a fait qu'il est
aussi un fournisseur de services. Aujourd'hui, même si toutes les
entreprises n'ont pas fondé l'essentiel de leurs services
économiques sur le net, elles se doivent au moins d'y être
représentées, ne serait-ce que pour donner l'image d'une
entreprise moderne, dynamique et technologiquement à la page. Une
nouvelle technologie leur facilite grandement les choses et permet une
communication facile et à distance entre ces entreprises et leurs
partenaires et clients c'est les services web [2].
La notion de « service web » désigne
essentiellement une application mise à disposition sur Internet par un
fournisseur de services, et accessible par les clients à travers des
protocoles Internet standards.
Actuellement, les services web sont mis en oeuvre au travers
une infrastructure basée sur trois technologies standard : WSDL, UDDI et
SOAP. Ces technologies facilitent la description, la découverte et la
communication entre services. Cette infrastructure est suffisante pour mettre
en place des composants interopérables et intégrables mais
insuffisante pour rendre automatique et efficace plusieurs tâches
liées au cycle de vie des services web.
Pour pouvoir utiliser un service web, il ne faut que le
rechercher dans des annuaires UDDI, de récupérer sa description
WSDL et puis de l'invoquer à travers des messages SOAP. Cependant, ces
étapes sont suffisantes seulement si le service requis peut être
atteint directement par un seul service web. Certaines fois les demandes des
utilisateurs ne peuvent pas être résolues que par
l'intégration de plusieurs services web. Cette intégration est
connue par composition de services web.
La composition des services web se réfère au
processus de création d'un service composite offrant une nouvelle
fonctionnalité, à partir de services web existants plus simples,
par le processus de découverte dynamique, d'intégration et
d'exécution de ces services dans un ordre bien défini afin de
satisfaire un besoin bien déterminé [3].
Dans le départ, la composition est faite manuellement.
Mais rapidement, une automatisation de ce processus devient un domaine de
recherche très actif. Dans ce chemin, la première approche
consiste à définir des processus métier, i.e., des
enchaînements réutilisables de services ; c'est la composition
statique. Une autre approche envisageable est la composition « dynamique
». Les services web sont composés dynamiquement en fonction de
leurs fonctionnalités et de leur disponibilité. La composition
dynamique, peut se justifier par les points suivants [1]:
- du fait de l'évolution permanente de l'offre de
services et de leurs capacités, une description statique de la
composition est difficile à maintenir ;
- elle permet d'adapter la composition aux attentes de
l'utilisateur et donc de ne pas être contraint par une composition a
priori ;
- elle permet de faire d'Internet une zone de compétences
composables et évolutives.
Le besoin d'automatisation du processus de conception et de
mise en oeuvre des services web rejoint les préoccupations à
l'origine du Web sémantique, à savoir comment décrire
formellement les connaissances de manière à les rendre
exploitables par des machines. En conséquence, les technologies et les
outils développés dans le contexte du Web sémantique
peuvent certainement compléter la technologie des services web en vue
d'apporter des réponses crédibles au problème de
l'automatisation. C'est la naissance des services web
sémantiques. Plusieurs langages de description des services web
sémantiques sont apparus. Celui de référence est le
langage OWL-S.
OWL-S respecte une syntaxe XML et une sémantique de OWL
et a pour objectif de fournir une plus grande expressivité en permettant
la description des caractéristiques des services afin de pouvoir
raisonner dessus dans le but de découvrir, invoquer, composer et
gérer les services web de façon la plus automatisée
possible.
L'objectif de notre travail est d'étudier les
mécanismes nécessaires à la mise en oeuvre d'une
composition dynamique de services basée sur l'utilisation de ses
descriptions sémantiques et d'une technique évolutive de
l'intelligence artificielle ; celle de la planification
multi-agents.
La planification et les SMA ont faits deux domaines de
recherche très actifs de l'intelligence artificielle. Le premier vise le
développement d'algorithmes pour produire des plans, typiquement pour
l'exécution par un robot ou tout autre agent. Le deuxième
s'intéresse aux comportements collectifs produits par les interactions
de plusieurs entités autonomes et flexibles appelées
agents.
La planification dans les systèmes multi-agents, ou
planification multi-agents considère alors le problème de
planification dans le contexte des systèmes multi agent. Elle
étend la planification traditionnelle en intelligence artificielle aux
domaines où plusieurs agents sont impliqués dans un plan et ont
besoin d'agir simultanément.
La grande correspondance entre les descriptions OWL-S et les
représentations en planification ainsi que la nature distribuée
des services web et leurs autonomies, expliquent donc l'intérêt
croissant de l'exploitation de la planification et des SMA dans la composition
de services web.
La méthode de composition dynamique que nous proposons
est basée sur le modèle de planification multi-agents
centralisé dont l'existence d'un agent coordinateur est
nécessaire. Chaque service web est représenté dans le
modèle par un agent assurant ses fonctionnalités. Le plan
solution (s'il existe) est construit par l'agent coordinateur en planifiant
(coordonnant) les différentes actions des agents représentants
des services extraites des descriptions OWL-S des services qu'ils
représentent.
Nous essayons tout au long de notre travail d'illustrer
l'efficacité de ce modèle. Pour le faire le rapport est
présenté dans deux parties : la première contient une
étude des différents aspects lié au problème et est
composée de trois chapitres, un pour présenter les concepts
liés à la planification et les systèmes multi-agents, un
autre pour les concepts des services web et des services web sémantiques
incluant une brève présentation du langage OWL-S et en fin un
troisième citant les différentes approches de composition
existantes ainsi que l'approche proposée. La deuxième partie du
rapport élabore au travers deux chapitres la conception et la
réalisation d'un système implémentant le modèle
proposé.
Introduction
Le thème des systèmes
multi-agents, s'il n'est pas récent, est actuellement un champ
de recherche très actif. Cette discipline est à la connexion de
plusieurs domaines en particulier de l'intelligence artificielle, des
systèmes informatiques distribués et du génie logiciel.
C'est une discipline qui s'intéresse aux comportements collectifs
produits par les interactions de plusieurs entités autonomes et
flexibles appelées agents. Ces agents peuvent
être en effet classifiés en deux catégories selon les
techniques qu'ils emploient dans leurs décisions : les agents
réactifs, basent leur décision suivante seulement sur
l'entrée sensorielle courante et les agents planificateur,
prennent en compte une anticipation des développements futures du monde
pour décider sur l'action favorable.
La planification est aussi un autre
thème ayant depuis les années 60 une grande importance dans
plusieurs domaine et surtout celui de la robotique. C'est une discipline de
l'intelligence artificielle qui vise le développement d'algorithmes pour
produire des plans, typiquement pour l'exécution par un robot ou tout
autre agent. Les logiciels de planification qui incorporent ces algorithmes se
nomment planificateurs.
La planification dans les systèmes multi-agents, ou
planification multi-agents considère alors le problème de
planification dans le contexte des systèmes multi agent. Elle
étend la planification traditionnelle en intelligence artificielle aux
domaines où plusieurs agents sont impliqués dans un plan et ont
besoin d'agir simultanément.
Pour parler donc sur la planification multi-agents, il faut
passer premièrement par une description de la planification classique et
des principaux concepts des SMA.
I. La planification I.1. Définition et
aspects
La planification est une sous-discipline de l'intelligence
artificielle qui se propose [9]:
1- Etant donnée une représentation de
l'état initial du monde.
2- Etant donné un ensemble d'opérateurs de
changement d'état du monde (qui représentent les actions qu'il
est possible d'effectuer dans le monde).
3- Etant donné un but à atteindre (problème
à résoudre).
De donner les moyens à un système informatique de
trouver une suite d'actions (c-à-d d'opérateurs directement
exécutables) à appliquer sur le monde pour le faire passer de
l'état initial
à un état qui satisfait le but à atteindre.
Un plan est un ensemble structuré d'actions qui mène au but. Le
plan est élaboré par une partie du système appelée
générateur de plan (ou planificateur).
Idéalement, pour résoudre ces problèmes
de planification, il faut un algorithme général au
résonnement des problèmes de planification. Cependant, un tel
algorithme peut être non-existant. Nous commençons alors à
concentrer sur une simplification du problème de planification
général nommé « problème de planification
classique ».
I.2. La planification classique I.2.1. Modèle de
base
Le cadre formel de référence, relativement
auquel on définit généralement la sémantique des
représentations utilisées en planification, est celui des graphes
de transition d'états étiquetés. C'est un quadruplets G =
(S, A, E, ã) où :
· S = {s1, s2, ..., sn} est un ensemble fini et
récursivement énumérable d'états ;
· A = {a1, a2, ..., an} est un ensemble fini et
récursivement énumérable d'actions ;
· E = {e1, e2, ..., en} est un ensemble fini et
récursivement énumérable d'événements ;
· ã: S × A × E ? 2^S est une fonction de
transition entre états. Elle est définie par : si a est une
action et ã(s, a) est non vide alors a est applicable à
l'état s.
Ce système de transition d'états peut être
représenté par un graphe direct dont les noeuds sont les
états de S. Les arcs sont appelés transitions d'états.
Planifier dans ce cadre revient à trouver un chemin
dans G entre un état initial et un but [10]. Ayant un problème
spécifié par G, un état initial s0 E S, et un
sous-ensemble d'états buts Sg ? S, on cherche une séquence
d'actions (a1, a2, ..., an), telle que: an(...a2(a1(s0))..) soit un état
de Sg .
I.2.2. Représentation et langages
Pour travailler, tout algorithme de planification à
besoin d'une description de l'univers (représentation) sous une forme
facilement compréhensible. Le choix d'une représentation
adaptée aux problèmes à résoudre est un des
éléments les plus importants pour la conception d'un
système efficace; de nombreuses approches peuvent être
employés parmi [1, 10]:
La représentation dans la théorie des
ensembles : chaque état du monde est un ensemble de
propositions et chaque action est une expression spécifiant les
propositions qui doivent appartenir à l'état courant pour que
l'action puisse être exécutée, ainsi que celles qui seront
ajoutées et enlevées de l'état suite à
l'exécution de l'action ;
La représentation classique :
contrairement à la représentation
précédente, des prédicats du premier ordre et des
connecteurs logiques sont utilisés à la place des propositions
;
La représentation par variables d'états
: chaque état est représenté par un tuple de n
variables d'états valuées {x1, x2, ..., xn} et chaque action est
représentée par une fonction partielle qui permet de passer d'un
tuple à un autre tuple de variables d'états instanciées
;
Le but est de trouver un langage qui est à la fois
suffisamment expressif pour décrire une grande variété de
problèmes mais assez restrictif pour permettre à des algorithmes
efficaces d'agir. Pour cette raison plusieurs langages sont apparus comme
STRIPS, ADL mais le langage le plus
utilisé est PDDL [11].
I.2.2.1. Représentation avec STRIPS
Dans ce qui suit, nous introduisons dans un premier temps les
principaux concepts du domaine de la planification en utilisant
STRIPS; le langage basique de représentation des
planificateurs classiques.
Pour mieux comprendre les choses, la présentation de
cette représentation sera illustrée à travers l'exemple le
plus fameux des domaines de planification : le monde de blocs.
Il consiste en un ensemble de blocs, de forme cubique posés sur une
table « figure1.1 >> :
C
A
B
Figure1.1: Exemple du monde de blocs
· Les blocs peuvent s'entasser les uns sur les autres, mais
seulement un bloc peut être mis directement sur un autre bloc ;
· Un bras de robot peut tenir seulement un bloc à la
fois, donc il ne peut pas tenir un bloc qui a un autre bloc sur lui ;
· L'objectif sera toujours de bâtir une ou plusieurs
piles de blocs, spécifiées en termes de quels blocs sont au
dessus d'autres blocs.
· Représentation des états :
Les planificateurs décomposent le monde en conditions logiques
et représentent un état comme une conjonction de
littéraux positifs. Des restrictions sont
permises dans cette représentation :
· On peut considérer des littéraux
propositionnels: BrasVide peut représenter l'état : le bras du
robot est vide ;
· On peut considérer des littéraux du
premier-ordre: Sur(C,B)?Sur(B,A) peuvent représenter
l'état : le bloc C est sur le bloc B et B est sur A ;
· Les littéraux du premier-ordre doivent être
instanciés (ground) et libres de
fonctions; des littéraux comme sur(x,y) ou
habite(père(Paul), Paris) ne sont pas permis ; et
· L'hypothèse du monde-clos est
utilisée; cela signifie que toute condition non mentionnée dans
un état est considérée fausse.
Pour l'exemple de la « figure1.1 >> la
représentation de l'état sera :
S =
SurTtable(A) , SurTable(B) , Sur(C, A) BrasVide ,
Dégagé(B) , Dégagé(C)
SurTtable(A) , SurTable(B) , Sur(C, B) BrasVide ,
Dégagé(A)
· Représentation des actions :
Une action est définie par l'application d'un
opérateur de transformation. Le principe de la
représentation d'un opérateur consiste à spécifier
les préconditions qui doivent être valables avant
qu'il puisse être exécutée et les effets
qui s'ensuivent quand il est exécuté. Les
précondition peuvent être positives ou négatives : les
préconditions positives expriment les propriétés qui
doivent être vérifiées, par exemple Sur(C,
A) et les préconditions négatives expriment celles
qui doivent être absentes de l'état pour que l'action soit
appliquée, par exemple not(SurTable(A)).
Un opérateur avec variables est appelé un
schéma d'opérateur. Il ne correspond pas
à une seule action exécutable, mais à une famille d'action
différentes qui peuvent être dérivées en
instanciant les variables à des constantes
différentes.
Plus généralement un schéma
d'opérateur est constitué de trois parties:
Le nom de l'opérateur et une liste de
paramètres : définis par une expression de la forme
n(x1, . . ., xk) où n est le nom de l'opérateur
et x1, . . ., xk représentent les paramètres de
l'opérateur.
Les préconditions : définies
par une conjonction de littéraux (positifs), libres de fonctions,
faisant état de ce qui doit être vrai dans un état avant
que l'opérateur puisse être exécutée. Toute variable
apparaissant dans les préconditions doit aussi apparaître dans la
liste de paramètres de l'opérateur.
Les effets : définis par une
conjonction de littéraux (positifs ou négatifs), libres de
fonctions décrivant les faits à ajouter et les faits à
supprimer de l'état du monde après l'exécution de
l'opérateur : l'effet P?not(Q) signifie ajouter P et
supprimer Q. Les variables dans les effets doivent aussi
apparaître dans la liste de paramètres de l'opérateur.
Certains systèmes de planification divisent les effets en liste
d'addition (add list) pour les littéraux positifs et
en liste de suppression (delete list) pour les
littéraux négatifs.
Pour notre exemple des blocs, on peut définir les deux
opérateurs suivants :
Déplacer(b, x, y) ;;
L'opérateur pour déplacer le bloc b du dessus de x au dessus de y
Precond : Sur(b,
x)?Dégagé(b)?Dégagé(y)
Effet : Sur(b,
y)ADégagé(x)A#172;Sur(b, x)A#172;Dégagé(y)
DéplacerSurTable(b, x) ;;
L'opérateur pour déplacer un bloc b de x à la table
Precond : Sur(b, x)ADégagé(b)
Effet : Sur(b,
Table)ADégagé(x)A#172;Sur(b, x)
Une action est une instance d'un opérateur. Si a est
une action et si un état tel que Precond+(a) appartient à si et
precond-(a) si, alors a est applicable à si, et le résultat de
cette application App est l'état si+1 tel que :
App(si,a) = si+1 = (si - effets-(a)) U effets+(a).
Dans le modèle de l'état « s » de la
figure1.1 décrit précédemment, l'action «
Déplacer(C, A,
B) » peut être appliquée ; le nouveau
état « s' » engendré après son exécution
sera :
A
C
B
Figure1.2: L'exemple du monde de blocs dans
l'état S'
Le résultat Res de l'application d'une
séquence d'actions ?= <a1, a2, ..., an> sur un état s est
récursivement défini par :
Res(s, < >) = s
Res(s, <a1, a2, ..., an>) =
Res(App(s,a1), <a2, a3, ..., an>)
Remarques :
Il faut noter que si un effet positif est déjà dans
s celui-ci n'est pas ajouté deux fois et si un effet négatif
n'est pas dans s alors cette partie de l'effet est ignorée.
Chaque littéral non mentionné dans l'effet reste
inchangé. De cette façon STRIPS évite le frame
problem (c.a.d. représenter toutes les choses qui restent les
mêmes)
· Représentation des objectifs :
Un objectif est un état partiellement spécifié,
représenté comme une conjonction des littéraux
instanciés positifs comme BrasVide ou Sur(A, C). Un
état propositionnel s satisfait un objectif g si s
contient tous les atomes dans g (et possible d'autres);
l'état Sur(A, C)?Sur(C, B)?Sur(E, D) satisfait l'objectif
Sur(A, C)?Sur(C, B).
· Représentation des domaines : En
planification, un domaine de planification définit l'ensemble des
opérateurs qui peuvent s'appliquer sur le monde.
· Représentation des problèmes :
En planification Un problème P doit spécifier
l'état initial ainsi que le but à atteindre. Il peut être
défini comme un triplet P = (O, s0, g) où :
- s0, l'état initial, est un état quelconque de S
;
- g, le but, définit un ensemble cohérent de
prédicats instanciés, i.e. : les propriétés du
monde devant être atteintes ;
- O, est l'ensemble des opérateurs applicables.
· Représentation des plans : Un
plan solution pour un problème de planification P = (O, s0, g) est une
séquence d'actions ?= <a1, a2, ..., an> décrivant un chemin
d'un état initial s0 à un état final sn tel que le but g
soit inclus dans sn. Autrement dit, le plan ?= <a1, a2, ..., an> est une
solution pour le problème P si Res(s0, ?) satisfait g.
Pour notre exemple une représentation d'un
problème de planification et d'une solution peut être
décrite comme suit :
C
Figure1.3 : Exemple d'un problème de
planification dans le monde des blocs
Init (
Sur(A,Table)?Sur(B,Table)?Sur(C,Table)?Bloc(A)?
Bloc(B)?Bloc(C)?Dégagé(A)?Dégagé(B)?Dégagé(C)
) Objectif ( Sur(A, B)?Sur(B, C) )
Action ( Déplacer(b, x,
y)
Precond : Sur(b,
x)?Dégagé(b)?Dégagé(y)
Effet : Sur(b, y)?Dégagé(x)?#172;Sur(b,
x)?#172;Dégagé(y) )
Action (
DéplacerSurTable(b, x)
Precond : Sur(b, x)?Dégagé(b)
Effet : Sur(b, Table)?Dégagé(x)?#172;Sur(b, x)
)
Une solution possible est:
<Déplacer(B, Table, C), Déplacer(A, Table,
B)>
Avec ces aspects, STRIPS impose des restrictions sur la
représentation de la planification ; il est donc assez expressif pour
certains domaines du monde réel. Des extensions sont donc apparues pour
remédier à cette insuffisance de STRIPS. Il s'agit des deux
langages ADL et PDDL.
I.2.2.2. ADL et PDDL
· Le langage ADL
(Action Description language) est une extension significative en
planification classique, permet l'utilisation de quantificateurs et
d'expressions conditionnelles dans la description des opérateurs. Ainsi,
une description plus générale de l'opérateur de
déplacement Déplacer(b, x, y) serait :
Déplacer(b :bloc, x :bloc, y
:bloc)
Precond : Sur(b,
x)?Dégagé(b)?Dégagé(y) ? ~(b, y)
?~(x,y)
Effet : Sur(b, y)?#172;Sur(b, x)?(
~ (x, Table) -* Dégagé(x))?(? (y,
Table) -*Dégagé(y))
Le « tableau1.1 » décrit brièvement le
langage ADL en le comparant avec STRIPS [12]:
Langage STRIPS
|
Langage ADL
|
Seulement des littéraux positifs
dans la description des états :
Sur(b, x)?Dégagé(b)
|
Des littéraux positifs et négatifs
dans la description des états
Sur(b, y)?#172;Sur(b, x)
|
Hypothèse du monde-clos : tout
littéral non mentionné dans un état est
considérée faux.
|
Hypothèse du monde-ouvert : tout
littéral non mentionné dans un état est
considérée faux.
|
|
Effet P?#172;Q signifie : ajouter P et supprimer Q
|
Effet P?#172;Q signifie : ajouter P et #172;Q
et supprimer #172;P et Q
|
Seulement des littéraux instanciés dans les
objectifs :
SurTable(B) ? Sur(C, A)
|
Des variables quantifiées dans les objectifs : Vx
At(P1, x)AAt(P2, x) est l'objectif d'avoir P1 et P2 dans le
même endroit
|
Les objectifs sont des conjonctions: SurTable(B) ?
Sur(C, A)
|
Les objectifs admettent des
conjonctions et des disjonctions: SurTable(B)?(Sur(C,
B)VSur(A, B))
|
Les effets sont des conjonctions
|
Les effets conditionnels sont admis: when P:
E signifie que E et un effet seulement si P est satisfais
|
Non support de l'égalité
|
Prédicat d'égalité (x = y) admi
|
Non support des types
|
Les variables peuvent avoir des
types : (x :bloc, y :bloc)
|
|
Tableau!.!: comparaison entre STRIPS et
ADL
· Le langage PDDL (Planning Domain
Definition Language) [20] est une tentative pour standardiser
les langages de description des domaines et des problèmes de
planification. C'est un langage créé en 1998 par Drew McDermott
pour la compétition IPC-98 dans le but de développer un seul
langage de description des domaines de planification utilisé par tous
les planificateurs de cette compétition. Il est ensuite devenu comme un
standard utilisé par tous les planificateurs. La
dernière version est PDDL3.1.
En PDDL, les composants nécessaires à la
description de la planification sont :
· Les objets : les choses du monde qui nous
intéresse.
· Les prédicats : propriétés des
objets intéressants pour nous, peuvent être vraies ou fausses.
· L'état initial : l'état du monde de
départ.
· La spécification de l'objectif : les choses que
nous voulons soient vraies dans le monde.
· Actions/Opérateurs : chemins pour changer
l'état du monde.
Ainsi, les problèmes de planification
spécifiés dans ce langage sont séparés dans deux
fichiers :
Fichier du domaine : pour la
spécification des prédicats et des actions. La structure de ce
fichier est la suivante :
(define (domain < nom du domaine >)
< code PDDL pour les prédicats >
< code PDDL pour la première action >
[...]
< code PDDL pour la dernière action >
)
< nom du domaine > : une chaîne de
caractères identifiant le domaine de planification.
Exemple : pour notre exemple des blocs : un
fichier du domaine en PDDL peut être spécifié comme suit
:
(define (domain monde_blocs)
(: predicates (Sur ?x ?y) (Dégagé ?x))
(: action Déplacer
: parameters (?x ?y ?z)
: precondition
(and (Sur ?x ?y)(Dégagé
?x)(Dégagé ?z) (not (= ?y ?z)) (not (= ?x ?y))
(not (= ?x ?z)) (not (= ?x Table)))
: effect
(and (Sur ?x ?z) (not (Sur ?x ?y))
(when (not (= ?y Table)) (Dégagé
?y)) (when (not (= ?z Table)) (not (Dégagé ?z)))))
Fichier du problème : pour la
spécification des objets, de l'état initial et de l'objectif. La
structure de ce fichier est la suivante :
(define (problem < nom du problème >)
(:domain < nom du domaine >)
< code PDDL pour les objets >
< code PDDL pour l'état initial >
< code PDDL pour la specification de l'objectif
>
)
< nom du problème > : une chaîne de
caractères identifiant le problème de planification.
< nom du domaine > : doit être similaire au
nom du domaine dans le fichier du domaine correspondent.
Exemple : pour notre exemple des blocs : un
fichier du problème de la « figure1.4 » en PDDL peut
être spécifié comme suit :
(define (problem < problème_blocs >)
(:domain < monde_blocs >)
(:objects A B C Table )
(:init (Bloc A) (Bloc B) (Bloc C)
(Dégagé A) (Dégagé B)
(Dégagé C) (Sur A Table) (Sur B Table) (Sur C Table)) (:goal (and
(Sur A B) (Sur B C))
)
I.2.3. Recherche d'une solution (calcul d'un plan)
Pour déterminer la suite d'opérateurs (le plan)
qui permet de passer de la description de l'état initial à un
état qui satisfait le but, le planificateur peut utiliser, selon sa
conception, différentes stratégies (algorithmes) de recherche :
la recherche dans un espace d'états et la recherche dans un espace de
plans.
appliqués pour passer d'un état à un
autre. Le travail effectué par le planificateur pour dresser le plan
peut être représenté par un graphe de recherche qui est un
sous graphe du graphe d'états représentant le problème
à résoudre. Pour parcourir l'espace d'états, le
planificateur peut utiliser différentes méthodes : la recherche
par chaînage avant, par chaînage arrière ou
bidirectionnelle.
La recherche par chaînage avant
(Forward) : Cette approche est
appelée planification progressive puisqu'elle se déplace
vers l'avant. Elle consiste, en partant de l'état initial, à
trouver par essais successifs une suite d'actions qui permette d'arriver
à un état but. Le plan-solution est la suite des
opérateurs étiquetant les arcs du chemin-solution, chemin qui
mène de l'état initial à l'état-but. L'approche
peut être élaboré par l'algorithme ci-dessous [10]. L'appel
Forward(s0, Sg, nil) retourne un chemin de G (graphe d'états)
de s0 à un état de Sg, s'il existe un tel chemin. L'étape
de choix est non-déterministe, elle correspond à un
retour arrière en cas d'échec.
Forward (s, Sg, path)
si sE Sg alors retourner(path)
sinon soit applicables - {a? A| s ??
pré(a)} si applicables = 0 retourner (échec) sinon
Choix a E applicables
retourner (Forward(a(s), Sg, path.a))
|
|
Algorithme1.2: algorithme de planification
par chaînage avant
La recherche par chaînage arrière
(Backward) : Cette approche est
appelée planification régressive puisqu'elle se
déplace vers l'arrière. Elle consiste à parcourir le
graphe de recherche du problème, non pas en partant de l'état
initial, mais en partant du but (qui doit donc être explicitement connu)
et en appliquant l'inverse des opérateurs de planification pour produire
des sous-buts jusqu'à arriver à l'état initial. Si
l'algorithme permet de remonter à cet état initial, alors il
retourne le plan solution trouvé.
L'approche peut être élaborée par
l'algorithme ci-après [10]. L'algorithme choisit une proposition but
particulière << g >> parmi les buts courants
<< y >> et une action pertinente pour ce
but. Une action est dite pertinente pour un objectif conjonctif si
elle accomplit un des conjoints de l'objectif.
La fonction <<
Regression(a, y) >> est définie
comme suit : Ayant un ensemble y de propositions décrivant les
buts, la régression de a relativement à y
cherche un ensemble y' de propositions telles que tout état s
qui les comporte soit dans le domaine de définition de a et
conduise à un état où y est satisfaite :
Regression(a, ?) = y' tel que y' ?=
pré(a) et sE M(y'): a(s) ?? ?
Backward(s0, y , path)
si s0 |= y alors retourner(path)
sinon Choix de g E 7
soit pertinentes -- {a E A | eff(a) |= g}
si pertinentes = 0 alors retourner (échec) sinon
Choix de a E pertinentes
soit y' - Regression(a, ?)
retourner (Backward(s0, y', a.path))
|
|
Algorithme1.3: algorithme de planification
par chaînage arrière
La recherche bidirectionnelle : consiste
à utiliser simultanément les techniques de recherche avant et
arrière jusqu'à rencontrer un état commun aux deux
processus. Le plan-solution est alors la suite des opérateurs qui
permettent de passer de l'état initial à l'état commun
plus l'inverse de la suite des opérateurs qui mènent du but
à l'état commun. Cette méthode nécessite la
connaissance explicite du but.
I.2.3.2. Recherche dans un espace de plans :
Dans l'approche de la planification dans un espace de plans, l'espace
de recherche n'est plus un ensemble d'états du monde mais un espace de
plans partiels dont les noeuds représentent des plans partiellement
spécifiés et les arcs sont des opérations de raffinement
de plans, i.e., qui permettent de réaliser un but ouvert ou d'enlever
une inconsistance potentielle (par exemple lorsque deux actions sont en
conflit) [1]. Cette approche obéit au paradigme de la
décomposition de but, i.e, le problème initial (but à
atteindre) est décomposé en sous-problèmes plus simples
(grâce à l'utilisation de règles de décomposition);
ceux-ci sont à nouveau décomposés, et ainsi de suite
jusqu'à l'obtention de problèmes terminaux (tous solubles par des
actions élémentaires) [9].
II. Les SMA
Le thème des systèmes multi-agents (SMA), s'il
n'est pas récent, est actuellement un champ de recherche très
actif. Cette discipline est à la connexion de plusieurs domaines en
particulier de l'intelligence artificielle, des systèmes informatiques
distribués et du génie logiciel. C'est une discipline qui
s'intéresse aux comportements collectifs produits par les interactions
de plusieurs entités autonomes et flexibles appelées agents, que
ces interactions tournent autour de la coopération, de la concurrence ou
de la coexistence entre ces agents.
C'est un domaine très large ; ce que nous allons
présentées dans cette section ne fait que des points sur les
principaux concepts des SMA ([7], [13], et [15] pour des articles de
référence).
II.1. Qu'est ce qu'un agent?
Dans la littérature, on trouve une multitude de
définitions d'agents. Elles se ressemblent toutes, mais diffèrent
selon le type d'application pour laquelle est conçu l'agent. Nous avons
choisis celle de Jennings, Sycara et Wooldridge [7] :
« Un agent est un système informatique,
situé dans un environnement, et quiagit
d'une façon autonome et flexible pour
atteindre les objectifs pour lesquels il a été conçu
».
Les notions « situé >>, « autonome
>> et « flexible >> sont définies comme suit:
· Situé : l'agent est
capable d'agir sur son environnement à partir des entrées
sensorielles qu'il reçoit de ce même environnement;
· Autonome : l'agent est capable
d'agir sans l'intervention d'un tiers (humain ou agent) et contrôle ses
propres actions ainsi que son état interne;
· Flexible : l'agent dans ce cas
est:
Capable de répondre à temps: il doit
être capable de percevoir son environnement et élaborer une
réponse dans les temps requis;
Proactif: il n'agit pas simplement en réponse
à son environnement, il est également capable d'avoir un
comportement opportuniste, dirigé par ses buts d'utilité, et de
prendre des initiatives au moment approprié.
Social: l'agent doit être capable d'interagir
avec les autres agents (logiciels et humains) quand la situation l'exige afin
de compléter ses tâches ou aider ces agents à accomplir les
leurs.
II.2. Architectures d'agents
Un agent peut toujours être vu comme une fonction liant
ses perceptions à ses actions. Ce qui différencie les
différentes architectures d'agents, c'est la manière dont les
perceptions sont liées aux actions. Les deux grandes familles d'agents
sont : les agents réactifs et les agents
délibératifs (voir [15] pour les détails).
II.2.1. Agents réactifs : Un agent
réactif ne fait que réagir aux changements qui surviennent dans
l'environnement. Autrement dit, un tel agent ne fait ni
délibération ni planification, il se contente simplement
d'acquérir des perceptions et de réagir à celles ci en
appliquant certaines règles prédéfinies tant donné
qu'il n'y a pratiquement pas de raisonnement, ces agents peuvent agir et
réagir très rapidement. Cette catégorie regroupe les deux
types d'architecture suivants :
· les agents à réflexes simples.
· les agents conservant une trace du monde.
II.2.2. Agents délibératifs :
Un agent délibératif est un agent qui effectue une
certaine délibération pour choisir ses actions. Une telle
délibération peut se faire en se basant sur les buts de l'agent
ou sur une certaine fonction d'utilité. Elle peut prendre la forme d'un
plan qui reflète la suite d'actions que l'agent doit effectuer en vue de
réaliser son but. Ainsi, les trois types d'architecture suivants peuvent
être regroupés sous cette catégorie :
· les agents ayant des buts.
· les agents utilisant une fonction d'utilité.
· les agents BDI.
II.2.3. Agents hybrides : Chacune des
architectures précédentes est appropriée à un
certain type de problème. Cependant, pour la majorité des
problèmes, ni une architecture complètement réactive, ni
une architecture complètement délibérative n'est
appropriée. Dans ce cas, une architecture conciliant à la fois
des aspects réactifs et délibératifs est requise. On parle
alors d'architecture hybride.
II.3. Systèmes multi-agents II.3.1.
Définition
Un système multi-agents est un système
distribué composé d'un ensemble d'agents interagissant, le plus
souvent, selon des modes de coopération, de concurrence
ou de coexistence situés dans un environnement commun. Il
possède les caractéristiques principales suivantes [7]:
· chaque agent a des informations ou des capacités
de résolution de problèmes limitées, ainsi chaque agent a
un point de vue partiel ;
· il n'y a aucun contrôle global du système
multi-agents ;
· les donnés sont décentralisées ;
· le calcul est asynchrone.
Pourquoi des SMA ?
· Certains domaines requièrent l'utilisation de
plusieurs entités, par exemple, il y a des systèmes qui sont
géographiquement distribués. Les SMA procurent une façon
facile et efficace de les modéliser.
· Une autre situation, où les sont requis, est
lorsque les différents systèmes et les données qui s'y
rattachent appartiennent à des organisations indépendantes qui
veulent garder leurs informations privées et sécurisées
pour des raisons concurrentielles.
· Les SMA possèdent également les avantages
traditionnels de la résolution distribuée et concurrente de
problèmes [15] :
- La modularité, permet de rendre la
programmation plus simple ;
- La vitesse, due principalement au parallélisme
;
- La fiabilité, qui peut être
également atteinte, dans la mesure où le contrôle et les
responsabilités étant partagés entre les différents
agents, le système peut tolérer la défaillance d'un ou de
plusieurs agents.
· Finalement, les SMA héritent aussi des
bénéfices envisageables du domaine de l'intelligence artificielle
comme par exemple, le traitement symbolique (au niveau des connaissances).
II.3.2. Interaction entre agents : Jacques
Ferber donne la définition suivante de l'interaction : « Une
interaction est la mise en relation dynamique de deux ou plusieurs agents par
le biais d'un ensemble d'actions réciproques... » [13]. Les
interactions entre agents peuvent variées selon les situations dont se
trouve ces agents : coexistence, compétition ou coopération.
· S'ils ne font que coexister, alors
chaque agent ne considère les autres agents que comme des composantes de
l'environnement. Il n'y a aucune communication directe entre les agents
· S'ils sont en compétition,
alors le but de chaque agent est de maximiser sa propre satisfaction. La
compétition entre agents peut avoir plusieurs sources : Les buts des
agents peuvent être incompatibles ou les ressources peuvent être
insuffisantes.
· S'ils sont en coopération,
alors le but des agents n'est plus seulement de maximiser leurs propres
satisfactions mais aussi de contribuer à la réussite du groupe.
Les agents travaillent ensemble à la résolution d'un
problème commun.
II.3.3. Coopération entre agents : La
coopération est nécessaire quand un agent ne peut pas atteindre
ses buts sans l'aide des autres agents. Cette situation est fréquente
même chez des espèces primitives. Les buts nécessitant la
coopération peuvent être.
II.3.4. Coordination entre agents : Il y a
interaction entre les agents soit pace qu'ils coopèrent, soit parce
qu'ils sont en compétition. Dans les deux cas, une coordination peut
être nécessaire pour améliorer le fonctionnement global du
système [13].
Lorsque plusieurs agents travaillent sur le même lieu,
utilisent les mêmes ressources, où résolvent des sous
problèmes qui ne sont pas complètement indépendants
(conception d'un objet
complexe par exemple), ils doivent accomplir, en plus des
tâches liées directement au problème traité, des
tâches de coordination. Ces tâches ne sont pas directement
productives mais elles améliorent les tâches productives.
Les tâches de coordination peuvent être accomplies
directement par les agents concernés quand elles sont relativement rares
et qu'elles n'engagent pas un grand nombre d'agents en même temps. Sinon,
elles sont prises en charge par des agents spécialisés qui
recueillent les demandes et fixent les ordres de priorité ou d'autres
contraintes.
II.3.5. Négociation entre agents :
Comme nous avons vus précédemment, en interagissant dans
un environnement partagé, les agents doivent coordonner leurs actions et
avoir des mécanismes pour la résolution des conflits. Le
mécanisme favori pour la résolution des conflits et
la coordination, inspiré du modèle des humains, est
la négociation.
Dans les systèmes multi-agents, la négociation
est une composante de base de l'interaction surtout parce que les agents sont
autonomes ; il n'y a pas de solution imposée à l'avance et les
agents doivent arriver à trouver des solutions dynamiquement, pendant
qu'ils résolvent les problèmes [14].
II.3.6 Communication entre agents : Les
communications, dans les systèmes multi-agents comme chez les humains,
sont à la base des interactions et de l'organisation sociale. Sans
communication, l'agent n'est qu'un individu isolé, refermé sur sa
boucle perception-délibérationaction. C'est parce que les agents
communiquent qu'ils peuvent coopérer, coordonner leurs actions,
réaliser des taches en commun et devenir ainsi de véritables
êtres sociaux.
Dans les SMA deux stratégies principales ont
été utilisées pour supporter la communication entre
agents:
Communication par transfert de messages :
Dans cette approche, les agents échangent de messages entre eux
directement (pas de mémoire partagée).
Communication par l'utilisation d'un tableau noir :
Un tableau noir est utilisé pour spécifier une
mémoire partagée par divers systèmes. Dans un SMA
utilisant un tableau noir, les agents peuvent écrire des messages,
insérer des résultats partiels de leurs calculs et obtenir de
l'information dans et à partir de ce tableau.
Pour coordonner l'activité d'un ensemble
hétérogène d'agents autonomes, il faut que les agents
communiquent dans un langage compréhensible par tous les autres. Les
deux langages les plus utilisés sont : KQML(1) et
FIPA-ACL(2).
III. La planification multi-agents
La recherche dans la planification multi-agents est
prometteuse pour des problèmes réels : d'une part, les techniques
de planification d'AI fournissent des outils puissants pour résoudre des
problèmes dans le cadre des agents singulier ; et d'une autre part, les
systèmes multi-agents, qui ont fait une grande progression au cours de
ces dernières années, sont identifiés comme technologie
principale pour aborder des problèmes complexes dans des domaines
d'application réalistes.
(1) Knowledge Query and Manipulation Language
(2) Foundations of Intelligent Physical Agents-Agent
Communication Language
En planification multi-agents (référée
aussi par planification distribuée), le domaine de planification est
réparti sur l'ensemble des agents. Chaque agent est capable de
réaliser un certain nombre d'actions: ses compétences. C'est la
mise en commun et l'ordonnancement des compétences de chaque agent, dans
le but de résoudre un problème donné, qui va permettre de
faire émerger un plan solution.
III.1. Planification et coordination
Dans de nombreux cas les dépendances entre les taches
des agents rendent une planification indépendante impossible.
C'est-à-dire, si les agents ne tiennent pas compte des
dépendances entre leurs plans, ils peuvent arrivés à des
conflits quand ils essayent d'exécuter leurs plans.
Pour résoudre leurs dépendances, les agents doivent
coordonner leurs efforts.
Clairement, un problème de planification multi-agents a
deux composants : la planification et la coordination. Le problème de
planification multi-agents peut être donc défini comme suit
[8]:
Le problème de planification multi-agents est le
problème suivant : Etant donné une description de l'état
initial, un ensemble de buts globaux, un ensemble d'agents (au moins de deux),
et pour chaque agent un ensemble de ses capacités et de ses buts
privés, trouver un plan pour chaque agent qui réalise ses buts
privés, tel que ces plans ensemble sont coordonnés et les buts
globaux sont aussi bien atteints.
En résumant,
|
Planification multi-agents = Planification + Coordination
|
III.2. Modèles de la planification
multi-agents
Pour distinguer les différents modèles de la
planification multi-agents, on doit référer au problème de
la planification multi-agents en tant que problème de planification
distribuée. Le terme de planification distribuée est toutefois
ambigu car il n'explicite pas ce qui est distribué. En effet, les plans
peuvent être construits de manière centralisée puis
distribués aux agents, ou bien chaque agent peut construire localement
son propre plan puis le coordonner de manière distribuée. Dans le
premier cas, seule l'exécution du plan est distribuée. En
revanche, dans le second, la synthèse de plans, le processus de
coordination ainsi que l'exécution sont réalisés de
manière complètement distribuée [1].
III.2.1. Planification centralisée :
Repose toujours sur l'existence d'un agent coordinateur. Cet agent
centralise l'ensemble des plans des agents du système et résout
les conflits potentiels entre leurs activités en introduisant des
actions de synchronisation. L'agent coordinateur peut:
· soit planifier pour l'ensemble des agents et, dans ce
cas, il doit décomposer le plan global en sous-plans synchronisés
pouvant être exécutés par les agents ;
· soit chaque agent peut planifier localement et, dans ce
cas, le rôle de l'agent coordinateur se limite à la
synchronisation des plans reçus.
III.2.2. Planification distribuée : Le
processus de planification est distribué. Deux modèles sont
envisageables dans cette approche :
Planification distribuée avec plan
centralisé : Dans ce modèle, Le but global des agents
est d'accomplir une tâche T. Cette tâche va être
décomposée en plusieurs sous-tâches non ordonnées
Tj. Après l'assignement de ces sous-tâches aux différents
agents, chaque agent du système élabore un sous-plan pour
résoudre la sous-tâche lui est assignée. En fin, une
synchronisation entre les agents arrive à élaborer un plan global
centralisé permettant de réaliser la tache T.
Décomposition Planification
Synchronisation
Entre agents
T {Ti, Tj, ..., Tk} {PTi, PTj, ..., PTk}
PT
Tàche globale
|
Ensemble de tâches non ordonnées
|
Plans associés
|
Plan centralisé
|
|
Planification distribuée avec plan
distribué : Dans ce modèle, le processus de
synthèse et d'exécution d'un plan multi-agents sont les deux
distribués. Deux approches sont envisageables à nouveau dans
cette approche orientée tâches et orienté
agents. La différence réside dans l'existence d'un but
global ou non.
En résumant, les différents modèles de la
planification multi-agents peuvent être résumé dans le
schéma de la figure suivante :
Planification multi-agents
Un planificateur Plusieurs exécutants
Planification centralisée
Chaque agent planifie et exécute
Planification distribuée
Orienté tâche Décomposition
Orienté agent Coordination
Figure1.4 : Modèles de la planification
multi-agents
Conclusion
Dans ce chapitre nous avons parlées sur la
planification multi-agents. Mais il nous apparaît clairement que ce
domaine n'est qu'une extension des principes de la planification classiques au
domaine des systèmes multi-agents.
Nous avons donc divisées le chapitre en trois section
: la première section est spécifiée à la
planification classique et à ces principes généraux (de la
représentation des connaissances qu'elle utilise jusqu'à la
recherche de la solution). Dans la deuxième section nous avons
essayées d'aborder brièvement, le domaine des systèmes
multi-agents. En fin et dans la dernière section nous avons
parlées des principes de la planification distribuée (dans un
contexte multi-agents) ainsi que ses différents modèles.
Introduction :
De nos jours, le web n'est plus simplement un énorme
entrepôt de texte et d'images, son évolution a fait qu'il est
aussi un fournisseur de services. Aujourd'hui, même si toutes les
entreprises n'ont pas fondé l'essentiel de leurs services
économiques sur le net, elles se doivent au moins d'y être
représentées, ne serait-ce que pour donner l'image d'une
entreprise moderne, dynamique et technologiquement à la page [2]. Une
nouvelle technologie leur facilite grandement les choses et permet une
communication facile et à distance entre ces entreprises et leurs
partenaires et clients c'est les services web.
La notion de « service web » désigne
essentiellement une application mise à disposition sur Internet par un
fournisseur de services, et accessible par les clients à travers des
protocoles Internet standard.
Actuellement, les services web sont mis en oeuvre au travers
de trois technologies standards : WSDL, UDDI et SOAP. Ces technologies
facilitent la description, la découverte et la communication entre
services. Cependant, cette infrastructure de base ne permet pas encore aux
services web de tenir leur promesse d'une gestion largement automatisée.
Fondamentalement, elle doit s'accommoder d'un moyen pour décrire les
services web d'une manière compréhensible par une machine.
Le web sémantique est une vision du web dans laquelle
toute information possède une sémantique compréhensible
par une machine. Appliqués aux services web, les principes du web
sémantique doivent permettre de décrire la sémantique de
leurs fonctionnalités, ce qui produit par conséquent une
proposition d'automatisation des différentes tâches de leur cycle
de vie.
Plusieurs langages étaient apparus pour faire une
telle description des services web, essentiellement le langage OWL-S.
La suite du chapitre sera présentée
essentiellement en deux parties : une description générale du
concept service web et une autre du concept service web sémantique
contenant une bref présentation du langage OWL-S.
I. Services web
I.1 Qu'est ce qu'un service web ?
Les services web représentent un mécanisme de
communication entre applications distantes à travers le réseau
Internet indépendant de tout langage de programmation et de toute
plate-forme
d'exécution. Pour cette raison les activités de
recherche et développement autour du sujet services web ont un dynamisme
très haut. Le W3C (World Wide Web Consortium) est un groupe qui
travaille sur ce sujet. Nous adoptons donc la définition d'un service
web de ce groupe :
« Un service web est un système logiciel
destiné à supporter l'interaction ordinateur-ordinateur sur le
réseau. Il a une interface décrite en un format traitable par
l'ordinateur (e.g. WSDL). Autres systèmes réagissent
réciproquement avec le service web d'une façon prescrite par sa
description en utilisant des messages SOAP, typiquement transmis avec le
protocole http et une sérialisation XML, en conjonction avec d'autres
standards relatifs au web ».
I.2. Architecture, modèle de fonctionnement
Le modèle des services web repose sur une architecture
orientée service. Celle-ci fait intervenir trois catégories
d'acteurs :
· les fournisseurs de services (i.e. les
entités responsables du service web),
· les clients qui servent
d'intermédiaires aux utilisateurs de services et
· les annuaires qui offrent aux
fournisseurs la capacité de publier leurs services et aux clients le
moyen de localiser leurs besoins en terme de services.
Le fonctionnement des services web repose sur un modèle
en couches, dont les quatre couches fondamentales sont les suivantes :
· la couche publication repose sur le
protocole UDDI, qui assure le regroupement, le stockage et la
diffusion des descriptions de services web.
· la couche description est prise en
charge par le langage WSDL, qui décrit les
fonctionnalités fournies par le service web, les messages reçus
et envoyés pour chaque fonctionnalité, ainsi que le protocole
adopté pour la communication. Les types des données contenues
dans les messages sont décrits à l'aide du langage XML
Schéma.
· la couche message utilise des protocoles
reposant sur le langage XML. Actuellement,
SOAP est le protocole utilisé pour cette couche.
· la couche transport, repose sur le
protocole HTTP. Le protocole le plus utilisé sur Internet pour le
transfert de données et de messages.
La dynamique de l'architecture se décompose ainsi :
· D'abord, on effectue le déploiement du service
web, en fonction de la plateforme.
· Ensuite, on enregistre le service web à l'aide de
WSDL dans l'annuaire UDDI.
· L'étape suivante est la découverte du
service web par le client, par l'intermédiaire d'UDDI qui lui donne
accès à tous les services web inscrits. Pour ce, on utilise
SOAP.
· Enfin, Le client invoque le service web voulu, ce qui
termine le cycle de vie de ce service web.
2 : J'ai trouvé ! Voici le serveur
hébergeant ce service
Annuaire UDDI
1 : je cherche Un service web
3 : quel est le format d'appel du service que tu
proposes
Contrat SOAP
4 : Voici mon contrat (WSDL)
XML
Client
XML
Serveur
5 : J'ai compris comment invoquer
ton service et je t'envoie un document
représentant ma requête
XML
6 : j'ai exécuté ta requête et je te
retourne le résultat
Figure 2.1 : Modèle de fonctionnement de
l'architecture service web I.3. Principales technologies
utilisées
Un des points forts des services web est l'utilisation des
standards XML, SOAP, WSDL et UDDI augmentant ainsi le niveau d'interaction et
d'interopérabilité entre applications. Dans ce qui suit nous
expliquerons chacun de ces standards en bref.
I.3.1. XML-eXtensible Markup Language :
Recommandation du W3C depuis le 10 février 1998, le langage XML
connait depuis ses débuts un succès indéniable.
Les normes strictes qui gèrent la syntaxe et la
structure de XML rendent le langage et son utilisation plus aisés,
favorisant notamment la factorisation des travaux de développement
d'analyseurs syntaxiques. XML fournit donc un cadre de structuration des
données qui peut être employé pour la définition
rapide et sans ambiguïté syntaxique d'un format de document.
Un document est composé d'une définition de sa
structure et d'un contenu. La structure d'un document XML est souvent
représentée graphiquement comme un arbre. La racine du document
constitue le sujet du document, et les feuilles sont les éléments
de ce sujet. De ce fait, XML est alors flexible et extensible, et est devenu
rapidement le standard d'échange de données sur le web.
L'exemple suivant de document XML permet de décrire une
personne :
<?xml version="1.0" encoding="UTF-8"?>
<personne>
<nom>Dupond</nom>
<prenom>Jean</prenom>
<naissance>
<lieu>
<ville>Paris</ville>
<pays>France</pays> </lieu>
<date>
<jour>14</jour>
<mois>7</mois>
<annee>1789</annee> </date>
</naissance>
</personne>
I.3.2. SOAP-Simple Object Access Protocol :
SOAP est un protocole de communication pour l'échange
d'informations dans un environnement distribué. SOAP encourage le
partage des données entre machines qui seront capables d'analyser
facilement et correctement ces mêmes données [2], grâce
notamment à l'utilisation de XML comme principal format de
données. Il définit la structure des messages XML utilisés
par les applications pour dialoguer entre elles.
SOAP n'est pas lié à aucun système
d'exploitation ni langage de programmation. Il est indépendant du
langage d'implémentation des applications client et serveur. En plus, il
peut potentiellement être utilisé avec une variété
de protocoles (e.g. HTTP, HTTP Extension Framework).
I.3.3. WSDL-Web Services Description Language :
Lorsque vous voulez avoir des informations sur un service web, pour
pouvoir l'utiliser par exemple, vous devez faire une référence au
fichier WSDL.
WSDL est un langage de description de service web sous format
XML et indépendante du modèle de développement. WSDL
propose une double description du service (figure 2.4): Une vue dite
abstraite qui présente les opérations et les messages
des services et une autre dite concrète qui présente les
choix de mise en oeuvre faits par le fournisseur du service. Cette
séparation permet aux composants d'interagir même si l'application
a été modifiée, ce qui est un point important pour assurer
l'interopérabilité des services.
Un document WSDL décrit comment utiliser un service
web. Mais comment trouver ce service web? Comment localiser le document WSDL
qui le décrit? Le registre UDDI est la réponse
à cette question. On le présente dans le paragraphe suivant.
I.3.4. UDDI-Universal Description Discovery and
Integration : L'utilisation d'un service web nécessite sa
publication par son fournisseur aussi que sa découverte par le client
désirant l'invoquer: c'est le rôle d'UDDI.
UDDI est un annuaire de type XML, qui permet de bâtir
des annuaires des entreprises, ainsi que leurs produits et services, leur
permettant de s'enregistrer et de publier les services web qu'elles
désirent offrir au grand public [2].
L'idée derrière UDDI est de normaliser le
format des entrées d'entreprise et de services dans un annuaire pour
faciliter la découverte des services web et encourager les
échanges d'affaires entre elles.
I.4. Problèmes existants dans le domaine des
services web
Les actuels sujets de recherche dans le domaine des services
web sont nombreux. Un nombre considérable d'études tournent
autour de la découverte des services et ses sujets rattachés
comme sont la sélection, la sémantique et la composition.
Problèmes de sélection:
Découvrir un service web qui nous intéresse est une
chose, découvrir le service web le plus adéquat en est une autre.
La qualité de service dans le cas des services web se mesure à
l'aide de plusieurs métriques dont les métriques de performance
et de fiabilité. Une recherche sur UDDI permet certainement de trouver
plusieurs services web qui remplissent ses critères. Mais lequel sera le
meilleur? Il devient ainsi nécessaire de choisir les services
web pertinents parmi ceux trouvés et de se fixer des critères
pour choisir les meilleurs.
Problèmes de sémantique: Tel
que présentés précédemment, les services web sont
décrits syntaxiquement et ne permettent en aucun cas l'interaction entre
services, leur découverte dynamique ou automatique, ou encore leur
composition sans une intervention humaine. Pour le permettre Il paraît
alors nécessaire de se doter d'un mécanisme qui réglerait
ce problème de sémantique.
Problèmes de composition de services web:
Les services web, tels qu'ils sont définis actuellement, sont
limités à des fonctionnalités relativement simples.
Toutefois, pour certains types d'applications, il est nécessaire de
combiner un ensemble de services web simples en un service répondant
à des exigences plus complexes.
Ce qui nous concerne pour notre travail est la
sémantique dans les services web ainsi que la
composition. Deux objet qui seront présentés
dans ce qui suit.
II. Vers les services web sémantiques
Parallèlement aux services web, un autre concept fait
aujourd'hui une grande évolution du web. Celui du web
sémantique.
A sa création par Tim Berners Lee, au début des
années 1990, le web était exclusivement destiné à
partager des informations sous forme de pages html, affichables par un logiciel
« navigateur web », et généralement destinées
à être lues par un utilisateur humain.
Très rapidement, on s'est rendu compte que cette
conception du web était bien trop limitée, et ne permettait pas
un réel partage du savoir : tout au plus cela permettait-il de
présenter des connaissances (de manière syntaxique), mais en
aucun cas de les rendre directement utilisables.
Le web sémantique consiste alors à faire
ajouter à toutes ces ressources une sémantique qui permettrait
aux systèmes informatiques d'en « comprendre » le sens en
accédant à des collections structurées d'informations et
à des règles d'inférence qui peuvent être
utilisé pour conduire des raisonnements automatisés afin de mieux
satisfaire les exigences des utilisateurs.
III. Services web sémantiques
Le besoin d'automatisation du processus de conception et de
mise en oeuvre des services web rejoint les préoccupations à
l'origine du Web sémantique, à savoir comment décrire
formellement les connaissances de manière à les rendre
exploitables par des machines. En conséquence, les technologies et les
outils développés dans le contexte du Web sémantique
peuvent certainement compléter la technologie des Web services en vue
d'apporter des réponses crédibles au problème de
l'automatisation. C'est la naissance des services web sémantiques.
De manière générale, l'objectif
visé par la notion de services web sémantiques est de
créer un web sémantique de services dont les
propriétés, les capacités, les interfaces et les effets
sont décrits de manière non ambiguë et exploitable par des
machines.
La sémantique ainsi exprimée permette
l'automatisation de plusieurs fonctionnalités qui sont
nécessaires pour une collaboration inter-entreprise efficace, dont les
principales sont les suivantes:
Découverte de services web:
Actuellement cette tache doit être réalisée par un
humain qui doit utiliser un moteur de recherche ou un annuaire pour trouver le
service, lire la page Web qui décrit ce service, puis l'exécuter
manuellement pour vérifier que celui-ci correspond bien aux attentes de
l'utilisateur. Cette sémantique doit donc fournir une description
déclarative des propriétés et des capacités du
service web.
Invocation de services web: L'invocation
automatique d'un service signifie l'exécution du service par un
programme informatique ou un agent logiciel. Cet agent doit être capable
d'interpréter cette description sémantique afin de
délivrer les données nécessaires à
l'exécution du service web.
Composition de services web: L'objectif
qu'un utilisateur veut atteindre nécessite souvent l'utilisation de
plusieurs services web. L'agent logiciel chargé d'atteindre cet objectif
doit disposer de suffisamment de données afin de pouvoir
sélectionner, composer et interopérer automatiquement ces
services web. La description sémantique doit donc pouvoir fournir toutes
ces informations.
Surveillance de l'exécution de services web:
un agent logiciel doit pouvoir connaître l'état
d'avancement de sa requête. Cette description sémantique doit
pouvoir fournir les informations nécessaires.
Plusieurs langages de description des services web
sémantiques sont apparus. Celui de référence est le
langage OWL-S.
III.1. Le langage OWL-S
OWL-S est une extension du langage OWL. Il a pour objectif de
fournir une plus grande expressivité en permettant la description des
caractéristiques des services afin de pouvoir raisonner dessus dans le
but de découvrir, invoquer, composer et gérer les services web de
façon la plus automatisée possible.
Ainsi un service dans OWL-S est décrit à travers
les quatre zones conceptuelles suivantes (figure2.5):
Le service profile: contient la réponse à
la question: exige-t-il quoi le service d'un utilisateur ou d'un autre agent,
et lui en fournit quoi ? Ainsi, la classe service présente un
ServiceProfile.
Le Service Process Model: contient la réponse
à la question: Comment fonctionne le service ? Ainsi la classe service
est décrite par un ServiceModel.
Le Service Grounding: contient la réponse
à la question: De quelle façon le service doit-il être
utilisé ? Ainsi, la classe service supporte un
ServiceGrounding.
Service
Présents
(what it does)
Described by
How it works
Supports
How to access it
ServiceProfile
ServiceProcoss
ServiceGrounding
Le Service: il fait seulement attacher les parties
précédentes ensemble dans une seule unité qui peut
être publier et invoquer.
Figure2.5: éléments d'une
description OWL-S
III.1.1. Le Service Profile
Le << profile>> décrit ce que fait le
service, détaille les limitations de son applicabilité et sa
qualité de service et il spécifie également les exigences
que doit l'utilisateur satisfaire pour l'utiliser correctement. Ainsi un
système recherchant un service examinerait la première fois le
<< profile>> pour voir si le service fournit ce qui est
nécessaire.
Un profile OWL-S décrit le service en fonction des
trois types d'information basiques suivants: Quelle est l'organisation
fournissant le service, quelle est la fonction accomplie par le service et un
ensemble de paramètres spécifiant des caractéristiques du
service.
L'information sur le fournisseur consiste en une Contact
Information qui fournit un mécanisme de référence aux
humains ou aux individus responsables du service. Un individu peut être
soit un opérateur de maintenance qui est responsable de
l'exécution du service ou un représentant d'un client qui peut
fournir des informations additionnelles sur le service.
La description fonctionnelle du service est exprimée
selon deux aspects:
· Transformation de d'informations par spécification
des entrées (inputs) requises par le service et des sorties
(outputs) générées.
· Changement d'état produit par
l'exécution du service par spécification des préconditions
(preconditions) requises par le service et des effets
(effects) qui résultent de l'exécution du service.
Finalement, le profile permet la description d'un ensemble de
propriétés pour décrire des caractéristiques du
service. Le premier type d'information donne une classification du service ou
une catégorie (category), le second type spécifie la
qualité du service et le dernier spécifie un ensemble de
paramètres additionnels du service comme par exemple une estimation du
temps de réponse max pour une disponibilité géographique
du service.
Un profile OWL-S est ainsi organisé principalement comme
suit :
· Le nom du service, les contacts et la description du
service qui sont communément appelés propriétés non
fonctionnelles.
· La description de fonctionnalité
"IOPE" (inputs, outputs,
preconditions, effects).
· Une classification selon une taxonomie industrielle
(catégorie) et une description de qualité.
III.1.2. Le Service Process Model
Pour donner une perspective détaillée sur le
fonctionnement d'un service, celui-ci peut être vu comme un
processus. OWL-S fournit une ontologie de processus
(figure2.6) dans laquelle les processus sont vus de deux façons :
· un processus produit une transformation à partir
d'un ensemble de données d'entrée (inputs) vers un
ensemble de données de sortie (outputs).
· un processus produit une transition d'un état du
monde vers un autre. Cette transition est décrite en termes de
preconditions (preconditions) et d'effets (effects).
Dans telle ontologie, un processus peut avoir n'importe quel
nombre d'entrées représentant une information qui est sous
quelques conditions requise pour l'exécution du service. Il peut avoir
n'importe quel nombre de sorties, l'information fournie par le service
conditionnement après son exécution. Il peut être aussi
n'importe quel nombre de préconditions et d'effets. Les sorties et les
effets peuvent avoir des conditions associées à lui. OWL-S ne
permet pas pour le présent l'expression des conditions, les deux
langages principaux sont: SWRL (Semantic Web Rules Language) et DRS.
Le ProcessModel identifie trois types de processus : atomique
(AtomicProcess), simple (SimpleProcess) et composite
(CompositeProcess).
Processus atomique: directement invocable
(par le passage des messages appropriés). Ainsi, il prend un message
d'entrée, exécute et il retourne un message de sortie.
Exécutable dans une seule étape. Il représente le plus
petit processus qui sert à la création des autres processus, et
il ne contient pas de sous processus en interne. L'utilisateur n'a aucune
visibilité sur l'exécution du service.
Processus simple: n'est pas exécutable
(ou invocable) et n'est pas associé d'un grounding. Il fournit une vue
abstraite d'un processus ou d'un ensemble de processus composés.
Processus composite: sont
décomposables en autres (non-composites ou composites) processus. Sa
décomposition peut être spécifié par l'utilisation
des structures de contrôle comme séquence et
if-then-else. OWL-S définit différents types de
structures de contrôle qui régissent l'enchaînement des
composants (atomiques ou composites) d'un processus composite. Parmi nous
citons les suivantes :
Sequence: Une liste de processus
exécutés séquentiellement.
Split: Invoque les éléments d'un
ensemble de processus.
Split+join: Invoque les éléments
d'un ensemble de processus de façon synchronisée.
Unordered: Exécute tous les processus d'un ensemble
sans tenir compte de l'ordre. Choice: Choisit parmi plusieurs
alternatives et exécute l'élément.
If-then-else: Si la condition est
vérifiée alors exécute le <<then >> sinon
exécute le <<else >>. Repeat-Until:
Itère l'exécution d'un ensemble de processus tant que la
condition est vérifiée. Repeat-While:
Itère l'exécution d'un ensemble de processus jusqu'`a ce
que la condition soit vérifiée.
name
ObjectProprety DataTypeProperty
SubClassProperty
ComposedOf
xsd: boolean
Process
&expr;#condition
hasPrecondition
Perform
Result
hasResult
process
hasParticipant
Participant
xsd: boolean
Parameter
hasParameter
Input Output
actor
DisjointWith
hasInput hasOutput
hasLocal
Realizes
Simple Process
CollapsesTo ExpandsTo
RealizedBy
CompositeProcess
Atomic Process
Disjoint With
Invokable
Control Construct
Components
Sequence Split Split-Join Unorder Choice
UnionOf
Figure2.6: Ontologie de processus
III.1.3. Le Service Grounding
Le ServiceProfile et le ServiceProcess sont
considérés comme des représentations abstraites du
service. Le rôle du Grounding est de transformer ces
représentations abstraites en une forme concrète qui peut
être employée pour l'interaction avec le service.
Le Grounding décrit l'accès au service. Il
permet de spécifier les protocoles de transport et les formats des
messages échangés. OWL-S repose sur WSDL pour spécifier
l'interaction avec le service (figure 2.7).
Process Model DL-based types
Atomic Process Inputs/Outputs
Opération Message
Bindings to SOAP, HTTP, etc.
OWL-S
WSDL
Figure2.7: Relation entre OWL-S et WSDL
Conclusion
Les services web fait aujourd'hui une technologie
révolutionnaire. Elle fournie un cadre pour trouver, décrire et
exécuter ces applications à travers le réseau Internet
indépendamment de tout langage de programmation et de toute plate-forme
d'exécution.
Les service web sont basés sur les standards du web: SOAP,
WSDL et UDDI qui permettent à des applications distantes de dialoguer
entre elles.
Mais, l'utilisation de cette technologie a rencontrée
plusieurs limites parmi celle de la composition.
Pour résoudre ce problème plusieurs solutions
ont été proposées. L'une de ces solutions repose sur le
fait qu'une description syntaxique WSDL du service ne suffit pas, elle propose
d'enrichir le service par une description sémantique en utilisant des
langages du web sémantique connaissant lui aussi une grande
évolution de nos jours.
Le langage OWL-S est celui de référence pour faire
une telle description. Nous avons résumées les
éléments de ce langage dans la section précédente
de ce chapitre.
La composition de services web et les principales solutions
existantes en bref font l'objet du chapitre suivant.
Introduction :
Dans le chapitre précédent, nous avons
étudié la description de services web élémentaires.
Mais dans certains cas l'objectif du concepteur d'une application ne peut
être pas atteint par l'invocation d'un simple service web
élémentaire, alors le concepteur doit combiner les
fonctionnalités d'un ensemble de services. Ce processus est
appelé composition de services web. Les services web
invoqués lors d'une composition sont appelés services web
composants [5]. Plusieurs recherches ont été
réalisées sur la composition de services web et la façon
dont cette technique pourrait être utilisée pour arriver à
certains résultats. [2]
Cette composition peut être faite de trois manières
différentes [21]:
Composition manuelle : Suppose que
l'utilisateur génère la composition à la main via un
éditeur de texte et sans l'aide d'outils dédiés.
Composition semi-automatique : Les techniques
de composition semi-automatiques sont une pas en avant en comparaison avec la
composition manuelle, dans le sens qu'ils font des suggestions
sémantiques pour aider à la sélection des services web
dans le processus de composition.
Composition automatique : La composition
totalement automatisée prend en charge tout le processus de composition
et le réalise automatiquement, sans qu'aucune intervention de
l'utilisateur ne soit requise. C'est la catégorie qui nous
intéresse dans la suite.
Dans ce chapitre, nous présenterons en premier temps un
model abstrait et général de la composition, nous expliquerons en
suite brièvement les différentes approches existantes. Une
conclusion sera donnée à la fin.
I. La composition : état de l'art
I.1. Un model abstrait pour la composition de SW :
Ici, nous présentons un cadre général de
la composition automatique de services web. Ce cadre est en haut niveau
d'abstraction, sans considération d'un langage particulier, de la
plate-forme ou de la méthode utilisés dans le processus de
composition [4].
Un cadre général du système de
composition est illustré dans la « figure 3.1 ». Le
système a deux types de participants : le fournisseur de services et le
demandeur de service. Les
fournisseurs proposent des services web. Les demandeurs
consomment des informations ou des services offerts par ces fournisseurs.
Résultat
Service Spécification
Spécification
Répertoire de service
Un processus
Fournisseur Service
Evaluateur
Demandeur Service
Moteur D'exécution
Spécification externe
Translateur
Spécification interne
Des processus
Générateur de processus
Des Processus
Service
Figure 3.1 : Cadre général du
système de composition de services
Le système est composé aussi des composants suivant
: translateur, générateur de processus, évaluateur, moteur
d'exécution et répertoire de services.
Ainsi, dans ce model la composition automatique inclut les phases
suivantes :
Présentation de service individuel :
premièrement, les fournisseurs de service publient leurs
services basiques dans un annuaire global. Les attributs essentiels pour
décrire ces services incluent la signature, les états et des
valeurs non fonctionnelles. La signature est représentée par les
inputs, les outputs et les exceptions du service. Les états sont
spécifiés par les préconditions et les postconditions du
service. Les valeurs non fonctionnelles sont les attributs utilisés dans
l'évaluation du service.
Translation des langages : souvent, les
méthodes de composition de services web distinguent entre les langages
de spécification de services dits externes utilisés par les
participants et permettant à l'utilisateur d'accéder aux services
d'une manière facile et entre les langages dits internes utilisés
par le générateur de processus composites. Le
translateur permet donc la translation entre ces deux langages.
Génération du processus de composition :
dans cette phase, le générateur de processus essaie de
résoudre la requête du demandeur par la composition des services
basiques offerts par les fournisseurs. Le générateur de processus
prend souvent en entrée les fonctionnalités des services et
produit en sortie un model de processus décrivant le service composite.
Le model de processus contient un ensemble de services aussi que les flux de
contrôle et de données entre eux.
Evaluation du service composite : certaines
fois, plusieurs services peuvent fournir des fonctionnalités similaires.
Il est donc possible que le générateur génère plus
qu'un seul service composite pour résoudre la requête du
demandeur. Dans ce cas, les différents services composites sont donc
évalués en utilisant les attributs non fonctionnels fournis par
les descriptions des services.
Exécution du service composite :
après qu'un service composite soit sélectionné,
il sera prêt pour être exécuter. L'exécution du
service composite peut être vue comme la séquence de messages
passés selon les spécifications du model de processus.
I.2. Approches existantes
Il existe principalement deux grandes approches de composition :
l'approche statique et l'approche dynamique. Nous présentons
brièvement chacune de ces approches dans ce qui suit.
I.2.1. Composition statique des services web
Dans cette approche, les services web à composer sont
choisis à l'heure de faire l'architecture et le design. Les composants
sont choisis et reliés ensemble, avant d'être compilés et
déployés [2]. Les techniques de composition statiques sont
définies à l'aide de processus métier :
orchestration et chorégraphie [1].
Orchestration : L'orchestration de services
web exige de définir l'enchaînement des services web selon un
canevas prédéfini, et de les exécuter selon un script
d'orchestration. Ces derniers (le canevas et le script) décrivent les
interactions entre services web en identifiant les messages, et en
spécifiant la logique et les séquences d'invocation. Le module
exécutant le script d'orchestration de services web est appelé un
moteur d'orchestration. Ce moteur d'orchestration est une entité
logicielle qui joue le rôle d'intermédiaire entre les services en
les appelant suivant le script d'orchestration [5]. Ce type de composition
permet de centraliser l'invocation des services web composants.
La « figure 3.2 » illustre l'orchestration [5]. La
requête du client (logiciel ou humain) est transmise au moteur
d'exécution (Moteur). Ce dernier, d'après le processus
préalablement défini, appelle les services Web (ici,
SW1, SW2, SW3 et SW4) selon l'ordre
d'exécution.
SW1 SW2
1 2
Moteur
Client
4
3
Requête Résultat requête
SW3
SW4
Figure 3.2 : vue générale de
l'orchestration
BPML - Business Process Modeling
Language: est un exemple des langages d'orchestration.
Chorégraphie : Contrairement à
l'orchestration, la chorégraphie n'a pas un coordinateur central. Chaque
service web mêlée dans la chorégraphie connaît
exactement quand ses opérations doivent être
exécutées et avec qui l'interaction doit avoir lieu [21]. Elle
est associée à l'échange de messages entre services web
plutôt qu'à un processus métier exécuté par
un seul partenaire.
La « figure 3.3 » permet d'illustrer une vue
générale d'une composition de services web de type
chorégraphie [5]. Le client (logiciel ou humain) établit une
requête qui est satisfaite par l'exécution automatique de quatre
services web (SW1, SW2, SW3 et SW4).
Requête
SW1 SW2
Résultat
Client
Envoi du résultat du SW Echange de messages
SW4 SW3
Figure 3.3 : vue générale de la
chorégraphie Les principaux langages de chorégraphie de
services web sont : WSCL(1), WSCI(2) et
XLANG(3).
Qu'il s'agisse d'orchestration ou de chorégraphie,
l'agrégation des différents services web se fait de
manière statique avant exécution. L'agrégation obtenue est
rigide et donc difficilement modifiable [1]. Ainsi si les fournisseurs de
services proposent d'autres services ou changent les anciens services, des
incohérences peuvent être causées, ce qui demanderait un
changement de l'architecture du logiciel, voire de la définition du
processus et créerait l'obligation de faire une nouvelle conception du
système [2].
I.2.2. Composition dynamique des services web
On appelle composition dynamique l'agrégation de
services web permettant de résoudre un objectif précis soumis par
un utilisateur en prenant en compte ses préférences. Cette
composition peut se faire avant ou pendant l'exécution des services web.
A l'heur actuelle, il n'existe pas de standard : les recherches sont
principalement académiques [1].
Les différentes approches existantes pour la
composition dynamique de services web peuvent être regroupées en
deux courants : les approches basées sur les workflow et les approches
basées sur les techniques de l'intelligence artificielle.
I.2.2.1. Approches orientées workflow :
L'approche se base sur le fait qu'un service web composite peut
être définit par un ensemble de services atomiques et par la
façon dont ils communiquent entre eux. Cette définition est de
même type que la manière dont est défini un processus
métier. Ce courant propose donc d'adapter les méthodes
d'orchestration et de chorégraphie afin de les rendre dynamiques [1].
Eflow [1], une plateforme pour la spécification, la
création et la gestion de services composites en utilisant les
méthodes de génération de workflows statiques mais
représentés en interne sous la forme d'un graphe qui peut
être modifié dynamiquement lors de l'exécution. Ce graphe
contient, en plus des noeuds représentant les services, des noeuds de
décision et d'événements qui
(1) Web Service Conversation Language
(2) Web Service Choregraphy Interface
(3) XML Business Process Language
permettent une plus grande robustesse du système : en
cas de non disponibilité d'un service web, celui-ci peut être
automatiquement remplacé par un service web équivalent.
Laukkanen et Helin [1] identifient deux solutions possibles
pour composer dynamiquement des processus métier : remplacer un service
web dans un processus métier existant par un autre service ayant des
fonctionnalités similaires, ou définir un nouveau workflow
à partir des services web disponibles. Les auteurs proposent d'utiliser
les descriptions sémantiques des services web pour pouvoir comparer les
fonctionnalités en utilisant les notions de préconditions et
d'effets de OWL-S.
I.2.2.2. Approches orientées intelligence
artificielle : Comme nous avons déjà
présentées dans le chapitre précédent, un service
web dans une description OWL-S peut être spécifié à
l'aide de ses préconditions et ses effets. Ces concepts sont en effet
très proches de ceux de la planification. Un autre domaine a connu ces
dernières années une très grande évolution dans le
domaine de l'intelligence artificielle. Celui des systèmes multi-
agents.
Pour ces raisons et autres, La composition dynamique de
services Web par des techniques d'intelligence artificielle, et plus
particulièrement par des techniques de planification et des
systèmes multi-agents, est la voie qui semble la plus prometteuse
[1].
Dans ce qui suit, nous présentons quelques approches de
composition par planification, par SMA et par d'autres techniques de
l'intelligence artificielle.
Calcul situationnel : dans cette approche, Le
problème de la composition est abordé de la façon suivante
: la requête de l'utilisateur et les contraintes des services sont
représentées en terme de prédicats du premier ordre dans
le langage de calcul situationnel. Les services sont transformés en
actions (primitives ou complexes) dans le même langage. Puis, à
l'aide de règles de déduction et de contraintes, des
modèles sont ainsi générés et sont
instanciés à l'exécution à partir des
préférences utilisateur [1]. Golog fait un exemple de langages de
calcul situationnel.
Preuve de théorèmes : dans
cette approche, les services disponibles et les requêtes utilisateur sont
traduites dans un langage du premier ordre. Puis des preuves sont produites
à partir d'un prouveur de théorèmes [1].
Composition avec SMA : la composition de
services peut être implémentée aussi en utilisant des SMA.
Dans cette approche, chaque agent présente un service et sert à
satisfaire une partie de la requête de l'utilisateur en utilisant ses
propres capacités.
Mùller et Kowalczyk [1] travaillent sur un
système multi-agents pour la composition de services basé sur la
concurrence entre coalitions de services : les agents représentants les
services se contactent les uns les autres pour proposer leurs services en
fonction de leur capacité de raisonnement et ainsi former des coalitions
d'agents capables de résoudre les buts fournis par l'agent utilisateur.
Puis les différentes coalitions vont faire une offre la plus
compétitive possible. Chaque solution reçoit une note de l'agent
utilisateur. C'est donc la solution ayant le plus haut score qui sera
choisie.
Kumar et Mishra dans [6] présentent deux modèles
de composition de services web sémantiques en se basant sur les SMA. Les
deux modèles se différent par l'utilisation d'un
coordinateur dans le processus de composition ou non. Dans le premier
modèle où il n'y a pas de
coordinateur, la requête de l'utilisateur est
décomposée par le système en activités/task
atomiques : task1, task2, ..., taskn. Le système sélectionne en
suite pour chaque activité atomique un agent fournisseur
représentant un service web : AF1, AF2, ..., AFn. L'agent utilisateur
négocie en fin avec chaque agent fournisseur et lui affecte
l'activité associée. Cependant dans le deuxième
modèle un agent coordinateur prend la responsabilité de
contrôler tout le système de composition.
Composition par planification : ordonner des
services web ayant des préconditions et des effets est donc très
similaire à un problème de planification automatique. De
nombreuses études ont été faites pour implémenter
la composition de services web comme une résolution d'un problème
de planification.
Peer [1] propose une approche basée sur le langage PDDL
dans laquelle, après création du domaine de planification
à partir de la description sémantique, un planificateur est
choisi parmi plusieurs en fonction des instructions PDDL utilisées dans
le domaine ou de la complexité du but à atteindre.
Medjahed [1] présente une technique pour
générer des services composites à partir de descriptions
déclaratives de haut niveau. Cette méthode utilise des
règles de composabilité pour déterminer dans quelle mesure
deux services sont composables. L'approche proposée se déroule en
quatre phases : premièrement, une phase de spécification offre
une spécification de haut niveau de la composition désirée
en utilisant le langage CSSL (Composite Service Specification
Langage). En suite, la phase de correspondance utilise des règles
de composabilité pour générer des plans conformes aux
spécifications du service demandé. Si plus d'un plan est
généré, une sélection est effectuée par
rapport à des paramètres de qualité de la composition. La
dernière phase est la phase de génération : Une
description détaillée du service composite est automatiquement
générée et présentée au demandeur. Les
règles de composabilité considèrent les
propriétés syntaxiques et sémantiques des services web.
Wu et al [1] préconisent l'utilisation du planificateur
SHOP2 pour la composition automatique de services web à partir de leur
description sémantique. SHOP2 est un planificateur HTN (Hierachical
Task Network). Dans cette approche, les auteurs considèrent que le
principe de décomposition d'une tache en sous-taches dans la
planification hiérarchique est très similaire au concept de
décomposition de processus composites dans OWL-S.
II. La composition : Approche proposée
Comme nous avons vus, l'automatisation de la composition est
significativement facilitée par le développement du web
sémantique, depuis l'avènement des langages permettant la
description sémantique des services web et notamment le langage OWL-S.
Ce langage permet de décrire les services en terme de flux de
données (inputs et outputs), mais aussi en terme de changement
d'état (préconditions et
effets).
Nous avons vus aussi que la planification a en effet pour
rôle de trouver une séquence d'actions, ou plan, pour, à
partir d'un état initial, arriver à un état but
exprimé par l'utilisateur. Un problème de planification est
résolu dans le cadre d'un domaine, définissant les
différentes actions possibles, leurs
préconditions ainsi que leurs effets
sur l'état du monde.
Cette grande correspondance entre les descriptions OWL-S et
les représentations en planification explique donc
l'intérêt croissant de l'exploitation de la planification dans la
composition de services web.
D'autre part, la nature distribuée des services web
(les services sont généralement géographiquement
distribués), réticence des entreprises à fournir une
description détaillée de leurs services (pour des raisons
concurrentielles) ainsi que l'autonomie des agents peuvent prouver
l'utilité des SMA dans le processus de composition de services web.
Alors, l'utilisation de la planification multi-agents
apparaît très efficace dans la composition automatique et
dynamique des services web. Dans cette partie du chapitre nous
présentons notre modèle de composition exploitant cet
intérêt.
II.1. Spécification du problème
Etant donné un objectif d'un utilisateur et un ensemble
de services web, le rôle de la composition est de trouver une
séquence de requêtes d'appel à des services web. Pour faire
cette composition trois étapes sont distinguées :
1. les services web sont recherchés et
sélectionnés à partir d'un annuaire UDDI en fonction des
besoins à réaliser ;
2. la composition est effectuée en utilisant la
description (syntaxique ou sémantique) des services
sélectionnés ;
3. une description du service composite, i.e.,
l'enchaînement des appels aux services sélectionnés, est
créée.
Dans ce rapport, nous ne traitons que le deuxième point
de l'algorithme de composition, i.e., trouver l'ordre d'exécution des
services web pré-sélectionnés à partir de leur
description sémantique.
Cette étape nécessite en effet deux techniques
critiques : un langage de description compréhensible par la machine et
une approche de composition. Le langage que nous avons choisi est le langage
OWL-S et l'approche est la composition par planification multi-agents.
L'approche proposée consiste alors à transformer
le problème de composition d'un ensemble de services web décrits
par OWL-S à un problème de planification décrit par STRIPS
et de le faire résoudre en utilisant un ensemble d'agents.
Comme précisé ci-dessus, la sélection des
services est considérée comme déjà
effectuée. La première étape consiste à exprimer le
but, l'état initial du système, la base de connaissances ainsi
que la base de compétences pour transformer le problème de
composition en problème et domaine de planification. Le but et
l'état initial sont exprimés par l'utilisateur, tandis que la
base de compétences est extraite des descriptions OWL-S des services
sélectionnées.
Ensuite, ces quatre entrées sont transformées en
problème et domaine de planification. Puisqu'un système
multi-agents est utilisé, où chaque agent a des capacités
précises, le domaine et la base de connaissances doivent être
distribués entre un ensemble d'agents. Nous avons
choisi, de représenter chaque service par un agent,
contenant donc les actions proposées par ce service. Ceci a l'avantage
de permettre à chaque organisation de mettre à jour sa base de
connaissances sans prendre en compte les contraintes de ses partenaires.
En plus des différents agents représentant des
services sélectionnés, deux autres agents sont utilisés
dans le système : l'agent utilisateur et l'agent médiateur. Le
premier initie le processus de composition et le deuxième élabore
coopérativement avec les agents représentant des services un plan
solution satisfaisant la requête de l'utilisateur.
II.3. Le modèle proposé :
Présentation générale et architecture
Notre modèle est basé sur le modèle de
planification multi-agents centralisé dont l'existence d'un agent
coordinateur est nécessaire. Le modèle est constitué de
trois types d'agents :
· d'un agent client qui initie le processus de composition,
en émettant une requête du service composite désiré
par une spécification de son état initial et de son but.
· d'un agent médiateur faisant le lien entre les
agents représentants des services et l'utilisateur. Cet agent joue aussi
le rôle du coordinateur dans le processus de planification et
· de plusieurs agents représentants des services qui
sont chargés de proposer leurs compétences pour résoudre
toute ou partie de la requête soumise par l'utilisateur.
Ce modèle est constitué des trois phases
principales suivantes : création du domaine de planification de chaque
agent représentant d'un service, extraction du problème de
planification d'après la requête de l'utilisateur et en fin
l'élaboration du plan solution. La « figure 3.4 » suivante
représente le déroulement d'une composition en exploitant ces
différentes phases.
Traducteur du domaine
Ensemble de descriptions OWL-S des services
sélectionnés
Requête utilisateur
Ensemble de domaines de planification
Problème de planification
Planificateur Multi-agents
Plan solution (ensemble d'actions)
Figure 3.4: Différentes phases du
modèle proposé
Création du domaine de planification des
agents représentants des services : chaque agent de ce type est
initialisé avec la description OWL-S du service qu'il représente
de la quelle il extrait son domaine de planification (l'ensemble
d'opérateurs que peut effectuer) formant son base de
compétences et avec un ensemble de données lui permettant de
résonner (Par exemple, un agent représentant un service de
réservation de transport aérien dispose de la liste des trajets
existants) formant son base de connaissances.
Extraction du problème de planification
d'après la requête de l'utilisateur : de la requête
de l'utilisateur est extraite directement une description de l'état
initial et une description du but à atteindre, qui décrient en
effet un problème de planification à résoudre.
Elaboration du plan solution : l'agent
médiateur, suite à la réception du problème soumis
par l'agent utilisateur, il joue le rôle d'un coordinateur dans le
processus de production du plan solution : il essaye de le produire en
exploitant les compétences des différents agents service.
Conclusion
La composition est l'un des principaux domaines de recherche
autour des services web. Elle peut être manuelle, semi-automatique ou
automatique. Pour faire face à l'automatisation du processus de
composition, un modèle abstrait et général est
présenté dans le début du chapitre.
La génération d'un service composite peut
être statique faite pondant la conception et le design des applications
dont l'orchestration et la chorégraphie sont les techniques
utilisées. Comme elle peut être dynamique faite pendant
l'exécution dont des techniques de l'intelligence artificielle et
surtout celles des SMA et des planification sont utilisées.
Enfin, la proche proposée est basée sur la
planification multi-agents. Le chapitre suivant sert à une conception
d'un système implémentant cette approche.
Introduction
Après avoir abordé dans le chapitre
précédent, les concepts fondamentaux de notre modèle de
composition dynamique de services web basé sur la planification
multi-agents, il apparaît essentiel de réaliser un système
permettant principalement de prouver son efficacité.
Cependant, une réalisation efficace d'un
système informatique, doit être d'abord
précédée par une bonne conception. Cette phase n'est pas
évidente car il faut réfléchir à l'ensemble de
l'organisation que l'on doit mettre en place. Elle nécessite des
méthodes permettant de mettre en place un modèle sur lequel on va
s'appuyer.
Le système peut être vu de deux façons
différentes : son architecture externe, concernant son utilisation et
son architecture interne concernant le déroulement de la composition
proprement dit.
Dans la suite de ce chapitre, nous essayons de
détailler chacune de ces deux vue précédées par une
bref description des méthodologies et des langages utilisées pour
leurs conceptualisation.
I. Analyse du système : vue externe et vue
interne
Le système consiste à une implémentation
du modèle de composition de services web par planification multi-agents
présenté dans le chapitre précédent. Il sert
à satisfaire les demandes de services soumises par les utilisateurs par
la composition des services atomiques existants. Cette composition se faite par
un ensemble d'agents.
Pour un utilisateur final du système, le processus
d'élaboration de la solution ne lui sert à rien. Il cherche
seulement à avoir une réponse à sa requête. Pour
cette raison une distinction entre deux vues du système apparaît
très nécessaire : une vue externe et une vue interne.
La « figure 4.1 » suivante présente une
architecture générale du système, montrant ainsi ces deux
vues.
Vue externe : importante pour les
utilisateurs. Elle permet de spécifier l'ensemble d'acteurs
impliqués dans le système, ses différentes
fonctionnalités et la manière de les utiliser.
Vue interne : permet de spécifier les
différents composants internes du système (les différents
agents), leurs architectures internes et les différents interactions
entre eux dans le but d'élaborer la solution au problème soumis
par l'utilisateur.
Administrateur
Utilisateur
Vue externe
Agent admin
Vue interne
Agent user
Agent médiat
Agent service1
Agent service2
Agent service..
Fournisseur1 Fournisseur2 Fournisseur..
Figure 4.1 : Description
générale du système
II. Méthodologies et langages exploités
dans la conception
Pour la vue externe le langage UML basé sur une
méthodologie objet est le plus adopté. Mais ce n'est pas le cas
pour la vue interne décrivant le système comme un système
multi-agents.
La programmation orientée agent nécessite
cependant une analyse et une modélisation orientées agent qui
différent assez radicalement d'une méthode d'analyse objet ; les
agents et les objets se différentiant essentiellement au niveau du
comportement et des interactions. Parmi ces différences, on peut citer
:
· l'agent a le contrôle sur son comportement ; un
objet n'a le contrôle que sur son état.
· les objets sont généralement passifs alors
que les agents sont permanemment actifs.
Il y a plusieurs recherches qui s'intéressent à
la méthodologie d'analyse et de conception orientées agent.
Maintenant, il n'y a pas encore une méthode standard car chaque groupe
de recherche propose une méthode différente. Parmi ces
méthodes : MAS CommonKADS, MaSE, Gaia et OMaSE.
Pour faciliter la conception des SMA, une extension du langage
UML prenant en compte les notions agent que ce dernier n'a pas est apparue.
C'est le langage AUML.
III. Vue externe du système
III.1. Description générale du
système
La fonctionnalité principale de notre système
consiste à satisfaire les requêtes des utilisateurs en composant
(s'il est possible) un ensemble de services atomiques existants.
Le système prend une requête d'un utilisateur
demandant un service désiré (exprimée en terme de son
état initial et de son but désiré) en entrée. Et en
exploitant un ensemble descriptions OWL-S de services web
pré-sélectionnés et un ensemble de données fournis
par les fournisseurs des services , il lui rend (si possible) un plan solution
correspondant service composite désiré. Cette description est
illustrée dans la « figure 4.2 » suivante :
Requête (état initial et but)
OWL-S des services
Système
Réponse de composition Ensemble de données
Client (plan solution) Fournisseur
Administrateur
Figure 4.2 : Description externe du
système
III.2. Identification et représentation des
fonctionnalités offertes par le système
Dans cette section nous aborderons les différentes
fonctionnalités offertes par notre système. C'est en effet, la
chose la plus importante aux ses utilisateurs. Pour le faire les diagrammes
d'UML consistent à l'outil le plus adopté.
Pour bien comprendre les choses, nous commencerons par
élaborer le diagramme de cas d'utilisation après avoir identifier
les différents acteurs du système. Puis nous
représenterons le déroulement de chaque cas d'utilisation
à travers les diagrammes d'activités.
III.2.1. Diagramme de cas d'utilisation
Les cas d'utilisation sont les différents types
d'utilisation du système. Ils définissent
généralement ses fonctionnalités. Ils servent à
structurer les besoins des utilisateurs et les objectifs correspondants du
système.
III.2.1.1. Identification des acteurs et des cas
d'utilisation
Un acteur est une entité externe qui agit sur le
système ; Le terme acteur ne désigne pas seulement les
utilisateurs humains mais également les autres systèmes. Un cas
d'utilisation est un ensemble d'actions réalisées par le
système en réponse à une action d'un acteur.
Pour notre système, voici ses différents acteurs
chacun associé par la liste de ses cas d'utilisation possibles :
1. Utilisateur : c'est l'acteur
principal du système. Il est capable de demander un service ou
d'annuler une demande en cours. Les cas d'utilisation lui sont associés
sont :
· Identifier utilisateur : sert à
identifier chaque utilisateur du système.
· Demander service : sert à
demander le service désiré en émettant sa
requête.
· Annuler demande service : permet
d'annuler une demande effectuée en cours.
· Identifier administrateur : donne
l'autorisation à l'administrateur pour voir le menu du système
lui autorisant d'effectuer des fonctionnalités de gestion de son
système.
· Gérer système : suite
à son identification, l'administrateur à travers ce cas
d'utilisation peut consulter un menu lui permettant de gérer son
système. Ce cas d'utilisation ne sera pas traité dans notre
système ; l'activité de l'administrateur sera terminée
lorsqu'il lui est affiché le menu du système
3. Fournisseur : son rôle consiste
à fournir la description OWL-S de son service. Il lui est associé
le seul cas d'utilisation suivant :
· Fournir owl-s service et ensemble de
données : permet d'entrer la description du service par son
fournisseur, ainsi qu'un ensemble de données permettant de raisonner sur
ce service.
Système de Composition
Identifier utilisateur
<<include>>
Utilisateur
Demander service
<<extend>>
Annuler demande service
Fournir owl-s service Et ensemble de données
Fournisseur
Administrateur
Identifier administrateur
<<extend>>
Gérer système
III.2.1.2. Diagramme de cas d'utilisation
Entrer owl-s service et ensemble de données
III.2.2. Diagrammes d'activités
Maintenant, après avoir identifier les
différents cas d'utilisation du système, il est important de
détailler chacun d'eux afin de bien les comprendre. UML le permet ;
c'est à travers les diagrammes d'activités.
Les diagrammes d'activités permettent de mettre
l'accent sur les traitements. Ils permettent ainsi de représenter
graphiquement le comportement d'une méthode ou le déroulement
d'un cas d'utilisation. Cette représentation sous forme d'organigrammes
les rend facilement intelligibles.
Dans ce qui suit nous allons détaillées chacun des
cas d'utilisation de notre système identifiés
précédemment par un diagramme d'activités qui lui est
correspond.
1. Demander service
Identifier utilisateur
positif négatif
Afficher résultat
Demander service
Quitter
quitter
autre
Figure 4.4 : Diagramme d'activités pour
« Demander service >>
2. Annuler demande service
Confirmer annulation
Annuler demande
Figure 4.5 : Diagramme d'activités pour
« Annuler demande service >>
3. Fournir owl-s service et ensemble de
données
4. Identifier administrateur
Identifier administrateur Afficher Menu système
Figure 4.7 : Diagramme d'activités pour
« Identifier administrateur »
IV. Vue interne du système
Dans, la section précédente nous avons
présentées une description générale de notre
système, en vue de son utilisation. Mais ce qui est plus important que
cette description pour notre rapport est d'éclaircir la façon
d'exploitation de la planification et des agents pour réaliser la
composition de services. C'est la chose qui nécessite en effet, une
description assez détaillée de l'architecture interne du
système et de son fonctionnement depuis l'émission de la
requête de l'utilisateur jusqu'à l'obtention du plan solution.
Dans cette section, nous présenterons l'architecture
interne du système, nous détaillerons en suite la structure de
chaque agent et son fonctionnement et nous décrirons en fin, les
interactions entre les agents pour permettant de mettre en place le processus
de composition.
IV.1. Architecture interne du système
Le modèle de composition proposé est basé
sur l'utilisation des agents. Les deux acteurs (administrateur et utilisateur)
du système identifié ci-dessus sont représentés
dans le système par un agent assurant ses fonctionnalités. En
plus, chaque service retourné de l'opération de sélection
est représenté aussi par un agent. Et pour faciliter
l'élaboration de la composition un agent médiateur est
ajouté dans le système (figure 4.1).
· Agent utilisateur : c'est
l'entité qui représente l'acteur utilisateur dans le
système. Son rôle consiste à soumettre sa requête
à l'agent médiateur et à recevoir la réponse pour
la visualiser à l'utilisateur.
· Agent administrateur :
représente l'acteur administrateur dans le système.
C'est celui qui lance les autres agents, gère le système (comme
nous avons déjà mentionné, cette fonctionnalité de
gestion n'est pas traitée dans notre système dans ce travail).
· Agents service : ensembles d'agents
représentants les services retournés par la phase de
sélection pré-effectuée (qui nous n'intéresse pas
dans ce travail). Ils servent à recevoir les descriptions OWL-S de ces
services et à les convertissent aux domaines de planification
correspondants (ensemble d'opérateur STRIPS) formant leurs base de
compétances. Ils reçoivent aussi depuis les fournisseurs des
services un ensemble de données lui facilitant la recherche d'actions
à retourner à l'agent médiateur ; ces données
forment leurs bases de connaissances. Ils participent dans le processus de
planification servant à réaliser la composition.
· Agent médiateur : c'est
l'agent faisant le lien entre l'agent utilisateur et les agents services. En
plus de cela, son rôle principal est la réalisation du processus
de planification ; il contient alors un planificateur. C'est donc aussi un
agent coordinateur qui assure la coordination entre les
actions des services participants à la planification afin de
résoudre les conflits qui peuvent se produits. Après qu'il trouve
le plan solution il l'envoie à l'agent utilisateur.
Dans ce qui suit, nous détaillerons l'architecture
interne de chaque agent ainsi que son fonctionnement.
IV.2. Architectures internes et fonctionnement des
agents
Touts les agents du système sont du type cognitif,
sauf les deux agents : utilisateur et administrateur qui sont des agents
réactifs. Ces derniers n'ont aucun raisonnement à effectuer ; ils
ne font qu'agir selon leurs perceptions sur l'environnement.
Cependant, un agent cognitif (délibératif)
dispose d'une base de connaissance comprenant l'ensemble des informations et de
savoir-faire nécessaires à la réalisation de sa
tâche et à la gestion des interactions avec les autres agents et
avec son environnement. Il agit selon un raisonnement
(délibération) effectué. De façon
générale, l'architecture interne de ce type d'agents est la
suivante :
Autres agents
Agent cognitif
Module de communication
Base de connaissances
Base de procédures de raisonnement
Perception
Action
Environnement
Agent cognitif Perception
Environnement
Délibération
Exécution
Figure 4.8 : architecture
générale d'un agent cognitif
Le module de communication est le même pour l'ensemble
des agent. Il contient des mécanismes assurant l'émission et la
réception des messages entres les agents. La différence entre les
agents est au niveau des deux bases de connaissances et de procédures de
raisonnement.
Ainsi, son fonctionnement peut être modélisé
comme suit :
Recevoir Requête utilisateur
Envoyer requête Au médiateur
Visualiser résultats A l'utilisateur
Recevoir Message médiateur
Attente
Recevoir Demande annulation
Envoyer demande annulation au médiat
Recevoir demande déconnection utilisateur
Se détruit
Pour décrire les agents il parvient donc utile de
spécifier pour chacun son architecture (en terme de sa base de
connaissances et de sa base de procédures) et son fonctionnement (en
terme de ses perceptions, ses raisonnements et ses actions).
IV.2.1. Agent utilisateur
· Récupère la requête de l'utilisateur
et l'envoie à l'agent médiateur ;
· Récupère la réponse de l'agent
médiateur et la visualise à l'utilisateur.
· Lorsque l'utilisateur veut annuler une demande
déjà effectuée, cet agent envoie sa demande d'annulation
à l'agent médiateur.
· Lorsque l'utilisateur veut se déconnecter, l'agent
se détruit.
1. Architecture interne
Cet agent est un agent réactif son architecture est celle
de base, où il n'existe que les modules de perception, de communication
et d'exécution.
2. Fonctionnement
Perception :
- Réception de la requête de l'utilisateur (depuis
l'interface).
- Réception d'un message du médiateur ou de
l'administrateur.
- Réception d'une demande d'annulation de la requête
par l'utilisateur (depuis l'interface)
Action : il agit selon le diagramme
d'activités suivant :
IV.2.2. Agent administrateur
· visualise l'interface principale du système aux
utilisateurs ;
· lance les agents services pour les services
déjà sélectionnés ;
· lance l'agent médiateur et lui envoie la liste des
identificateurs des agents service ;
· lance un agent utilisateur lorsqu'un utilisateur
s'identifie et se connecte pour passer une demande de service et lui envoie
l'identificateur de l'agent médiateur;
· vérifie identité administrateur lorsque
celui-ci veut se connecter.
1. Architecture interne
C'est un agent réactif. Selon sa perception, il agit. Il
contient les deux composantes suivantes lui facilitant son fonctionnement :
· Une base de connaissances : elle
contient les identificateurs de l'agent médiateur et des agents services
permettant leurs lancement et l'identificateur de l'administrateur du
système permettant la vérification de l'identité
entrée par l'administrateur (confidentialité).
· Une procédure de vérification :
c'est une procédure permettant de vérifier
l'identité de l'administrateur.
2. Fonctionnement
Perception :
- Réception d'une requête utilisateur ou
administrateur de connexion (depuis l'interface).
- Réception de l'identificateur de l'administrateur.
Raisonnement : son raisonnement consiste
à vérifier l'identificateur de l'administrateur et selon le
résultat de la vérification, il agit.
Action : il agit selon le diagramme
d'activités de la « figure 4.11 » suivante : IV.2.3.
Agent service
· C'est une entité très importante pour
l'élaboration du processus de planification ; il sert à enrichir
le domaine de planification du planificateur se trouvant au niveau de l'agent
médiateur ;
· Récupère la description OWL-S du service
qu'il représente de son fournisseur ;
· Il le convertit vers un ensemble d'opérateurs
PDDL ;
· Suite à la réception du problème
de planification (requête utilisateur) de l'agent médiateur, il
essaye à trouver une action permettant de le résoudre directement
: s'il le trouve, il l'indique à l'agent médiateur ; sinon il
cherche l'ensemble d'actions permettant de le résoudre partiellement et
il les envoie à l'agent médiateur.
Attente
Valide
Non valide
Afficher erreur
Afficher interface Principale système
Lui envoyer l'ident de l'agent médiateur
Recevoir demande connexion utilisateur
Lancer
un agent utilisateur
Lui envoyer les idents des agents service
Lancer Agent médiateur
Lancer Agents service
Recevoir demande connexion administrateur
Recevoir Identificateur administrateur
Afficher menu
système
Figure 4.11 : Diagramme d'activités pour
le fonctionnement de l'agent administrateur 1. Architecture
interne
Comme déjà indiqué
précédemment, cet agent est de type cognitif. En plus de son
module de communication, il contient : une base de connaissances, une base de
compétences, un traducteur des descriptions OWL-S vers des
opérateurs STRIPS et une procédure de parcours des
opérateurs dans le but de chercher un ensemble d'opérateurs
résolvant tout ou une partie du problème soumis par l'agent
médiateur. Une présentation de l'architecture interne de cet
agent est donnée dans la « figure 4.12 » suivante :
· La base de connaissances : chaque
agent service en plus de la description OWL-S est initialisé avec un
ensemble de données (issue d'une base de données par exemple)
permettant à l'agent de raisonner. Par exemple, un agent
représentant un service de réservation de transport aérien
dispose de la liste des trajets existants. Ces données forment la base
de connaissances de l'agent.
Service
Problème
OWL-S
Agent service
Procédure parcours
des opérateurs
Traducteur
OWL-S vers STRIPS
Ensemble De données
Opérateurs STRIPS
Base de compétences
Base de connaissances
Figure 4.12 : Architecture interne de <<
l'agent service >>
· La base de compétences :
À partir de la description sémantique, les agents
service vont créer leur domaine de planification qui regroupe, sous la
forme d'opérateurs STRIPS extraits des processus de la description
OWL-S, les actions réalisables par les agents, i.e., leur base de
compétences.
· Le traducteur OWL-S vers STRIPS :
puisqu'un modèle de composition par planification est
exploité l'une des phases les plus importantes dans le processus de
composition de services est la traduction des descriptions OWL-S des services
sélectionnés à des domaines de planification
(opérateurs STRIPS). C'est ce module de l'agent service que la
permet.
Les étapes de traduction seront détaillées
dans ce paragraphe.
Ce traducteur prend en entrée une description OWL-S du
<< model de processus >> (process model en anglais) du service
représenté par l'agent et produit en sortie un ensemble
d'opérateurs STRIPS (domaine de planification).
OWL-S Process model du service
Traducteur OWL-S vers PDDL
Ensemble d'opérateurs STRIPS
Dans ce qui suit, nous donnerons premièrement un
ensemble de restriction que nous avons apportées aux descriptions OWL-S
des services, puis nous détaillerons l'algorithme de traduction.
· Restriction sur la sémantique
OWL-S
Le langage OWL-S qui permet d'annoter sémantiquement un
service web est très riche et n'impose que très peu de
contraintes sur la manière d'exprimer cette sémantique. Les
chercheurs dans ce domaine et parmi << J.Guitton >> [1] font
toujours donc un ensemble de restrictions et d'hypothèses. Vu du cadre
et de la période de l'étude, nous avons adoptées de faire
une restriction de la restriction de ce chercheur (l'objectif de notre travail
n'est pas en effet de faire quelque chose qui n'existe pas,
mais de prouver juste l'efficacité de la planification
pour la résolution du problème de composition de services
web).
- Un model de processus d'un service en OWL-S peut contenir
trois types de processus en savoir : les processus atomiques, composites ou
simples, mais seuls les processus atomiques sont pris en compte actuellement
dans notre modèle ;
- Plusieurs formalismes existent pour résoudre les
problèmes de planification, dans notre modèle le formalisme
STRIPS est celui qui a été utilisé, dont un
problème de planification est défini par un ensemble
d'opérateurs, d'un état initial et d'un but à
atteindre.
- nous spécifions les préconditions et les
effets des processus atomiques dans le formalisme STRIPS, comme
représenté dans l'extrait ci-dessous, afin de permettre leur
utilisation directement lors de la création du domaine ;
<process:hasPrecondition>
<expr:KIF-Condition rdf:ID="ExistTrain">
<expr:expressionBody rdf:
datatype="
http://www.w3.org/2001/XMLSchema#string">
(ExistTrain ?From ?To)
</expr:expressionBody>
</expr:KIF-Condition>
</process:hasPrecondition>
? Algorithme de traduction
La traduction de la description sémantique d'un service
vers un domaine de planification consiste à représenter les
processus atomiques OWL-S sous forme d'opérateurs.
L'algorithme « algorithme 4.1 » parcourt le model de
processus du service, chaque fois qu'il rencontre un processus atomique, il le
transforme à un opérateur.
Algorithme 4.1 : traduire OWL-S vers STRIPS(P)
Input : model de processus OWL-S « P » Output : ensemble
d'opérateurs STRIPS « OS » OS = Ø ;
Pour chaque processus atomique p
de P faire
Créer nouvel opérateur op ;
op.nom = p.nom ;
op. Paramètres = p.inputs + p.outputs ;
op.préconditions = p.précoditions ; ajouter op à OS
;
Fin pour
Retourner OS ;
Fin
|
En effet, la correspondance ici est directe. Un
opérateur de planification est créé, avec, comme
identifiant, l'identifiant de ce processus, c'est-à-dire le nom de
l'opération du service correspondant. Par exemple, le processus atomique
suivant :
<process:AtomicProcess rdf:ID="AgentTrainReservation">
...
</process:process>
Permet de définir l'opérateur :
(:operator (!AgentTrainReservation ...) ...
)
Puis les préconditions et les effets du processus atomique
sont ajoutés à l'opérateur correspondant.
La « figure 4.13 » suivante présente la
correspondance entre processus atomique OWL-S et un opérateur STRIPS
:
Processus atomique OWL-S
Nom processus atomique
Précondition
Output
Effet
Input
Opérateur STRIPS/PDDL
Nom opérateur
Précondition
Paramètres
Effet
Figure 4.13 : Correspondance processus atomique
OWL-S et opérateur STRIPS
Gestion des préconditions : Les
préconditions d'un processus ont une correspondance directe avec les
préconditions d'un opérateur, du fait de l'hypothèse
formulée sur l'écriture des préconditions et effets dans
la description OWL-S. Soit la précondition OWL-S suivante :
<process:hasPrecondition> <expr:KIF-Condition
rdf:ID="ExistTrain">
<expr:expressionBody rdf: datatype="
http://www.w3.org/2001/XMLSchema#string">
(ExistTrain ?From ?To) </expr:expressionBody>
</expr:KIF-Condition>
</process:hasPrecondition>
De cette précondition est extrait directement le
prédicat suivant :
(ExistTrain ?From ?To)
Gestion des effets : Tout comme les
préconditions, les effets d'un processus atomique sont traduits
directement. Mais ils doivent être distingués en effets positifs
et en effets négatifs au moment de la création de
l'opérateur. Nous choisissons de représenter les effets
négatifs, dans la description OWL-S par des prédicats
commençant par not [1]. Par exemple, la réservation d'un billet
de train a pour effet de déplacer l'utilisateur d'une ville à une
autre :
<expr:KIF-Expression rdf:ID="NotVoyagerAtFrom">
<expr:expressionBody rdf:
datatype="
http://www.w3.org/2001/XMLSchema#string">
(not(at ?User ?From ?Date))
</expr:expressionBody>
</expr:KIF-Expression>
· Le module de parcours : c'est une
procédure permettant de chercher soit une solution directe au
problème de planification envoyé par l'agent médiateur,
sinon de chercher l'ensemble d'opérateurs possibles pouvant servir
à la résolution du problème.
Comme nous avons déjà vu, le problème
à résoudre est représenté a travers un ensemble de
prédicats formant l'état initial (entrés par
l'utilisateur) et un ensemble d'autres prédicats formant le but à
réaliser (entrés aussi par l'utilisateur), ainsi, les
opérateurs STRIPS (extraits de la description OWL-S) sont aussi
représentés par un ensemble de prédicats formant ses
préconditions et un autre formant ses effets.
La recherche est donc faite par parcours des deux bases de
connaissances et de compétences, afin de trouver des correspondances
possibles entre les prédicats de l'état initial et du but avec
ceux des préconditions et des effets des opérateurs STRIPS
respectivement.
Trois cas sont possibles ici :
1. suite à la réception d'un problème de
planification (état initial et but) de l'agent médiateur, si une
correspondance entre l'état initial et l'ensemble des
préconditions d'un opérateur et une correspondance entre
l'état but et les effets de ce même opérateur sont
trouvées ; alors cet opérateur constitue une solution directe du
problème à retourner à l'agent médiateur.
2. Si ce n'est pas le cas, la procédure cherche alors
tous les opérateurs dont leurs effets sont correspondants à
l'état but du problème. La liste des opérateurs
trouvés ainsi que pour chacun la liste de ses préconditions sont
alors retournées à l'agent médiateur.
3. Si aucune des deux solutions précédentes n'est
trouvées, l'agent service retourne alors un message à l'agent
médiateur lui indiquant l'absence d'une solution.
2. Fonctionnement
Perception :
- Réception d'un message contenant le problème
à résoudre d'après l'agent médiateur.
- Réception d'un message de l'agent médiateur
pour arrêter le processus de recherche de la solution (dans le cas
où la solution est déjà trouvée ou l'utilisateur
demande d'annuler la résolution de son problème).
Raisonnement : suite à la
réception du problème à résoudre de l'agent
médiateur, cet agent exécute la procédure de parcours
énoncée précédemment. Le résultat de la
recherche : soit une solution directe, soit une liste d'actions est en suite
envoyé à l'agent médiateur. S'il n'y a pas de
résultats à retourner, l'agent envoie un message à l'agent
médiateur lui indiquant ceci.
Action : il agit selon le diagramme
d'activités suivant :
Attente
Recevoir problème du médiateur
Recevoir demande d'arrêt du médait
Exécuter procédure de recherche
Arrêter procédure de recherche
Solution directe trouvée
Non solution trouvée
Non solution directe trouvée
Envoyer solution directe au médiat
Envoyer liste d'actions au médiat
Envoyer message (non solution)au médiat
Figure 4.14 : Diagramme d'activités pour
le fonctionnement de l'agent service
IV.2.4. Agent médiateur
· Son utilité principale est dans le processus de
planification dont il joue le rôle d'un coordinateur entre les
différents agents services. Il sert à chercher un plan solution
au problème de l'utilisateur en planifiant l'ensemble d'actions
retournées par les agents service et en résolvant les
différents conflits pouvant exister entre eux.
· C'est au niveau du quel donc, qu'un planificateur
existe.
1. Architecture interne
Cet agent est un agent cognitif. Au niveau duquel le
raisonnement principal de notre modèle est réalisé ; c'est
la planification proprement dite.
Afin de bien comprendre son architecture interne, il est
essentiel avant de l'aborder, d'expliquer les grandes lignes du
déroulement de la planification au niveau de cet agent.
En effet, le modèle de planification utilisé
est distribué, le domaine de planification est réparti sur
l'ensemble des agents service. Chaque agent service est capable de
réaliser un certain nombre d'actions : ses compétences. C'est la
mise en commun et l'ordonnancement des compétences de chaque agent, dans
le but de résoudre un problème donné, qui va permettre de
faire émerger un plan solution.
Cette mise en commun et ordonnancement sont assurés
par le module de planification de cet agent médiateur ; le
planificateur.
Le planificateur utilisé dans notre modèle
repose sur la recherche de la solution dans un espace d'états (chapitre
1 § I.2.3.1), exploite le principe du chaînage arrière et
communique avec les différents agents service pour collecter l'ensemble
d'opérateurs lui permettant la poursuite du processus de
planification.
Pour raisonner, ce planificateur a besoin donc d'une
structure de données lui facilitant la construction du graphe
d'états et son parcours et d'un module de communication lui facilitant
l'intégration des compétences des agents service.
Un planificateur, une structure de données
représentant le graphe d'états et un module de communication sont
donc les composants de notre agent médiateur. Ils sont
représentés dans la figure « figure 4.14 » suivante
:
Agent service1 Agent service2
Agent serviceN
Agent utilisateur
Problème
Plan
Planificateur
Agent médiateur
Graphe d'états construit
Module de communication
Figure 4.15 : Architecture interne de «
l'agent médiateur »
· Le graphe d'états construit :
c'est une structure de données qui sert de support au
raisonnement du planificateur. Elle représente un graphe d'états
orienté construit dynamiquement au cours du processus de planification
dont, les noeuds sont les différents états atteints par le
planificateur et les arcs représentent les différents
opérateurs (actions) venants des agents service qui permettent de passer
d'un état à un autre. Le noeud principal du graphe
représente le but de l'utilisateur à atteindre.
But
Sous_but1 Sous_but2 Sous_butn
Sous_sous_but1 Sous_sous_but2
Chaque noeud du graphe représente :
1. les préconditions de l'opérateur venant de l'un
des agents service et permettant de passer de son noeud père à
lui ; et
2. les effets des opérateurs venants des agents service
et permettant de passer de lui à ses noeuds fils.
Lorsque le planificateur arrive à construire un chemin
dans ce graphe permettant d'aller du noeud principal (le but) à un noeud
satisfaisant l'état initial alors, le problème est résolu
et le plan solution sera donc l'inverse de la séquence
d'opérateurs allant du but à l'état initial.
· Le planificateur : l'agent
médiateur lorsqu'il reçoit un problème (état
initial et but) de l'agent utilisateur, il exploite les opérateurs
(compétences) des différents agents service dans un algorithme de
planification pour le résoudre. Ce module de l'agent sert à
implémenter un tel algorithme.
Planificateur
Plan solution
Ensemble d'actions de planification venants des agents
service
|
|
|
Description de l'état initial
Description du but
Rappelons (comme déjà vu dans le chapitre1
§ I.2.3) qu'un nombre important d'algorithmes existe pour faire la
planification. Le planificateur de notre système exploite le
mécanisme de la recherche d'une solution dans un espace d'états
ainsi que le principe du chaînage arrière.
Ce planificateur est considéré
régressif, puisqu'il se déplace vers l'arrière.
Il consiste à construire le graphe de recherche du problème, non
pas en partant de l'état initial, mais en partant du but et en
appliquant l'inverse des opérateurs de planification (venant des agents
service) pour produire des sous-buts jusqu'à arriver à
l'état initial. Si l'algorithme permet de remonter à cet
état initial, alors il retourne le plan solution trouvé.
· L'algorithme de planification :
Avant d'aborder l'algorithme, il convient de montrer
premièrement son principe. Principe :
- L'algorithme est récursif, il exploite le graphe
d'états pour résoudre le problème soumis par
l'utilisateur.
- Il diffuse le but de l'utilisateur avec son état initial
vers tous les agents service comme un premier problème à
résoudre (première itération de l'algorithme).
- Chaque fois que le planificateur reçoit toutes les
réponses des agents service à un nouveau sous-problème, il
dispose d'un mécanisme lui permettant de vérifier l'existence
d'un plan solution au but de l'utilisateur (un chemin dans le graphe
d'états allant du but à l'état initial de
l'utilisateur).
- Si ce n'est pas le cas (l'itération essayée ne
convient pas à résoudre le but de l'utilisateur), et tant qu'il
n'a pas trouvé de solution satisfaisante, le planificateur met
éventuellement à jour le graphe d'états et le parcourt
d'abord pour choisir un nouveau sous-but non résolu encore et il le
diffuse avec l'état initial de l'utilisateur à tous les agents
service comme un nouveau sous-problème à résoudre
(nouvelle itération).
- L'algorithme s'itère alors jusqu'à arriver
à construire dans le graphe d'états, un chemin allant du but de
l'utilisateur à son état initial.
Algorithme 4.2 : algorithme de planification
1. mettre le but de l'utilisateur le noeud principal du
graphe d'états ;
2. soit path la séquence
d'opérateurs (actions), permettant de passer du noeud principal du
graphe d'états à un autre noeud du graphe (un sous-but).
3. initialisation :
· path ? ø ;
· nouveau_but ? but_utilisateur ;
· solution_trouvée ? false ;
· non_solution_trouvée ? false ;
4. Tant que
(non(solution_trouvée)et(non(non_solution trouvée)))
faire
· Diffuser (nouveau_but, état initial) aux
différents agents service ;
· Attendre toutes les réponses des agents
service ;
· Si (l'un des agents service
retourne un opérateur « op » dont les effets
correspondent au « nouveau_but » et les préconditions
correspondent à l'état initial ) alors
solution ? inverse de (path.op) ; solution_trouvée ?
true ;
· Si (toutes les
réponses sont négatives et il n'y a pas encore de noeuds à
visiter dans le graphe d'états) alors
solution ? pas de solution ; non_solution_trouvée ?
true ;
|
|
Algorithme 4.2 : algorithme de planification
(suite)
· Si (toutes les
réponses sont négatives, mais il y'a de noeuds pas encore
traités) alors
nouveau_but ? choisir noeud pas encore traité du
graphe d'états ;
path ? séquence d'opérateurs permettant de
passer du but principal à ce noeud ;
· Si (un ensemble d'agents
service retournent un ensemble d'opérateurs dont les Effets
correspondent à « nouveau_but » mais les préconditions
ne correspondent pas à l'état initial)
alors
Mettre à jour le graphe d'états (ajouter les
préconditions des opérateurs retournés comme des sous-but
fils de « nouveau_but ») ;
nouveau_but ? choisir noeud pas encore traité du
graphe d'états ; path ? séquence d'opérateurs permettant
de passer du but principal à ce noeud ;
5. Fin tant que
6. Retourner (solution) à l'agent utilisateur
;
|
Exemple illustratif :
Afin d'illustrer le fonctionnement de cet algorithme,
introduisons l'exemple suivant :
Notre utilisateur est à Paris le Dimanche et veut se
rendre à New York le Mardi. Il veut organiser son voyage par Internet.
Pour le faire supposons que deux services sont déjà
sélectionnés : un service de réservation de vols
aériens et un autre de réservation de trains.
Dans notre système ces deux services sont
représentés par les deux agents : Agent_S_V et Agent_S_T.
· L'agent Agent_S_V extrait de la description du service
qu'il représente l'opérateur suivant :
Reserver_Vol(Nom_utilisateur Ville_depart Ville_Arrivee
Date_Depart Date_Arrivee) Precond : (À Nom_utilisateur Ville_Depart
Date_Depart)
Effet : (À Nom_utilisateur Ville_Arrivee
Date_Arrivee)
Et a comme base de connaissances :
(Exist_trajet Paris Madrid Dimanche Dimanche)
(Exist_trajet London Moscou Samedi Dimanche) (Exist_trajet London New York
Lundi Mardi)
· L'agent Agent_S_V extrait de la description du service
qu'il représente l'opérateur suivant :
Reserver_Train(Nom_utilisateur Ville_depart Ville_Arrivee
Date_Depart Date_Arrivee) Precond : (À Nom_utilisateur Ville_Depart
Date_Depart)
Effet : (À Nom_utilisateur Ville_Arrivee
Date_Arrivee)
Et a comme base de connaissances :
(Exist_trajet Roma Paris Mercredi Jeudi) (Exist_trajet Alger
Paris Samedi Dimanche) (Exist_trajet Madrid London Dimanche Lundi)
De la requête de l'utilisateur l'agent utilisateur extrait
le problème de planification suivant et l'envoie à l'agent
médiateur :
Etat initial : (A utilisateur Paris Dimanche)
Etat but : (A utilisateur New York Mardi)
Après la réception de ce problème par
l'agent médiateur, l'algorithme se déroule comme suit :
1. Initialisation Le graphe d'état est le suivant :
(A utilisateur New York Mardi)
nouveau_but ? (A utilisateur New York Mardi) path ?
ø
2. L'agent médiateur diffuse le problème
((A utilisateur New York Mardi) , (A utilisateur Paris Dimanche)) aux
deux agents Agent_S_V et Agent_S_T puis, il attend jusqu'à recevoir
leurs réponses.
3. Les deux agents service suite à la réception
de ce problème, cherchent en exploitant leurs bases de connaissances
dans leurs actions celles dont les préconditions correspondent à
l'état initial du problème et les effets correspondent au but.
Agent_S_V ne trouve pas cette correspondance, mais il trouve
une action (Reserver_Vol(utilisateur London New York Lundi Mardi))
dont les effets correspondent au but et dont la précondition ne
correspond pas à l'état initial, cet agent envoie donc cette
précondition ((A utilisateur London Lundi)) comme un nouveau
but à résoudre à l'agent médiateur.
Agent_S_T ne trouve aucune correspondance, il envoie donc une
réponse négative.
4. maintenant, l'agent médiateur dispose des
réponses des deux agents service, il va procéder comme suit :
Il met à jour le graphe d'états, ce dernier sera
donc le suivant :
(A utilisateur New York Mardi)
(A utilisateur London Lundi)
nouveau_but ? (A utilisateur London Lundi)
path ? ( Reserver_Vol(utilisateur London New York Lundi
Mardi))
5. L'agent médiateur diffuse le nouveau
problème ((A utilisateur London Lundi) , (A utilisateur Paris
Dimanche)) aux deux agents Agent_S_V et Agent_S_T puis, il attend
jusqu'à recevoir leurs réponses.
6. Agent_S_V lui renvoie une réponse négative
et Agent_S_T lui renvoie l'opérateur (Reserver_Train(utilisateur
Madrid London Dimanche Lundi)) et comme un nouveau but à
résoudre la précondition de cet opérateur (A
utilisateur Madrid Dimanche).
7. Suite à la réception de ces réponses,
l'agent médiateur : Met à jour le graphe d'états, il sera
le suivant :
(A utilisateur New York Mardi)
(A utilisateur London Lundi) (A utilisateur Madrid
Dimanche)
nouveau_but ? (A utilisateur Madrid Dimanche)
path ? ( Reserver_Vol(utilisateur London New York Lundi
Mardi) , Reserver_Train(utilisateur Madrid London Dimanche Lundi) )
8. L'agent médiateur diffuse le nouveau
problème ((A utilisateur Madrid Dimanche) , (A utilisateur Paris
Dimanche)) aux deux agents Agent_S_V et Agent_S_T puis, il attend
jusqu'à recevoir leurs réponses.
9. Agent_S_T lui renvoie une réponse négative
et Agent_S_V lui renvoie l'opérateur (Reserver_Vol(utilisateur Paris
Madrid Dimanche Dimanche)) et un message lui indiquant que cet
opérateur permet de résoudre le nouveau problème
reçu directement.
10. Suite à la réception de ces réponses,
l'agent médiateur va mettre à jour les deux variables : solution
et solution_trouvée comme suit :
solution_trouvee ? true
solution ? ( Reserver_Vol(utilisateur Paris Madrid Dimanche
Dimanche) Reserver_Train(utilisateur Madrid London Dimanche Lundi)
Reserver_Vol(utilisateur London New York Lundi Mardi) )
11. De cette façon, l'algorithme sort de la boucle «
tant que » et retourne à l'agent utilisateur le
plan solution (contenu de la variable « solution »).
2. Fonctionnement
Perception :
- Réception d'un message de l'agent administrateur,
contenant la liste des identificateurs des agents services.
- Réception d'un message de l'agent utilisateur, contenant
la description du problème à résoudre.
- Réception d'un message de l'agent utilisateur,
contenant une demande
d'annulation d'une demande de composition en cours de
résolution.
- Réception d'un message de l'agent service, contenant une
solution directe à un problème.
- Réception d'un message de l'agent service, contenant une
liste d'actions possibles.
- Réception d'un message de l'agent service, indiquant
l'absence d'une solution au niveau de cet agent.
Raisonnement : le raisonnement
effectué par cet agent est au niveau de la planification. Après
que l'agent soit doté de la description du problème (état
initial et but) d'après l'agent utilisateur, il exécute
l'algorithme de planification afin de le résoudre.
Action : selon le diagramme d'activités
suivant :
Attente
Recevoir message (problème) d'un agent utilisateur
Recevoir message (annulation) d'un agent utilisateur
Interroger les agents service
Diffuser message (annulation) vers les agents service
Planifier
Autre
Solution trouvée
Non solution trouvée
Envoyer message (solution) à l'agent utilisateur
Envoyer message (pas de solution) à l'agent
utilisateur
Figure 4.16 : Diagramme d'activités pour
le fonctionnement de l'agent médiateur IV.3. interactions entre
les agents du système
Dans la partie précédente, nous avons
présentées l'architecture et le fonctionnement de chaque agent du
système à part. cependant, dans le modèle proposé
aucun des agents ne peut résoudre le problème de l'utilisateur
tout seul. C'est la coopération entre les agents qui le permet.
Cette coopération nécessite en effet, des
différentes interactions entre les agents. Ces dernières sont
directes par envoie de messages.
L'envoie de messages entre les agents nécessite un
langage commun compréhensible par tous les agents du système.
Dans notre travail nous avons choisies le langage FIPA-ACL (il sera
détaillé dans l'annexe).
Pour modéliser les interactions entre les agents, les
concepteurs des systèmes multi-agents peuvent utilisés
différents moyens : les diagrammes de séquence UML peuvent
être utilisés, ils sont simples et intelligibles, mais ils ne
fournissent pas aucun flux de contrôle.
Dans notre travail nous avons exploitées une autre
alternative: l'utilisation des diagrammes de protocole
d'interaction d'AUML utilisés par la FIPA. Ces diagrammes sont
en effet une extension des diagrammes de séquence d'UML, mais qui sont
plus puissants dans leur expressivité. Ils les étendent par
l'ajout d'un nombre d'éléments de flux de contrôles et
utilisent les actes communicatifs d'ACL pour les messages
échangés (voir l'annexe).
Les interactions pouvant existés dans notre système
sont :
· interactions agent administrateur - agent utilisateur
· interactions agent administrateur - agent
médiateur
· interactions agent utilisateur - agent
médiateur
· interactions agent médiateur - agent service
Dans ce qui suit nous détaillerons chaque type
d'interaction à part par une modélisation à travers les
diagrammes de protocole d'interaction AUML.
IV.3.1. Interactions agent administrateur - agent
utilisateur
Lorsqu'un utilisateur se connecte au système à
travers l'interface principale, l'agent administrateur crée un agent
utilisateur lui représentant dans le système. La première
chose que fait l'agent administrateur est l'envoie de l'identificateur de
l'agent médiateur à cet agent utilisateur lui permettant de
communiquer son problème à l'agent médiateur afin de le
résoudre.
Interactions agent administrateur - agent
utilisateur
Agent administrateur
|
|
Agent utilisateur
|
|
inform (identificateur agent médiateur)
Figure 4.17 : Diagramme de protocole
d'interactions d'AUML « agent administrateur - agent utilisateur »
IV.3.2. Interactions agent administrateur - agent
utilisateur
L'agent administrateur suite à son lancement de
l'agent médiateur, il lui envoie la liste des identificateurs des
différents agents service lui permettant ainsi de les communiquer dans
le but de résoudre de problème soumis par l'utilisateur.
Interactions agent administrateur - agent
médiateur
Agent administrateur
|
|
Agent médiateur
|
|
inform (identificateurs agents service)
Figure 4.18 : Diagramme de protocole
d'interactions d'AUML « agent administrateur - agent médiateur
»
IV.3.3. Interactions agent utilisateur - agent
médiateur
L'agent utilisateur envoie le problème de
l'utilisateur à l'agent médiateur pour le résoudre. Ce
dernier après qu'il accepte de le résoudre, il doit lui renvoyer
un résultat. Ce résultat peut être négatif (pas de
solution) ou positif (plan solution).
Interactions agent utilisateur - agent
médiateur
Agent utilisateur
Agent médiateur
request (résolution problème)
agree
cancel (résolution problème)
inform (résolution interrompue)
[not failed]
failure (résolution non interrompue)
[failed]
failure (pas de solution au problème)
inform (plan solution)
[agreed]
L'agent utilisateur peut demander à l'agent
médiateur d'arrêter la résolution d'un problème
déjà demandée. L'agent médiateur peut refuser
(résolution déjà effectuée) ou accepter. S'il
accepte, alors à la fin de l'arrêt de la résolution il
envoie à l'agent utilisateur un message lui l'indiquant
(résolution arrêtée).
IV.3.4. Interactions agent médiateur - agent
service
L'agent médiateur suite à la réception
d'un problème de l'agent utilisateur, il essaye de le résoudre en
exploitant les compétences des différents agents service. Tant
qu'il n'arrive pas à le résoudre, il parcours le graphe
d'état, choisit un sous-but non encore traité et le diffuse avec
l'état initial de l'utilisateur comme un nouveau problème aux
agents service.
Chaque agent service cherche la solution et lui envoie soit une
solution directe au nouveau problème, soit une liste d'actions pouvant
servir à le résoudre ou encore un message lui d'échec.
Interactions agent médiateur - agent
service
Agent médiateur
|
|
Agent service
|
|
request (résolution nouveau problème)
agree
failure (pas de solution au nouv problème)
inform (solution directe) inform (liste d'actions)
Figure 4.20 : Diagramme de protocole
d'interactions d'AUML « agent médiateur - agent service »
V. Etude de cas
Dans la partie précédente du chapitre, nous
avons décrits un système misant en place notre modèle de
composition de services web proposé. Mais cette description ne suffit
pas ; il apparaît très nécessaire d'illustrer son
efficacité à travers une étude de cas. Une conception de
l'étude de cas fait l'objet de cette section du chapitre.
Nous choisissons comme étude de cas le domaine de
réservation de voyages. On suppose qu'on a trois services de
réservation qui présentent les mêmes entées et
sorties et les mêmes contraintes d'utilisation
(préconditions/effets). La différence entre eux réside
dans les supports de réservations utilisés et les trajets
existants. Ainsi, les services proposés sont :
· Un service de réservation de voles ;
· Un service de réservation de trains et
· Un service de réservation de bus.
De façon générale, la structure similaire de
touts les services en terme des entrées et des sorties est la suivante
:
Nom_utilisateur Ville_départ Date_départ
Ville_arrivée Date_arrivée
Service de Réservation
Message de confirmation/infirmation
Figure 4.21 : Architecture
générale des services proposés en terme d'entrées
et de sorties
Cependant, en terme des contraintes (préconditions/effets)
chaque service de réservation peut être décrit comme suit
:
(À Nom_utilisateur Ville_départ
Date_départ) (Existe_trajet Ville_départ Date_départ
Ville_arrivée Date_arrivée)
Service de Réservation
(À Nom_utilisateur Ville_arrivée
Date_arrivée)
Figure 4.22 : Architecture d'un service en terme
de préconditions et effets
L'utilisateur du système va donc entrer sa
requête (Nom_utilisateur, Ville_départ, Date_départ,
Ville_arrivée, Date_arrivée) ; Ville_départ et
Date_départ construit son état initial et Ville_arrivée et
Date_arrivée son but à atteindre. Le système après
l'élaboration du processus de composition lui renvoie un plan solution
(s'il existe) résolvant son problème.
Conclusion
Dans ce chapitre nous avons présentées une
conception d'un système implémentant notre approche de
composition. Cette conception est abordée selon deux vue
différentes : une vue externe décrivant les acteurs
impliqués dans le système et les fonctionnalités offertes
et une vue interne décrivant l'architecture interne du système
dont le système est vu comme un SMA. Cette partie contient une
description des différents agents, leurs architectures, leurs
fonctionnements et les différentes interactions entre eux dans le but de
réaliser la composition. Le chapitre est terminé par une
description d'une étude de cas choisie.
Après avoir conçu notre système, la
prochaine étape consiste à concrétiser cette conception
i.e, à réaliser ce système. C'est l'objet du chapitre
suivant.
Introduction
Après avoir faire une conception de notre
système dans le chapitre précédent, il reste maintenant
d'essayer à le réaliser en se basant sur cette conception. Ainsi
dans ce chapitre nous présenterons les différentes étapes
de sa réalisation, les différents outils exploités et les
différentes interfaces de sa mise en oeuvre.
I. Etapes de la réalisation
De façon plus générale, notre
système est vu comme un SMA ; sa réalisation consiste à
implémenter ces différents agents. Mais, nous avons vus que
certains agents contiennent des composants pouvant être
implémentés à part pour faciliter les taches, qui sont le
traducteur OWLS vers opérateurs STRIPS existant au niveau des agents
service et le planificateur existant au niveau de l'agent médiateur. En
plus les descriptions OWL-S des services supposés déjà
sélectionnés doivent être aussi
générées dans cette réalisation.
Alors, la réalisation du système peut être
faite à travers les étapes suivantes :
1. Création des descriptions OWL-S des modèles de
processus des services proposés ;
2. Implémentation du traducteur OWL-S vers
opérateurs STRIPS ;
3. Implémentation du planificateur ;
4. Implémentation des différents agents du
système ;
5. Création des différentes interfaces du
système.
II. Outils exploités
Afin de bien réaliser les étapes
précédentes, plusieurs outils de développement peuvent
nous aider.
· L'IDE (Environnement de Développement
Intégré), Eclipse ;
· Le plug-in OWL-S IDE pour Eclipse ;
· L'IDE, JBuilder ;
· La plateforme JADE.
III. Création des descriptions OWL-S
Cette étape consiste à créer les
différentes descriptions OWL-S des Modèles de processus des
services proposés dans le chapitre précédent. Cette
description sert à décrire chaque service comme un processus
atomique. Chaque processus atomique est décrit en terme de son flux de
données (inputs et outputs) ainsi qu'en terme de ses contraintes
d'utilisation (préconditions et effets).
Cette création peut être faite manuellement,
mais plusieurs outils sont apparus pour faciliter la tache. Pour notre travail
nous avons choisis d'utiliser l'éditeur OWL-S IDE utilisé comme
un plug-in Eclipse (voir l'annexe).
Cet éditeur fournit deux modes pour l'édition des
descriptions OWL-S :
· Le mode graphique et
· Le mode textuel
Il permet de créer ces descriptions de différentes
manières :
· Depuis un code Java implémentant le service web
;
· Depuis un fichier WSDL décrivant le service web ;
ou bien
· De les créer directement vides puis de les
compléter à travers l'éditeur.
Comme nous avons vus, les services proposés on presque
la même description OWL-S de leurs modèles de processus. Il suffit
donc dans cette section de présenter le procédé suivi pour
la génération de l'une de ces descriptions ; celle du service de
réservation de vols aériens. En plus, ce qui nous concerne dans
notre travail est seulement la description du modèle de processus du
service. Ainsi, le procédé suivi est le suivant :
1. Génération d'une classe Java
implémentant le service web ;
2. Génération de la description OWL-S du service
à l'aide du support Java2OWL-S fournit par l'éditeur ;
3. Utilisation de l'éditeur des modèles de
processus (process models) pour compléter la description OWL-S du
modèle de processus du service générée.
III.1. Génération de la classe Java
implémentant le service web
Notre service contient une seule opération ; lorsqu'il
reçoit une demande de réservation d'un utilisateur, il renvoie
soit une confirmation (réservation possible) ou une infirmation
(réservation impossible).
La classe Java pouvant l'implémenter peut donc contenir
une seule fonction « Réserver_Vol() », ayant comme
entrées : le nom de l'utilisateur, sa ville de départ, sa date de
départ, sa ville d'arrivée et sa date d'arrivée et ayant
comme une seule sortie une expression exprimant l'existence ou non de la
réservation demandée. Ce que fait le service ne nous concerne pas
; ce qui nous concerne est seulement la signature de la fonction. Cette
génération est faite par l'Eclipse IDE.
Notre classe Java sera donc la suivante :
public class Reservation_Vol {
public boolean Reserver_Vol(String
Nom_Utilisateur, String Ville_Depart,
String Date_Depart, String Ville_Arrivee, String Date_Arrivee)
{
}
}
|
Figure 5.1 : classe Java implémentant le
service de réservation de vols aériens III.2.
Génération de la description OWL-S du service
Une fois la génération du code Java
implémentant le service soit terminée, l'éditeur fournit
un support « Java2OWL-S » permettant de générer la
description OWL-S du service à partir de ce code Java. La conversion
Java2OWL-S est faite en deux phases : dans la première le code Java est
converti à un fichier WSDL et dans la deuxième ce dernier est
converti à des fichiers OWL-S. Le résultat de ce processus est
des descriptions WSDL et grounding OWL-S complètes et des
descriptions du profile et du modèle de processus
incomplètes.
Puisque la description du modèle de processus est la seule
description qui nous concerne dans notre travail, nous ne présenterons
dans ce qui suit que ce fichier généré dans cette
étape.
Dans ce qui suit nous présentons la description OWL-S du
modèle de processus dans le mode graphique de l'éditeur puis dans
le mode textuel (format XML) :
Figure 5.2 : Une partie de la description OWL-S
du modèle de processus générée en mode graphique
Figure 5.3 : Une partie de la description OWL-S
du modèle de processus générée en mode textuel
III.3. Compléter la description OWL-S
générée
La description OWL-S du modèle de processus du service
générée dans l'étape précédente
décrit le service en terme de son flux de données seulement, mais
pas en terme de ses contraintes d'utilisation (préconditions et effets).
Pour faire la compléter nous allons exploités l'éditeur
des modèles de processus fournit par l'outil OWL-S IDE.
Notre processus atomique a deux préconditions et un seul
effet.
Préconditions :
- (À Nom_Utilisateur Ville_Départ Date_Depart)
- (Existe_Trajet Ville_Depart Date_Depart Ville_Arrivee
Date_Arrivee)
Effet :
- (À Nom_utilisateur Ville_arrivée
Date_arrivée)
Après avoir la compléter et l'organiser (afin de
faciliter sa manipulation en suite), la description OWL-S du modèle de
processus pour notre service de réservation de voles aériens sera
donc la suivante :
<rdf:RDF
xmlns:rdf= "&rdf;#"
xmlns:rdfs= "&rdfs;#"
xmlns:owl= "&owl;#"
xmlns:xsd= "&xsd;"
xmlns:service= "&service;#"
xmlns:process= "&process;#"
xmlns:profile= "&profile;#"
xml:base= "
http://www.daml.ri.cmu.edu/bravoair/Réservation_VolProcess.owl"
>
<owl:Ontology about="">
<owl:versionInfo>
$Id: OWLSProcessModelEmitter.java,v 1.1 naveen
</owl:versionInfo>
<rdfs:comment>
Add Comment
</rdfs:comment>
<owl:imports rdf:resource="&service;" />
<owl:imports rdf:resource="&process;" /> <owl:imports
rdf:resource="&profile;" /> <!-- WSDL2OWL-S :: Add More Imports If
needed -->
</owl:Ontology>
<!-- WSDL2DAML-S_was_here -->
<!-- WSDL2OWL-S :: Add composite processes if needed-->
<!--WSDL 2 OWL-S Generated code--> <!--**List of Atomic
Processes**--> <!--ProcessName :Reserver_Vol-->
<!--*****************************-->
<!--Definitions for Atomic Process : Reserver_Vol-->
<process:AtomicProcess rdf:ID="Reserver_Vol"> <!--Inputs-->
<process:hasInput>
<process:Input rdf:ID="Nom_Utilisateur">
<process:parameterType rdf:datatype="&xsd;#anyURI">
&xsd;#string
</process:parameterType>
</process:Input> </process:hasInput>
<process:hasInput>
<process:Input rdf:ID="Ville_Arrivee">
<process:parameterType rdf:datatype="&xsd;#anyURI">
&xsd;#string
</process:parameterType>
</process:Input> </process:hasInput>
<process:hasInput>
<process:Input rdf:ID="Ville_Depart">
<process:parameterType rdf:datatype="&xsd;#anyURI">
&xsd;#string
</process:parameterType>
</process:Input> </process:hasInput>
<process:hasInput>
<process:Input rdf:ID="Date_Depart">
<process:parameterType rdf:datatype="&xsd;#anyURI">
&xsd;#string
</process:parameterType>
</process:Input> </process:hasInput>
<process:hasInput>
<process:Input rdf:ID="Date_Arrivee">
<process:parameterType rdf:datatype="&xsd;#anyURI">
&xsd;#string
</process:parameterType>
</process:Input> </process:hasInput>
<!--Outputs-->
<process:hasOutput>
<process:Output rdf:ID="Reservation_Existe">
<process:parameterType rdf:datatype="&xsd;#anyURI">
&xsd;#boolean
</process:parameterType>
</process:Output> </process:hasOutput>
<!--Preconditions-->
<process:hasPreConditon>
<process:PreCondition rdf:about="#Etat_Utilisateur">
<process:expressionLanguage rdf:resource="#DRS"/>
<process:expressionBody>
(A Nom_Utilisateur Ville_Depart Date_Depart)
</process:expressionBody>
</process:PreCondition> </process:hasPreConditon>
<process:hasPreConditon>
<process:PreCondition rdf:about="#Existe_Trajet">
<process:expressionLanguage rdf:resource="#DRS"/>
<process:expressionBody>
(Existe_Trajet Ville_Depart Date_Depart Ville_Arrivee
Date_Arrivee)
</process:expressionBody>
</process:PreCondition> </process:hasPreConditon>
<!--Effects-->
<process:hasEffect>
<process:Effect rdf:about="#Existe_Trajet">
<process:expressionLanguage rdf:resource="#DRS"/>
<process:expressionBody>
(A Nom_Utilisateur Ville_Arrivee Date_Arrivee)
</process:expressionBody>
</process:Effect>
</process:hasEffect>
</process:AtomicProcess> </rdf:RDF>
|
Figure 5.3 : La description OWL-S du process
model du service « Réservation de vols aériens »
Les descriptions des modèles de processus des deux autres
services sont faites en suivant le même procédé
précédent.
IV. Implémentation du traducteur OWL-S vers
opérateurs STRIPS
Ce traducteur fait un composant dans les agents service.
Ainsi, chaque agent service après son initialisation avec la description
OWL-S du service qu'il représente, il exploite ce composant pour la
transformer à un ensemble d'opérateurs correspondants.
Nous avons implémentées ce traducteur par une
fonction Java (traducteur()), prenant en entrée sous
forme d'un texte la description OWL-S et retournant en sortie la liste
d'opérateurs pouvant être extraits de cette description.
Le principe est le suivant : la fonction parcourt le texte de
la description OWL-S. Chaque fois qu'il rencontre un processus atomique (un
bloc entre les deux balises <process:AtomicProcess et
</process:AtomicProcess>), il le traduit à un opérateur
STRIPS : le nom de ce dernier sera le nom du processus. Puis entre ces balises
chaque fois qu'un input (<process:Input), un output (<process:Output),
une précondition (<process:hasPreCondition>) ou un effet
(<process:hasEffect>) est rencontré, il sera transformé
à un paramètre, une précondition ou un effet pour
l'opérateur créé.
//SDD est une structure de données pouvant contenir les
éléments //descriptifs d'un opérateur STRIPS (le nom, les
inputs, les outputs, //les préconditions et les effets)
class SDD{
String nom_operateur;
ArrayList<String> L_parametres=new
ArrayList<String>(); ArrayList<String>
L_preconditions=new ArrayList<String>();
ArrayList<String> L_effets=new
ArrayList<String>();
}
public Vector<SDD> traducteur(String
fichier_owls){
//operateurs est un vecteur qui peut contenir les
éléments // descriptifs des différents opérateurs
extraits de la
// descripton OWL-S
|
while((!(str2.equals("</process:atomicprocess")))
&&(tompon.hasMoreTokens())){
if(str2.equals("<process:input")){
//c-à-d: on a trouvé un input => on // l'ajoute à liste
des parametres de // l'operateur op
}
if(str2.equals("<process:output")){
//c-à-d: on a trouvé un output => on //l'ajoute à liste
des parametres de // l'operateur op
}
if(str2.equals("<process:hasprecondition")){
//c-à-d: on a trouvé une précondition
//=> on l'ajoute à liste des
// préconditions de l'operateur op
}
if(str2.equals("<process:haseffect")){
//c-à-d: on a trouvé un effet => on //l'ajoute à liste
des préconditions //de l'operateur op
}
}
//l'ajout de l'opérateur créé à la
liste des // opérateurs extraits de la description OWL-S
operateurs.add(op);
}
}
//retourner la liste d'opérateurs extraits
return operateurs;
}
|
Figure 5.4 : fonction Java implémentant
le traducteur OWLS vers opérateurs STRIPS
V. Implémentation du planificateur
Le planificateur est utilisé au niveau de l'agent
médiateur lui permettant de réaliser le but soumis par
l'utilisateur. Or ce qui est abordé dans cette section n'est pas le
planificateur dans sa globalité mais une partie de lui. Cette partie
consiste au un module pour le traitement des différentes réponses
venantes des agents service en réponse à un sous problème
(état initial de l'utilisateur et un sous but) y envoyé par
l'agent médiateur. Le module est implémenté par une
fonction « traiter_réponses_AS() ».
Le principe est le suivant : l'agent médiateur
après qu'il reçoit toutes les réponses des agents service
à un sous problème déjà envoyé, il les met
dans un vecteur pouvant contenir pour chaque agent la réponse
renvoyée ainsi que son type. Il utilise puis ce vecteur comme
entrée à la fonction << traiter_réponses_AS()
». Cette dernière après qu'elle traite les réponses,
renvoie un autre vecteur contenant le résultat du traitement ainsi que
son type.
Le vecteur d'entrée de la fonction est de dimension 3
(nombre des agents service). Pour chaque agent service ce vecteur contient sa
réponse ainsi que le type de cette réponse. Le type de la
réponse peut être :
- Pas_solution_trouvée : si l'agent service ne trouve pas
une solution au sous problème lui est envoyé.
- Solution_trouvée : si l'agent service a trouvé
une solution directe au sous problème lui est envoyé.
- Nouveaux_sousbut : si l'agent service ne trouve pas une
solution directe au sous problème mais il trouve un ou plusieurs
nouveaux sous but pouvant participer à son résolution. Dans ce
cas ces nouveaux sous but son mets dans le vecteur en plus du type de la
réponse.
Le vecteur de sortie de la fonction peut contenir le
résultat retourné par la fonction ainsi que le type de ce
résultat. Ce type de résultat peut être :
- Pas_solution_trouvée_pb_utilisateur : si toutes les
réponses des agents service sont de
type << pas_solution_trouvée » et le graphe
d'états ne contient pas de sous but à traiter.
- Nouveau_sous_but : si toutes les réponses des agents
service sont de type << pas_solution_trouvée » et le graphe
d'états contient encore de sous but à traiter ou dans le cas
où l'une au moins des réponses est de type <<
Nouveaux_sousbut ». Dans ce dernier cas, le graphe d'états doit
être à jour et un nouveau sous but est retourné par la
fonction.
- Solution_trouvée_pb_utilisateur : dans le cas où
l'une au moins des réponses est de type << solution_trouvée
». Dans ce cas un plan solution est retourné par la fonction
En fin, l'agent médiateur suite à la
réception de ces résultat de traitement de la fonction, il va
résonner : soit il renvoie << pas de solution au problème
de l'utilisateur à l'agent utilisateur, soit envoie un nouveau sous
problème aux agents service ou bien, il retourne à l'agent
utilisateur un plan solution au problème de l'utilisateur.
Premièrement, dans son implémentation, l'agent
médiateur doit se doter d'une variable globale représentant le
graphe d'états. Ce dernier est implémenté par une
structure de pile de vecteur. Chaque vecteur est de type <<
structure_graph » défini ci-après. Chaque vecteur doit
contenir dans son premier champ un sous but ainsi que l'opérateur
permettant d'y parvenir et dans les autres champs les différents sous
but permettant d'aller du but de l'utilisateur (noeud principal du graphe)
à ce sous but.
class Structure_graphe{
String sous_but;
String operateur;
}
//Déclaration du graphe d'états
Stack<Vector<Structure_graphe>>
Graphe_Etats=new
Stack<Vector<Structure_graphe>>();
//Initialisation du graphe d'états
Structure_graphe premier_s_b=new
Structure_graphe(); Vector<Structure_graphe> etat=new
Vector<Structure_graphe>(); premier_s_b.sous_but=But_Utilisateur;
premier_s_b.operateur="";
etat.add(premier_s_b);
Graphe_Etats.push(etat);
Notre fonction « traiter_reponses_AS() » correspond
donc à ce qui suit :
Nous définissons encore une autre variable globale
« Dernier_sousbut_choisi » qui peut contenir le dernier sous but
choisi et traité pour l'utiliser en suite dans la fonction de
traitement. C'est une variable de type « Vector<Structure_graphe>
» :
Vector<Structure_graphe>
Dernier_sousbut_choisi=new
Vector<Structure_graphe>();
|
Définissons maintenant la structure des deux vecteurs
d'entrée et de sortie de la fonction « traiter_reponses_AS() »
:
class Structure_entree_sortie{
String type_reponse;
ArrayList<String> objet_reponse=new
ArrayList<String>();
}
//Reponses_AS est un vecteur pour contenir les réponses
des agents // service et sera utilisé comme entrée à la
fonction de traitement Vector<Structure_entree_sortie>
Reponses_AS=new
Vector<Structure_entree_sortie>();
//Reponse_AM est un vecteur utilisé pour récuperer
le résultat de la //fonction de traitement
Vector<Structure_entree_sortie>
Reponse_AM=new
Vector<Structure_entree_sortie>();
|
Maintenant, il nous reste à présenter notre
fonction de traitement « traiter_reponses_AS() » :
/****************************************************/ /*
Définition de la fonction "traiter_reponses_AS()
*/ /****************************************************/
public Vector<Structure_entree_sortie>
Traiter_reponses_AS(Vector<Structure_entree_sortie> Reponses_AS)
{
//Déclaration des variables locales
// parcours le vecteur de réponses pour compter le nombre
des // différents types de réponses
ListIterator<Structure_entree_sortie>
iter=Reponses_AS.listIterator();
while(iter.hasNext()){
if((iter.next().type_reponse).equalsIgnoreCase("pas_solution"))
nbre_pas_solution++;
if((iter.next().type_reponse).equalsIgnoreCase("soluion_trouvee"))
nbre_soluion_trouvee++;
if((iter.next().type_reponse).equalsIgnoreCase("nouveaux_sousbut"))
nbre_nouveaux_sousbut++;
}
// Maintenant, le type du traitement à effectuer
dépend de ces // nombres comptés :
// 1. Si toutes les réponses des agents service sont de
type
// "pas_solution"(nbre_pas_solution=3),un test sur l'état
du
// graphe d'états est effectué :
// 1.1. Si il est vide, le résultat à retourner
sera
// "pas_solution_pb_utilisateur"
// 1.2. Si il n'est pas vide, le résultat à
retourner sera un
// nouveau sous but à résoudre
// 2. Si nbre_solutiontrouvee>=1, alors le résultat
à retourner sera // un plan solution
// 3. Si les deux cas précédent ne sont pas
trouvés (nbre_nouveaux
// _sousbut>=1), alors le graphe d'états sera met
à jour et le
// résultat à retourner sera un nouveau sous but
à résoudre
if(nbre_pas_solution==3){
if(Graphe_Etats.isEmpty()){
type_reponse_retour="pas_solution_pb_utilisateu";
objet_reponse_retour.clear();
} else {
type_reponse_retour="nouveau_sous_but";
objet_reponse_retour.add(nouv_sousbut);
}
}
else //pas toutes les réponses sont de
type"pas_solution" {
if(nbre_soluion_trouvee>=1) {
type_reponse_retour="solution_trouvee_pb_utilisateur";
objet_reponse_retour.add(iter3 .next().operateur);
}
else // aucune "solution_trouvee" n'est trouvee
// => il existe au moins une réponse de type { //
"nouveaux_sousbut"
type_reponse_retour="nouveau_sousbut";
objet_reponse_retour.add(nouv_sousbut);
}
}
//************************************************************
// mettre les valeurs des deux variables "type_reponse_retour" // et
"objet_reponse_retour" associés dans le traitement
// précédent au vecteur "Resultat_a_retourner"
à retourner par // la fonction
//************************************************************
Resultat_a_retourner.firstElement().type_reponse
=type_reponse_retour;
Resultat_a_retourner.firstElement().objet_reponse
=objet_reponse_retour;
return(Resultat_a_retourner);
}
/****************************************************/
/* Fin de la fonction "traiter_reponses_AS() */
/****************************************************/
VI. Implémentation des agents du
système
Comme nous avons vus, notre système est composé
d'un ensemble d'agents en interaction pour résoudre le problème
soumis par l'utilisateur. La meilleure façon d'implémenter un
système multi-agents est l'utilisation d'une plateforme multi-agents.
Celle utilisée dans notre travail est JADE. (Voir annexe B).
VI.1. implémentation de l'agent
administrateur
Les principales méthodes utilisées par cet agent
sont :
Setup() : c'est la méthode principale de
chaque agent de JADE. Elle contient toutes les actions exécutées
par cet agent.
public class Agent_Administrateur
extends GuiAgent{
ArrayList<String> Idents_AS=new
ArrayList<String>();
public void setup() {
Idents_AS.add("Agent_S_Vol"); Idents_AS.add("Agent_S_Train");
Idents_AS.add("Agent_S_Bus");
// Lancement de l'agent médiateur et des agents service
// envoie des idents des agents services à l'agent
médiateur ACLMessage msg = new
ACLMessage(ACLMessage.INFORM) ; msg.addReceiver(new
AID("Agent_Mediateur",AID.ISLOCALNAME)) ; msg.setContent(Idents_AS);
send(msg) ;
}
// L'agent médiateur réagit selon le type de
l'événement(ev) // récupéré de l'interface
graphique
protected void onGuiEvent(GuiEvent ev)
{
switch(ev.getType()) {
case conect_client:
// Création et lancement d'une instance de l'agent
//client
// Lui envoyer l'identificateur de l'agent médiateur
ACLMessage msg = new ACLMessage(ACLMessage.INFORM) ;
msg.addReceiver(new
AID("Agent_Client",AID.ISLOCALNAME));
msg.setContent("Agent_Mediateur");
send(msg) ;
break;
case connect_admin:
while(non_valide_mp){
// récupération mot de passe administrateur, //
vérification mot de passe
}
// Afficher Menu système break;
OnGuiEvent() : permettant l'agent administrateur
de réagir aux différents événement capturés
depuis l'interface graphique.
VI.2. Implémentation de l'agent client
public class Agent_Client
extends GuiAgent{
public class Structure_entree_sortie{
String type_reponse;
ArrayList<String> objet_reponse;
}
if(msg_recu.getSender().equals("Agent_Mediateur")) {
}
String Ident_AM; //pour contenir l'ident de l'agent
médiateur
public void setup() {
addBehaviour(new
CyclicBehaviour(this){
public void action(){
ACLMessage msg_recu=receive();
// l'agent client agit selon le distinataire du massage
récu
if(msg_recu.getSender().equals("Agent_Administrateur"))
{
// Récuperation de l'ident de l'agent médiateur
Ident_AM=msg_recu.getContent();
Structure_entree_sortie reponse_AM=
(Structure_entree_sortie) msg_recu.getContentObject(); // Selon
le type de la réponse récupéré //(solution_trouvee
ou bien non_solution_trouvee)
// l'agent affiche les résultat à l'utilisateur
}
// L'agent médiateur réagit selon le type de
l'événement(ev) // récupéré de l'interface
graphique
protected void onGuiEvent(GuiEvent ev)
{
switch(ev.getType()) {
case Demande:
// Récuperer problème utilisateur et l'envoyer
à // l'agent médiateur
break;
case Annulation:
// Envoyer demande d'annulation à l'agent
médiateur
break;
}
}
}
L'agent client est implémenté par la classe
« Agent_Client ». Il hérite comme l'agent administrateur la
classe « jade.gui.GuiAgent » et utilise principalement les deux
méthodes suivantes : Setup() et
OnGuiEvent().
VI.3. Implémentation de l'agent
médiateur
public class Agent_Mediateur
extends Agent{ ArrayList<String> Idents_AS;
public class Structure_entree_sortie{
String type_reponse;
ArrayList<String> objet_reponse;
} else {
}
public void setup() {
addBehaviour(new
CyclicBehaviour(this){
public void action(){
ACLMessage msg_recu=receive();
// l'agent client agit selon le destinataire du massage
reçu
if(msg_recu.getSender().equals("Agent_Administrateur")) {
// récuperer les identificateurs des agents service //
depuis le message envoyé par l'agent dministrateur
ArrayList<String> liste=(ArrayList<String>)
msg_recu.getContentObject(); ListIterator<String> iter =
liste.listIterator(); while(iter.hasNext())
{
Idents_AS.add(iter.next());
}
if(msg_recu.getSender().equals("Agent_Client")))
{
if(// le performatif du msg_recu== Cancel) {
// Diffusion du message "Annuler" aux // agents service
ACLMessage msg = new
ACLMessage(ACLMessage.CANCEL); ListIterator<String>
iter=
Idents_AS.listIterator();
while(iter.hasNext())
{
msg.addReceiver(new
AID(iter.next(),AID.ISLOCALNAME));
}
send(msg) ;
Cet agent est implémenté par la classe «
Agent_Mediateur » qui hérite la classe jade.core.Agent. Ces
différents actions sont regroupées au niveau de la methode
setup(). Il exploite dans cette methode la fonction «
Traiter_reponses_AS() » présentée ci-avant pour
l'élaboration d'un plan solution au problème de l'utilisateur.
else
{
// Appliquer l'algorithme de planification
}
}
else // Message venant de l'un des agents
service {
// Recuperer les réponses des agents service // dans le
vecteur "Reponses_AS" Vector<Structure_entree_sortie> Reponses_AS=
(Vector<Structure_entree_sortie>)
msg_recu.getContentObject();
// Appeler la fonction "Traiter_reponses_AS"
Vector<Structure_entree_sortie> retour_fonction=Traiter_reponses_AS
(Reponses_AS);
}
}
}
VI.4. Implémentation de l'agent service
public class Agent_Service
extends Agent{
public class Structure_entree_sortie{
String type_reponse;
ArrayList<String> objet_reponse;
}
public void setup() {
// récuperer description OWL-S du service
représenté
// appeler Traducteur OWL-S vers operateurs STRIPS
addBehaviour(new
CyclicBehaviour(this){
public void action(){
// Recevoir message de l'agent médiateur ACLMessage
msg_recu=receive();
if(// le performatif du message est CANCEL) {
// Arreter traitement en cours
Cet agent est implémenté par la classe «
Agent_Service » qui hérite la classe jade.core.Agent.
else
{
// Appliquer algorithme de recherche de // solution
// Renvoyer résultats trouvées à l'agent //
médiateur
// (solution_trouvée, solution_non_trouvée ou //
bien nouveau_sousbut)
}
}
VII. Interfaces du système
Afin de mieux exploiter notre système, nous avons
l'enrichir par un une interface graphique facilitant l'utilisation de ses
différentes fonctionnalités.
Premièrement, le lancement du système mène
à afficher son interface d'accueil suivante, permettant à un
utilisateur de se connecter comme un client ou un administrateur.
VII.1. Mode client
L'utilisateur suite à sa connexion comme client, le
système lui affiche une autre fenêtre lui permettant d'entrer sa
requête :
Pendant la recherche de la solution, le système lui
affiche la barre de progression suivante. Cette fenêtre lui permet aussi
d'annuler la demande déjà effectuée :
S'il décide d'annuler la demande, le système
après l'annulation lui affiche un message pour l'informer :
Si la recherche de la solution termine avec un plan solution
trouvée, le système lui affiche le résultat sous forme
d'un plan :
Si la recherche de la solution termine avec un échec, le
système lui affiche un message lui informent :
VII.2. Mode administrateur
Lorsque l'utilisateur se connecte comme administrateur, le
système lui affiche une fenêtre pour entrer son mot de passe :
Si le mot de passe ne convient pas, le système lui demande
de le réentrer. S'il convient, il lui affiche le menu du système.
Depuis ce point la suite nous n'intéresse pas.
Conclusion
Ce chapitre sert à réaliser notre système
conçu dans le chapitre précédent, permettant d'illustrer
l'efficacité de la planification multi-agents dans la résolution
du problème de composition de service web.
Nous avons présentées dans le début du
chapitre la façon de création des descriptions OWL-S choisis.
Cette étape est effectuée en utilisant un éditeur
spécifique appelé OWL-S Editor. Dans la deuxième et la
troisième étapes, nous avons implémentées en
utilisant le langage Java et l'IDE Eclipse, notre traducteur OWL-S vers
opérateurs STRIPS respectivement puis nous avons
implémentées les agents de notre système dans la
plateforme JADE. Des interfaces graphiques facilitant l'exploitation de notre
système sont décrites à la fin du chapitre.
Ces dernières années, le concept de service web a
connu un intérêt croissant dans le monde. Il permet
d'échanger des données et des services à distance via le
net.
Dans certains cas, un seul service peut ne pas suffire pour
répondre aux besoins des clients. Une solution à ce
problème consiste à faire composer un nombre de services
existants. Le résultat de cette composition est un enchaînement de
services satisfaisant le besoin du client.
La composition de services web fait aujourd'hui un domaine de
recherche très actif. Les approches que les chercheurs ont prises pour
composer des services web varient particulièrement selon deux courants
de recherche principaux : la composition dite « statique », dont les
composants sont organisés à priori dans des
procédés réutilisables et la composition dite «
dynamique » dont les services web à composer sont choisis au moment
de l'exécution, et en tenant en compte les préférences des
clients.
Des études de comparaisons entre les techniques des
services web et celles du domaine de l'intelligence artificielle ont
montées l'efficacité de l'exploitation de ces dernières et
surtout de la planification et des systèmes multi-agents dans le
processus de composition dynamique.
Dans ce travail, après que nous avons
présentées les différents aspects liés aux ces deux
domaines : de services web d'une part et de la planification multi-agents
d'autre part, nous avons proposées une approche s'appuyant sur
l'utilisation de la planification multi-agents pour élaborer le
processus de composition. Dans notre modèle le problème de
composition est transformé à un problème de planification.
Le domaine de planification est répartit entre un ensemble d'agents
représentants des services ; chacun construit sa partie du domaine
depuis la description sémantique en OWL-S du service qu'il
représente. Puis ces services participent tous dans un processus de
planification suivi par un agent médiateur constituant la plus
importante entité dans le système. En plus de ces agents un agent
utilisateur est employé dans le système permettant ainsi de
récupérer la requête du client et de l'envoyer à
l'agent médiateur.
Le modèle de la composition dynamique de services web par
la planification multi-agents présente un nombre de points forts, citons
parmi :
- Le premier de ces avantages est que la composition est
dynamique ; le système n'est pas contraint par une composition
définie à priori pour répondre à la requête
du client, il essaye à la résoudre en exploitant au maximum les
compétences des services existants.
- Le deuxième point est l'utilisation des agents, ces
derniers permettent de respecter la nature distribuée des services
web.
- Un autre point fort est l'exploitation des descriptions
sémantiques des services, qui permettent de les décrire de
façon plus riche et plus adaptable à l'exploitation dans la
composition.
En fin, le modèle proposé ne présente pas
un modèle complet ou optimal, il ne sert qu'à illustrer
l'efficacité de la planification et des systèmes multi-agents
dans l'élaboration de la composition de services web. Vu la
complexité de la composition, la richesse du langage OWL-S et des
concepts de la planification et des SMA, plusieurs extensions peuvent
être envisagées à ce travail et notamment de prendre en
compte dans les descriptions OWL-S des modèle de processus des services
les notions de processus composites et abstraits ainsi que d'utiliser des
techniques de planifications plus efficace que celle utilisée.
Bibliographie
[1] GUITTON Julien. Planification multi-agent pour la
composition dynamique de services Web,Juin2006,Source<
http://www.cert.fr/dcsd/THESES/jguitton/papers/guitton-master06.pdf>.
[2] ALKAMARI aniss. Composition de services web par
appariement de signatures, Janvier 2008, Source <
http://www.archipel.uqam.ca/998/1/M10209.pdf>.
[3] N. TEMGLIT, H. ALIANE, M.AHMED NACER. Un
modèle de composition des services web sémantiques, Source
<
http://www-direction.inria.fr/international/arima/011/pdf/
version%20definitive-mod+%%BFle%20de%20composition-arima.pdf>
[4] JINGHAI Rao. Semantic Web Service Composition via
Logic-based Program Synthesis, 2004, Source <
http://www.cs.cmu.edu/~jinghai/papers/thesis.pdf>.
[5] LOPEZ-VELASCO Céline. Sélection et
composition de services Web pour la génération d'applications
adaptées au contexte d'utilisation, novembre 2008, Source<
http://tel.archives-ouvertes.fr/docs/00/38/89/91/PDF/These_CLopez-Velasco.pdf
>.
[6] SANDEEP KUMAR, R. B.MISHRA. Multi-Agent Based Semantic
Web Service Composition Models, 2008.
[7] JARRAS Imed, CHAIB-DRAA Brahim. Aperçu sur les
systèmes multiagents, Juillet 2002, Source <
http://www.cirano.qc.ca/pdf/publication/2002s-67.pdf
>.
[8] Mathijs de Weerdt, Adriaan ter Mors, Cees Witteveen.
Multi-agent Planning An introduction to planning and
coordination,Source<
http://www.st.ewi.tudelft.nl/~mathijs/
publications/easss05.pdf >.
[9] REGNIER Pierre. Planification: historique, principes,
problèmes et méthodes (de GPS à ABTWEAK),Source
<
http://www.irit.fr/PERSONNEL/RPDMP/regnier/regnier_old/PLA NIF
/pdf/Rapport90-22.pdf >.
[10] Malik Ghallab. Planification et
décision,2001, Source <
ftp://ftp.laas.fr/pub/ria/malik/arti
cles /hermes01.pdf >.
[11] LOUKIL Zied et al. Les ressources et la planification
temporelle.
[12] PLANNING, Source <
http://aima.cs.berkeley.edu/newchap11.pdf
>.
[13] Anne Nicolle, Les systèmes multi-agents,
2002, Source < http://users.info.unicaen.fr/ ~anne/HTML/sma.pdf
>.
[14] Agents intelligents cour WEB interactif, 2002,
Source <
http://turing.cs.pub.ro/auf2
/html /chapters/chapters.html >.
[15] Agents et systèmes multiagents, Source <
http://www.damas.ift.ulaval.ca/~coursMAS
/ComplementsH10/Agents-SMA.pdf >.
[16] José Ghislain Quenum, Une synthèse
d'AUML, Sep. 2003, Source <
http://wwwpoleia.lip6.fr/~elfallah/liens/AUML.pdf
>.
[17] Bernhard Bauer, Jörg P. Müller, James Odell.
Agent UML: A Formalism for Specifying Multiagent Interaction.
[18] ZERFAOUI Asma, SALMI Rabia. PlanificationMulti Agents
d'un Emploi du Temps Universitaire, juin 2009.
[19] DJAAFAR lakhdar, MENACEUR saddek. Réalisation
d'une application répartie basée sur l'intégration des
services web et des agents intelligents, juin 2009.
[20] Malik Ghallab et al. PDDL - The Planning Domain
Definition Language.Version 1.2, October1998,Source<
http://homepages.inf.ed.ac.uk/mfourman/tools/propplan
/pddl.pdf >
[21] Nerea Arenaza. Composition semi-automatique de Services
Web, Février 2006, Source <
http://lawww.epfl.ch/webdav/site/la/users/139973/public/repports/Rapport-Arenaza.pdf>.
Annexes
Annexe A : Outils pour la conception du
système
Dans cette annexe nous présentons brièvement les
différents outils exploités dans la conception de notre
système, ce sont trois langages UML, AUML et FIPA-ACL :
1. UML - Unified Modeling Language
UML est une notation permettant de modéliser un
problème de façon standard. Ce langage est né de la fusion
de plusieurs méthodes existant auparavant, et est devenu
désormais la référence en terme de modélisation
objet. Le grand succès de UML peut s'expliquer par plusieurs raisons.
Ces sont, par exemple, la simplicité, l'expressivité, une large
applicabilité et l'adaptabilité. Une autre raison très
pratique est l'existence d'une large variété d'outils, soutenant
la conception et la construction des modèles.
Afin de construire ces modèles, UML 2.0 fournit ainsi
treize types de diagrammes qui se répartissent en deux grands groupes
:
Diagrammes structurels ou diagrammes statiques (UML
Structure)
- diagramme de classes (Class diagram)
- diagramme d'objets (Object diagram)
- diagramme de composants (Component diagram)
- diagramme de déploiement (Deployment
diagram)
- diagramme de paquetages (Package diagram)
- diagramme de structures composites (Composite structure
diagram)
Diagrammes comportementaux ou diagrammes dynamiques
(UML Behavior) - diagramme de cas d'utilisation (Use case
diagram)
- diagramme d'activités (Activity diagram)
- diagramme d'états-transitions (State machine
diagram)
- Diagrammes d'interaction (Interaction diagram)
- diagramme de séquence (Sequence diagram)
- diagramme de communication (Communication diagram)
- diagramme global d'interaction (Interaction overview
diagram) - diagramme de temps (Timing diagram)
Ces diagrammes, d'une utilité variable selon les cas,
ne sont pas nécessairement tous produits à l'occasion d'une
modélisation. Les plus utiles pour la maîtrise d'ouvrage sont les
diagrammes d'activités, de cas d'utilisation, de classes, d'objets, de
séquence et d'états-transitions.
2. AUML - Agents Unified Modeling Language
UML ne fournit pas une base suffisante pour la
modélisation des agents et des systèmes multi-agent [17].
Fondamentalement, cela est dû à deux raisons: premièrement,
par rapport aux objets, les agents sont actifs parce qu'ils peuvent prendre
l'initiative et avoir le contrôle de son savoir et comment traiter des
demandes externes. Deuxièmement, les agents n'agissent pas
isolément, mais par une coopération ou coordination avec d'autres
agents.
Cependant, même s'il y a des différences
fondamentales entre les agents et les objet, un agent peut se définir
comme un objet qui peut dire "allez" (autonomie flexible comme la
capacité d'engager une action sans demande externe) et
<<non>> (autonomie flexible comme la possibilité de refuser
ou de modifier une demande externe). C'est dans cette vue que la FIPA
(Foundations of Intelligent Physical Agents) et le AWG (Agent Work
Group) de l'OMG (Object Management Group) ont recommandés
et explorés l'utilisation d'un ensemble d'extensions à UML pour
permettre la modélisation des systèmes multi-agents. C'est
l'AUML.
AUML fournit des mécanismes pour modéliser
principalement : les classes d'agent, les interactions entre agents et les
traitements internes des agents :
2.1. Les diagrammes de classes d'agent :
<< Une classe d'agent représente un agent
ou un groupe d'agents pouvant jouer un rôle ou
avoir un comportement déterminé >> [16].
Une classe d'agent comporte :
Description de la classe d'agent et des rôles :
un rôle d'agent est un ensemble d'agents ayant certaines
propriétés, interfaces et services ou des comportements
précis.
Description de l'état interne :
définition de variables d'instances qui reflètent
l'état de l'agent (types utilisés dans les objets + types pour
décrire les expressions logiques, ex: les intentions, les buts,
...etc.).
Description des actions, des méthodes et des
services fournis : une action est décrite par
son type (réactive ou pro-active), par sa signature (visibilité
(public, private, ...) + nom + liste de paramètres) et par une
sémantique (pré + post conditions + effets + invariants). Une
méthode est définie comme en UML avec
éventuellement des pré, post conditions et effet. Cette partie
comporte aussi une description informelle des services
fournis.
Messages échangés : description
des messages émis et reçus par l'agent.
2.2. Modélisation des interactions entre agents
Les échanges entre agents peuvent être
modélisés par des diagrammes de séquences, de
collaboration, d'activités ou d'états-transitions.
Diagrammes de séquences : ce sont une
extension des diagrammes de séquences d'UML. Connus aussi par diagrammes
de protocoles d'interactions.
Les messages échangés ne sont plus des noms de
méthodes mais des actes de communication. Ils sont
caractérisés aussi par l'utilisation des threads
d'interaction concurrents suivants :
- Emissions concurrentes : connecteur AND (a);
- 0 ou plusieurs émissions à la fois : connecteur
OR (b);
- 1 seule émission parmi plusieurs candidates : connecteur
XOR (c).
Diagrammes de collaboration : se construisent
comme dans les modèles objets, ce sont similaires aux diagrammes de
séquences.
Diagrammes d'activités : décrivent
les opérations entre agents et les événements qui les
déclenchent.
Diagramme d'états-transitions :
décrit les changements d'état lors des échanges
entre agents. 2.3. Modélisation des traitements internes des
agents
Les traitements internes des agents et leurs comportements
peuvent être modélisés par des diagrammes
d'activités ou d'états-transitions.
3. Le langage FIPA-ACL 3.1. Introduction
Dans des systèmes multi-agents, les interactions entre
agents font un concept fondamental. Pour assurer ces interactions les agents
ont besoin de communiquer dans un langage compréhensible par tous les
autres.
La compréhension du sens des symboles, ou à quoi
les symboles font référence, demande un standard rigoureux de la
sémantique et de la pragmatique. De plus il est nécessaire que
les agents sachent bien utiliser le vocabulaire pour atteindre leurs buts,
éviter les conflits, coopérer pour exécuter leurs
tâches et modifier l'état mental d'un autre agent [19].
- Notion d'actes de langage : les philosophes
du langage ont développé au cours des 25 dernières
années la théorie des actes de discours qui considère que
« dire quelque chose c'est en quelque sorte agir » [7]. Les paroles
sont interprétées comme des actions appelées actes de
discours. Cette théorie fournit un cadre qui identifie des types d'actes
de discours primitifs et permet de dériver de ces types primitifs
l'interprétation sous forme logique de n'importe quel verbe du langage
qui exprime un acte de discours quelconque. En effet, Les types de messages des
langages de communication entre agents sont appelés des actes de
langage.
3.2. Le langage ACL
Le langage ACL de la FIPA est plus récent et fondé
sur la théorie des actes de langage. Il a bénéficié
grandement des résultats de recherche de KQML.
3.2.1. La syntaxe du message ACL : la syntaxe du
message est assez similaire à celle de KQML. La figure ci-après
résume sur un exemple les éléments principaux du message
ACL.
Message ACL
Type d'acte
|
(request
:sender (agent-identifier :name i)
:receiver (set (agent-identifier
:name j)) :content
((action (agent-identifier :name j) (deliver box017 (loc 12
19)))) :protocol fipa-request
:language FIPA-SL
:reply-with order567)
|
Paramètres du message
|
Figure A.2 : Exemple d'un message ACL
Essayons maintenant à définir en bref chaque
élément du message dans le tableau suivant :
Elément du message
|
Définition
|
Performatif(request)
|
Type d'acte de communication : représente la valeur
illocutoire d'un acte de langage.
|
sender
|
l'émetteur du message
|
receiver
|
le destinataire du message
|
content
|
le contenu du message
(l'information transportée par la performative)
|
protocol
|
contrôle la conversation
|
language
|
le langage dans lequel le contenu est représenté
|
reply-with
|
identificateur unique du message, en vue d'une
référence ultérieure
|
Tableau A.1 : Eléments d'un message
FIPA-ACL.
· Le langage utilisé dans le contenu du
message : le langage de contenu se réfère à la
valeur locutoire d'un message envoyé d'un agent à un autre,
c'est-à-dire au contenu "exprimé" de ce message, et à la
façon de présenter ce contenu. Un message FIPA-ACL supporte par
défaut les langages FIPA-SL, KIF (Knowledge Interchange
Format), XML et RDF ; FIPA-SL ayant été
spécifiquement défini par la FIPA [19].
· Le protocole utilisé : un
modèle structurant uniquement le format d'un message ne suffit pas en
lui même pour pouvoir structurer des conversations entre agents, ce qui
est nécessaire pour conserver la cohérence des échanges
successifs. Nous avons donc besoin de la notion de protocole pour supporter des
conversations valides, ce qui permet aux actes de langage de prendre tout leur
sens. Un tel protocole permet d'inclure le comportement d'un agent dans un
contexte particulier, auquel il doit se conformer en envoyant des messages
cohérents grâce à l'utilisation d'actes de langage
adaptés au discours.
· Actes communicatifs (performatifs) du langage
ACL : FIPA-ACL possède 21 actes communicatifs, exprimés
par des performative, qui peuvent être groupés selon leur
fonctionnalité de la façon suivante [19]:
- Passage d'informations: inform*, inform-if(macro act),
inform-ref(macro act), confirm*, disconfirm* ;
- Réquisition d'information : query-if, query-ref,
subscribe ;
- Négociation : accept-proposal, cfp, propose,
reject-proposal ;
- Distribution de tâches : request*, request-when,
request-whenever, agree, cancel, refuse ; - Manipulation des erreurs : failure,
not-understood.
Ces actes communicatifs peuvent être primitifs
ou composés [19]. Les actes communicatifs primitifs sont
définis de façon atomique, c'est-à-dire qu'ils ne sont pas
définis à partir d'autres actes (dans la classification ci-dessus
ils sont suivis d'une étoile "*"). En revanche, les actes communicatifs
composés sont définis à partir d'autres actes. Le tableau
suivant représente ces différents actes ainsi que leurs
sémantiques :
Performatif
|
Syntaxe
|
Sens
|
Accept Proposal
|
accept-proposal
|
L'émetteur accepte la proposition d'exécuter
certaines actions présentées à l'avance
|
Agree
|
agree
|
L'émetteur accepte d'exécuter certaines actions
|
Cancel
|
cancel
|
L'action de l'annulation d'une certaine action
déjà demandée qui a portée dans le temps
(c-à-d: n'est pas instantanée).
|
Call for Proposal
|
cfp
|
L'action de l'appel de propositions pour exécuter une
action donnée
|
Confirm
|
confirm
|
L'émetteur informe le destinataire qu'une
proposition donnée est vraie
|
Disconfirm
|
disconfirm
|
L'émetteur informe le destinataire qu'une
proposition donnée est fausse
|
Failure
|
failure
|
L'action de raconter un autre agent que l'action a
été essayée, mais a échouée
|
Inform
|
inform
|
L'émetteur informe le récepteur des informations de
l'émetteur connaît.
|
Inform If
|
inform-if
|
L'émetteur demande au destinataire une
confirmation ou une non-confirmation d'une certaine
proposition
|
Inform Ref
|
inform-ref
|
L'émetteur demande au destinataire un objet qui correspond
à une description envoyée.
|
Not Understood
|
not-understood
|
L'émetteur informe le destinataire d'un non
compréhension d'une action effectuée par le destinataire
|
Propose
|
propose
|
L'émetteur propose d'exécuter certaines actions
conditionnées à certaines préconditions données
|
Proxy
|
proxy
|
L'émetteur demande une transmission d'un
message à des agents dont la description est
donnée
|
Query If
|
query-if
|
L'action de demander à un autre agent si une proposition
donnée est vraie ou non
|
Query Ref
|
query-ref
|
l'émetteur demande du destinataire un objet
référencé par une expression
|
Refuse
|
refuse
|
L'émetteur refuse d'exécuter certaines actions
parce qu'il ne peut pas les exécuter
|
Reject Proposal
|
reject-proposal
|
L'action de rejet d'une proposition d'effectuer une action lors
d'une négociation
|
Request
|
request
|
L'émetteur demande du destinataire d'exécuter une
certaine action
|
Request When
|
request-when
|
L'émetteur veut que le destinataire effectue une action
lorsque certaine proposition donnée soit vraie
|
Request Whenever
|
request-whenever
|
L'émetteur veut que le destinataire effectue une action
dès que quelque proposition devient vraie et ensuite, chaque fois que la
proposition devient vraie à nouveau
|
Subscribe
|
subscribe
|
L'acte de demander une intention persistante d'informer
l'émetteur de la valeur d'une référence, et de le notifier
à chaque fois que l'objet référencé se change
|
Tableau A.2 : Actes communicatifs du langage
ACL
Annexe B : Outils pour la réalisation du
système
Dans cette annexe nous présentons brièvement les
différents outils exploités dans la réalisation de notre
système : l'EDI Eclipse, l'éditeur OWL-S, la plateforme JADE et
l'EDI Jbuilder :
1. Eclipse
Eclipse est un environnement de développement
intégré (IDE(1)) libre extensible, universel et
polyvalent, dont le but est de fournir une plate-forme modulaire pour permettre
de réaliser des développements informatiques.
Eclipse IDE est principalement écrit en
Java (à l'aide de la bibliothèque graphique SWT,
d'IBM), et ce langage, grâce à des bibliothèques
spécifiques, est également utilisé pour écrire des
extensions.
La spécificité d'Eclipse IDE vient du fait de
son architecture totalement développée autour de la notion de
plugin(2) : d'ailleurs, hormis le noyau de la
plate-forme nommé « Runtime », tout le reste de la plate-forme
est développé sous la forme de plug-ins. Ce concept permet de
fournir un mécanisme pour l'extension de la plate-forme et ainsi fournir
la possibilité à des tiers de développer des
fonctionnalités qui ne sont pas fournies en standard par Eclipse.
Eclipse a passé depuis son développement par
plusieurs versions depuis la première version 1.0 en 2001 et
jusqu'aujourd'hui. Dans notre travail nous avons utilisées la version
3.5.2.
2. OWL-S IDE
La génération des services web sémantiques
est un processus complexe et sujet aux erreurs. Peu d'outils qui la permet.
Dans cette section nous présentons en bref OWL-S IDE.
OWL-S IDE est un environnement de développement
intégré implémenté comme un Eclipse
plugin permettant de soutenir le développeur dans le processus
entier de génération des services web sémantique depuis la
génération du code Java, à la compilation des descriptions
OWL-S au déploiement et à l'enregistrement avec UDDI.
2.1. OWL-S Editor
L'éditeur permet de créer de nouveaux fichiers
OWL-S, soit à partir de zéro, soit à partir d'un WSDL
existant ou d'un code Java.
L'éditeur OWL-S fournit deux modes pour éditer
des description OWL-S : l'édition basée sur le graphique et
l'édition basée sur le texte (format XML). L'onglet au bas de
l'éditeur peut être utilisé pour basculer entre ces deux
modes.
(1) IDE : un programme regroupant un ensemble
d'outils pour le développement de logiciels. En règle
générale, un EDI regroupe un éditeur de
texte, un compilateur, des outils automatiques de fabrication,
et souvent un débogueur.
(2) plugin : un logiciel qui complète un
logiciel hôte pour lui apporter de nouvelles fonctionnalités.
Generation des descriptions OWL-S
OWL-S IDE permet de générer des descriptions OWL-S
:
· à partir d'un fichier WSDL existant ;
· à partir d'un code Java ;
· à partir de zéro (nouvelles
descriptions). 2.1.2. Edition des descriptions OWL-S
générées
Les descriptions OWL-S générées par
l'une des manières précédentes peuvent être
complétées en utilisant l'OWL-S Editor d'une manière
graphique ou textuelle grâce au Profile Editor,
au Process Editor, au Grounding Editor et
au Service Editor.
3. JADE - Java Agent DEvelopment Framework
La description de la plateforme JADE présentée
dans cette section est extraite de [19] et [18]. 3.1.
Présentation générale
JADE est une plate-forme multi-agents(1) crée par le
laboratoire TILAB. Entièrement implémentée en JAVA et
permet le développement et l'exécution de systèmes
multi-agents conformes aux normes de la FIPA.
Un agent selon JADE est conforme au standard FIPA,
possède un cycle de vie, possède un ou plusieurs comportements
(Behaviours), communique avec des messages de type Agent Communication
Language (ACL) et rend des services. Un agent est identifié de
manière globale par un nom unique (l'AgentIdentifier ou
AID).
JADE contient ainsi :
Un environnement d'exécution :
l'environnement ou les agents peuvent vivre. Il doit être
activé pour pouvoir lancer les agents ;
Une librairie de classes : que les
développeurs utilisent pour écrire leurs agents ;
Une suite d'outils graphiques : qui facilitent
la gestion et la supervision de la plateforme des agents.
3.2. Les agents de base de JADE
Pour supporter la tâche difficile du débogage des
applications multi-agents, la plateforme possède l'ensemble d'agents
prédéfinis suivant :
Remote Managment Agent « RMA » : le
RMA permet de contrôler le cycle de vie de la plate-forme et tous les
agents la composant. Avec son interface, il est possible de créer,
supprimer et de migrer
des agents. L'agent RMA permet également la
création et la suppression des conteneurs et la fermeture de la
plateforme. Il peut être lancé à partir de la ligne de
commande Java jade.Boot -gui.
Agent Management System « AMS >> :
est un agent chargé de la supervision et le contrôle de
l'accès et l'usage de la plateforme. Chaque agent doit s'inscrire
auprès de l'AMS pour obtenir un AID valide.
Agent Communication Canal « ACC >> :
c'est le composant logiciel qui contrôle tous les
échanges de messages dans la plateforme, incluant également les
messages de/vers des plateformes distantes.
Directory Facilitor « DF >> :
enregistre les descriptions et les services des agents et maintient
des pages jaunes de services. Grâce à ce service, un agent peut
connaître les agents capables de lui fournir les services qu'il requiert
pour atteindre son but. L'interface du DF peut être lancée
à partir du menu du RMA.
Dummy Agent « DA >> : l'outil
DummyAgent permet aux utilisateurs d'interagir avec les agents JADE
d'une façon particulière. L'interface permet la composition et
l'envoi de messages ACL et maintient une liste de messages ACL envoyés
et reçus. Cette liste peut être examinée par l'utilisateur
et chaque message peut être vu en détail ou même
édité. Plus encore, le message peut être sauvegardé
sur le disque et renvoyé plus tard.
Sniffer Agent « SA >> : 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. L'utilisateur peut
voir et enregistrer tous les messages, pour éventuellement les analyser
plus tard. L'agent peut être lancé du menu du RMA ou de la ligne
de commande suivant Java jade.Boot sniffer :
jade.tools.sniffer.sniffer.
Introspector Agent : Cet agent permet de
gérer et de contrôler le cycle de vie d'un agent
s'exécutant et de la file de ses messages envoyés et
reçus.
3.3. La bibliothèque du JADE
JADE est composé des principaux packages suivants :
Jade.core : implante le noyau du
système. Il possède la classe << Agent >>
qui doit être étendue par les applications des programmeurs et une
classe << behaviour >>.
Jade.lang : contient un sous-package pour
chaque langage de communication utilisé par JADE et en particulier
jade.lang.acl.
Jade.content : contient un ensemble de classes
qui permettent de définir des ontologies.
Jade.domain : contient toutes les classes Java
qui représentent les entités Agent Management définies par
FIPA en particulier AMS et DF.
Jade.gui : contient un ensemble
générique de classes utiles pour la création de GUIs
pour l'affichage, l'édition des messages ACL, et de la description
des agents.
Jade.proto : contient des classes qui
modélisent les protocoles standards d'interaction. Les classes
permettent aussi aux programmeurs d'ajouter d'autres protocoles.
Jade.tools : contient certains outils qui
facilitent l'administration de la plate forme et le développement
d'applications.
3.5. Communication entre agents JADE
Pour que plusieurs agents JADE arrivent à collaborer,
ils doivent s'échanger des messages. Chaque agent JADE possède
une sorte de boite aux lettres qui contient les messages qui lui sont
envoyés par les autres agents. Ces boites aux lettres sont sous forme
d'une liste qui contient les messages selon l'ordre chronologique de leur
arrivée.
Les agents JADE utilisent des messages conformes aux
spécifications de la FIPA (FIPAACL). Les messages JADE
sont des instances de la classe ACLMessage du package jade.lang.acl. Ces
messages sont composés en général de :
· L'émetteur du message : un champ rempli
automatiquement lors de l'envoi d'un message.
· L'ensemble des récepteurs du message : un message
peut être envoyé à plusieurs agents
simultanément.
· L'acte de communication : qui représente le but de
l'envoi du message en cours (informer l'agent récepteur, appel d'offre,
réponse à une requête, ...).
· Le contenu du message.
· Un ensemble de champs facultatifs, comme la langue
utilisée, l'ontologie, le timeOut, l'adresse de réponse, ...
Un agent JADE peut ainsi envoyer, recevoir, attendre un message
d'un autre agent ou encore choisir un message dans sa boite aux lettres.
4. JBuilder IDE
JBuilder est un environnement de
développement intégré pour Java, édité par
Borland. L'application est elle-même développée en grande
partie en Java.
JBuilder apporte certaines fonctionnalités
spécifiques, disposant notamment d'une JVM propre, permettant notamment
l'exécution de code Java pas à pas.
Il est très visuel et permet de développer
rapidement tous types d'applications Java, il permet le développement
d'application EJB (Enterprise Java Beans), XML, service web et bases de
données.
|