chopinaudRJCIA05 PDF
chopinaudRJCIA05 PDF
chopinaudRJCIA05 PDF
Caroline Chopinaud1 ,2
1
Thales Systèmes Aéroportés - 1 boulevard Jean Moulin 78852 Elancourt
2
Laboratoire Informatique de Paris 6 - 8 rue du Capitaine Scott 75015 Paris
caroline.chopinaud@fr.thalesgroup.com
1 Introduction
L’autonomie est une caractéristique essentielle des agents cognitifs. Nous la
verrons comme la capacité d’un agent à prendre seul ses décisions 1 . Du point
de vue du programmeur cela signifie que la mise en place d’un agent nécessite
de prendre en compte le fait que le comportement des autres agents, s’ils sont
autonomes, ne peut être prédit avec certitude. Il faut donc programmer son agent
en ayant à l’esprit que les autres peuvent ne pas réagir de la façon attendue.
Aussi, une telle vision pose-t-elle le problème de la confiance que l’on peut avoir
dans le fonctionnement de son système. Dans les milieux industriels concernés
1 Sans qu’une entité extérieure prenne part à son processus de choix (Barber & Martin,
1999)
RJCIA 2005
par des applications critiques, telles que les systèmes embarqués ou les systèmes
temps réels, la mise en oeuvre de tel système risque de soulever des objections
en raison de cette imprévisibilité. Il est donc indispensable de pouvoir garantir
qu’un SMA et les agents le constituant respectent des exigences de comportement
préétablies, importantes pour le bon fonctionnement de l’application, tout en
préservant au mieux leur autonomie.
L’objectif de nos travaux est d’assurer qu’un SMA a un comportement en ac-
cord avec ces exigences. Une première approche serait d’utiliser des méthodes
classiques de validation des systèmes que l’on appliqueraient aux systèmes mul-
tiagents, telles que les techniques de tests, de model-checking et de démonstration
automatique. Mais, outre le fait que ces techniques ne sont jamais en mesure de
détecter toutes les erreurs possibles d’un système (Schnoebelen, 1999), elles ne
sont pas forcément adaptées à la validation des systèmes multiagents dans leur
globalité. Bien que ces techniques soient indispensables à la validation d’un SMA,
elles ne sont pas suffisantes car elles laissent la possibilité d’apparition d’erreurs
une fois le système mis en condition réelle d’exécution, du fait de leur applica-
tion sur un modèle abstrait du système et de son environnement. Pour détecter
ces erreurs il est intéressant d’effectuer une vérification dynamique du compor-
tement du système en complément des méthodes classiques. Cette vérification 2
consiste en la surveillance et la régulation des comportements incohérents dans
le but d’empêcher que le système échoue.
Nous pensons qu’il est essentiel de préserver l’autonomie des agents sous
contrôle. L’autonomie étant une caractéristique importante des agents cogni-
tifs, il n’est pas souhaitable de la limiter. En effet, si le contrôle tend à diminuer
cette particularité, il est fort probable que les agents soient d’autant moins en
mesure de réagir à des situations compliquées et incertaines. Pour préserver l’au-
tonomie des agents, la surveillance et la régulation de leur comportement seront
effectuées par les agents eux-mêmes.
Bien qu’il soit possible pour un programmeur d’inclure le code de contrôle
nécessaire à la surveillance et à la détection d’erreur au sein même des agents,
cela peut s’avérer complexe. L’instrumentation manuelle du code d’un système,
pour y insérer des détecteurs d’évènements particuliers, est difficile et enclin
à l’erreur (Mansouri-Samami & Sloman, 1992). De plus, lorsqu’une propriété
à valider concerne plusieurs agents, il apparaı̂t comme impossible de trouver
la cause et de résoudre le problème au moyen d’une implémentation simple et
claire. Aussi devient-il difficile de faire évoluer le comportement des agents mais
également le contrôle auquel ils sont soumis. En se basant sur les instrumenta-
tions automatiques pour le monitoring de systèmes distribués, il est envisageable
d’automatiser l’instrumentation des programmes de comportement des agents
pour mettre en place le contrôle, et ainsi faciliter le travail du programmeur.
Nous proposons un générateur qui, à partir d’une description des exigences as-
sociées aux agents et du code de leur comportement, va créer des agents capables
d’auto-contrôle. Dans une première partie nous allons présenter les principes de
notre approche, pour ensuite nous intéresser à l’architecture de notre générateur.
2 Nous emploierons par la suite le terme de contrôle pour désigner cette vérification
Contrôle d’agent
2 Vérification de systèmes
Notre objectif étant de garantir qu’un système aura un comportement en ac-
cord avec ce que l’on peut attendre de lui, il est intéressant d’introduire avant
tout quelques-unes des techniques de vérification de logiciel afin de mettre en
avant ce qui semble se rapprocher le plus de ce que nous souhaitons appliquer
aux agents.
Si une loi n’est pas respectée, les agents lancent un comportement de secours à
partir d’informations de réparation.
4 Un Exemple
Dans le but d’illustrer notre approche et le fonctionnement de notre générateur
nous allons introduire un exemple.
n’est pas respectée l’utilisateur précise que l’envoi du message incriminé doit être
annulé. L’utilisateur peut décider de poser la loi suivante :
L1 : “Un agent de type A ne doit pas envoyer des messages, à un agent de type B, à
une cadence supérieur à 1 Hz.”
Enfin le client veut pouvoir vérifier que certains protocoles qu’il a définis pour
le système sont effectivement suivis. Par exemple l’agent C peut s’attendre à
recevoir les messages suivants, dans cet ordre : l’identifiant du problème, le temps
maximum d’attente du résultat, les données d’un problème. Si ce protocole n’est
pas suivi par l’expéditeur, il se peut que l’agent C ne puisse pas résoudre le
problème ou échoue. Dans le cas où le protocole n’est pas respecté une solution
est de prévenir l’agent expéditeur de l’erreur. Pour détecter l’apparition de ce
problème une loi serait :
L3 : Un agent Solveur doit recevoir le message de durée puis le message d’identification
puis les données du problème.
5.1 L’ontologie
Nous avons vu que les lois devaient porter sur des concepts de haut niveau
permettant de décrire les spécificités des agents et du système. Nous avons
donc cherché à mettre en place une ontologie de base représentative des modèles
connus pouvant être utilisés pour construire des agents. Une ontologie d’agent
est proposée par D.N.Lam et K.S.Barber (Lam & Barber, 2004) dans le cadre
de la vérification d’agent. Elle contient les concepts de but, croyance, intention,
action, événement, message. Nous reprenons une partie de cette ontologie (but,
action, message) et nous ajoutons d’autres concepts qui nous semble plus ca-
ractéristiques des agents vis-à-vis de l’étude que nous avons faites des modèles
(objet, connaissance, plan, création d’agent, envoi de message, réception de mes-
sage, migration). Enfin comme nous nous plaçons au niveau du SMA, nous ajou-
tons le concept d’agent.
Chaque concept a un ensemble d’attributs et de méthodes 3 permettant d’ex-
primer des tests sur les concepts au sein des lois. L’ontologie (Fig.3) peut être
étendue suivant les caractéristiques des modèles utilisés et de l’application.
Les concepts de base que l’on retrouve dans le modèle de notre exemple
sont ReceptionMessage, EnvoiMessage, CreationAgent, Action, Agent. Ceux
étendus des concepts de base et représentatifs du modèle sont : Croyance,
qui est une Connaissance, Etat qui est une Connaissance sur soi-même et
MessageRecu qui est un Message. Enfin, celui spécifique à l’application est par
exemple : Dispo qui est un Etat.
c est vrai. have(a, d) : l’agent a est dans un état tel que d est vrai
Contrôle d’agent
5.5 Le générateur
Pour créer des agents capables de détecter la transgression des lois au sein de
leur propre comportement, le générateur utilise des techniques de tissage pour
mettre en place des points de contrôle. Le tissage est une part fondamentale
de la programmation par aspect, qui consiste à injecter dans un programme
un certain code à un endroit donné. La programmation par aspect utilise le
tissage pour injecter des aspects dans les classes d’une application, au niveau
des méthodes, de façon à modifier l’exécution finale des classes après compila-
tion. La programmation par aspect, grâce à AspectC++, a été montrée comme
particulièrement intéressante pour intégrer du monitoring dans une application
(Mahrenholz et al., 2002). Nous reprenons cette idée de tissage pour effectuer
une instrumentation automatique des lois et de leur analyse à l’intérieur du
programme représentant le comportement d’un agent.
Le générateur va extraire des lois, ce qu’il reconnaı̂t comme étant des concepts
faisant partie de l’ontologie associées au SMA. Pour chaque concept il récupère
le lien au code de l’agent et va déduire des mots clés du langage de description
des lois, le code à insérer au sein de l’agent pour permettre la surveillance. Par
exemple si on reprend la loi L1 :
• I(do(a,ev2)) : tissage avant l’appel à ev2 d’un point de blocage du comportement
pour tester si la loi est activée et dans ce cas si elle est respectée.
• begin{ do(a,ev1)) } : tissage d’un point d’activation de la loi juste après l’appel à
ev1.
• end{ begin + 1 } : mise en route d’un compteur à l’activation de la loi pour 1s. Au
bout de 1s la loi est désactivée.
• (ev1.dest).type = typeB, (ev2.dest).type = typeB : tissage d’un test de validité
d’application de la loi (d’activation au niveau de ev1 et de respect au niveau de ev2).
• a.type = typeA : tissage des lois uniquement dans les agents de type A.
• block{ do(a,ev2) } : tissage au niveau de ev2 d’un “saut” de l’appel à ev2.
6 Travaux similaires
Dans les travaux de M.S.Feather (Feather et al., 1998) il est également question
de comparer l’exécution d’un SMA à ses spécifications. Dans cette approche, un
unique monitor se charge de récupérer les événements envoyés par les agents et un
réconciliateur va, en cas de violation, non pas remettre le système dans un état tel
qu’il respecterait ses spécifications, mais modifier les spécifications pour qu’elles
soient en accord avec le nouveau comportement du système. Ici, il n’est pas
question de spécifications primordiales pour le bon fonctionnement du système,
les auteurs ne cherchent donc pas à empêcher les mauvais comportements mais
à faire en sorte que le système et les spécifications s’adaptent pour rester en
accord, tout au long de l’exécution.
D.N.Lam et K.S.Barber (Lam & Barber, 2004) propose une méthodologie, la
“Tracing Method”pour tester et expliquer le comportement des agents. L’objectif
de cette méthodologie est de s’assurer qu’un agent exécute une action pour de
bonnes raisons et si une action innatendue apparaı̂t, d’aider à expliquer pourquoi
Contrôle d’agent
l’agent a décider d’exécuter cette action. Les similitudes avec notre approche
viennent de l’ontologie d’agent que les auteurs proposent pour pouvoir facilement
comparer des modèles de spécifications (diagramme d’état, de séquences...) au
comportement réel des agents. Notre approche se distingue de la Tracing Method
du fait de l’automatisation que nous proposons au niveau de l’instrumentation
du code des agents, mais aussi au niveau de la détection des incohérences entre
le comportement attendu et le comportement observé. Enfin, notre approche
consiste à embarquer le contrôle au sein des agents pour permettre une détection
dynamique des erreurs de comportement et non une étude post-mortem des
traces de programme.
Enfin, nous citerons les recherches de J.Vasquez-Salceda (Vasquez-Salceda
et al., 2004) qui propose un langage de normes, dans le cadre d’applications
médicales, basé sur la logique déontique, permettant de détecter lorsqu’une
norme n’est pas respectée et de punir l’agent en conséquence. Même si nos lois
s’apparentent à des normes, leur finalité n’est pas d’orienter le comportement
des agents mais de vérifier qu’il correspond à des exigences. Contrairement aux
normes, les agents ne décident pas de suivre ou non les lois, car elles sont signi-
ficatives de leur comportement.
7 Conclusion
Nous avons présenté dans ce papier un système permettant la génération
d’agents en mesure d’effectuer une vérification de leur propre comportement.
Cette vérification consiste à s’assurer que les lois associées à un agent sont
bien respectées tout au long de son exécution. Ces lois correspondent aux des-
criptions d’exigences sur le comportement et les états des agents. L’intérêt de
notre approche est principalement de permettre à une personne extérieure au
développement du système de vérifier qu’il respecte bien certaines règles mais
aussi de simplifier le travail du développeur en lui épargnant l’instrumentation
de son code. Enfin, un point important tient au fait que cette vérification des lois
peut se faire sur n’importe quel agent et ce quelque soit le modèle utilisé pour
l’implémenter. Ainsi, même un SMA aux agents hétérogènes peut être soumis à
des lois.
La prochaine étape de nos travaux sera surtout axée sur la construction du
langage de description des lois. Ce langage doit permettre de déduire, de façon
générale, le code à insérer à l’intérieur des agents pour effectuer le contrôle du
respect des lois, tout en étant assez complet pour pouvoir exprimer un grand
nombre de type de lois. La génération du code à partir des lois pourrait passer
par une étape de modélisation automatique des lois sous forme d’un réseau de
Petri décrivant ce qui est interdit ou obligatoire pour un agent.
Références
Barber K. & Martin C. (1999). Agent autonomy : Specification, measure-
RJCIA 2005