- Agent intelligent
-
Agent (informatique)
En informatique, un agent est l'équivalent d'un robot logiciel. C'est un programme qui accomplit des tâches à la manière d'un automate et en fonction de ce que lui a demandé son auteur.
Dans le contexte d'Internet, les agents intelligents sont liés au Web sémantique, dans lequel ils sont utilisés pour faire à la place des humains les recherches et les corrélations entre les résultats de ces recherches. Ceci se fait en fonction de règles prédéfinies. Ils sont capables d'une certaine autonomie, en particulier de dialoguer entre eux. Par exemple, l'agent intelligent d'une personne qui souhaite faire un achat sera capable de dialoguer avec les agents des vendeurs pour comparer prix, qualité et prestations.
Par ailleurs, l'étude des interactions entre agents, lorsqu'ils sont plusieurs, est le domaine spécifique des systèmes multi-agents, discipline de l'informatique apparue dans les années 1980.
Sommaire
Définition
On appelle agent une entité physique ou virtuelle :
- qui est capable d'agir dans un environnement ;
- qui peut communiquer directement avec d'autres agents ;
- qui est mue par un ensemble de tendances (sous forme d'objectifs individuels ou d'une fonction de satisfaction, voire de survie, qu'elle cherche à optimiser) ;
- qui possède des ressources propres ;
- qui est capable de percevoir (mais de manière limitée) son environnement ;
- qui ne dispose que d'une représentation partielle de cet environnement (et éventuellement aucune) ;
- qui possède des compétences et offre des services ;
- qui peut éventuellement se reproduire ;
- dont le comportement tend à satisfaire ses objectifs, en tenant compte des ressources et des compétences dont elle dispose, et en fonction de sa perception, de ses représentations et des communications qu'elle reçoit.
Les agents mobiles
La programmation par agents mobiles est un paradigme de programmation des applications réparties, susceptible de compléter ou de se substituer à d'autres paradigmes plus classiques tel le passage de messages, l'appel de procédure à distance, l'invocation d'objet à distance, l'évaluation à distance. Elle est d'un grand intérêt pour la mise en œuvre d'applications dont les performances varient en fonction de la disponibilité et de la qualité des services et des ressources, ainsi que du volume des données déplacées. Le concept d'agent mobile facilite en effet la mise en œuvre d'applications dynamiquement adaptables, et il offre un cadre générique pour le développement des applications réparties sur des réseaux de grande taille qui recouvrent des domaines administratifs multiples.
Principes et avantages
Un agent logiciel est une entité autonome capable de communiquer, disposant d'une connaissance partielle de ce qui l'entoure et d'un comportement privés, ainsi que d'une capacité d'exécution propre. Un agent agit pour le compte d'un tiers (un autre agent, un utilisateur) qu'il représente sans être obligatoirement connecté à celui-ci, réagit et interagit avec d'autres agents.
Un agent mobile peut se déplacer d'un site à un autre en cours d'exécution pour accéder à des données ou à des ressources. Il se déplace avec son code et ses données propres, mais aussi avec son état d'exécution. L'agent décide lui-même de manière autonome de ses mouvements. Ainsi, la mobilité est contrôlée par l'application elle-même, et non par le système d'exécution comme dans le cas de la migration de processus dans les systèmes opératoires.
En pratique, la mobilité d'agent permet de rapprocher client et serveur et en conséquence de réduire le nombre et le volume des interactions distantes (en les remplaçant par des interactions locales), de spécialiser des serveurs distants ou de déporter la charge de calcul d'un site à un autre. Une application construite à base d'agents mobiles peut se redéployer dynamiquement suivant un plan pré-établi ou en réaction à une situation particulière, afin par exemple d'améliorer la performance ou de satisfaire la tolérance aux pannes, de réduire le trafic sur le réseau, ou de suivre un composant matériel mobile. La mobilité du code offre un premier niveau de flexibilité aux applications. La décentralisation de la connaissance et du contrôle à travers les agents, et la proximité physique entre les agents et les ressources du système renforce la réactivité et les capacités d'adaptation.
La mobilité ne se substitue pas aux capacités de communication des agents (la communication distante reste possible) mais les complète ; afin de satisfaire aux contraintes des réseaux de grande taille ou sans fil (latence, non permanence des liens de communication), les agents communiquent par messages asynchrones.
Propriétés
Le déplacement d'une unité en cours d'exécution d'une machine à une autre se heurte aux problèmes d'hétérogénéité des matériels et des logiciels. Les intergiciels destinés au développement d'applications réparties à grande échelle doivent permettre de s'en abstraire. Par ailleurs, ils doivent fournir les mécanismes permettant le déplacement des agents et la communication entre agents. En particulier, la communication doit (a priori) être insensible aux déplacements des agents : les messages à destination ou provenant d'un agent doivent être acheminés indépendamment des mouvements de cet agent.
La capacité de capture et de restauration de l'état d'exécution d'un agent, appelée mobilité forte, est un point critique. La mobilité faible représente la capacité pour un système de déplacer le code des agents accompagné seulement de données d'initialisation (et non de l'état complet). En fait, c'est essentiellement un problème d'abstraction et d'expressivité, lié à la manipulation des processus qui exécutent les agents, qui est posé : dans les systèmes à mobilité faible, c'est au programmeur de gérer lui-même le mécanisme de reprise. Cette propriété est liée (et parfois confondue) avec la capacité de se déplacer à n'importe quel point de son exécution (mobilité anytime).
Un frein à l'utilisation réelle de cette technologie réside cependant dans les problèmes de sécurité qu'elle introduit. La mise en place d'une politique de sécurité peut demander, d'une part la protection des ressources et des données des machines hôtes (en limitant les droits d'accès et la consommation des ressources), et d'autre part, la préservation de l'intégrité et de la confidentialité des agents eux-mêmes et de leurs communications.
La large diffusion de l'environnement Java (et l'utilisation courante des applets) a contribué à l'intérêt porté aux agents mobiles, de par les nombreux avantages offerts (machine virtuelle, sérialisation, invocation de méthode à distance, gestionnaires de sécurité…). Java ne permet cependant pas la capture de l'état d'exécution des threads, et par conséquent, l'état dans lequel le calcul sera repris à distance doit être explicitement programmé, ce qui réduit l'expressivité : cette propriété est appelée mobilité faible (il existe des solutions Java non-standard basées sur la modification de la machine virtuelle, ou un pré-traitement code source, ou une modification du bytecode).
Bibliographie et sources
- (fr) Jacques Ferber, Les systèmes multi-agents : Vers une intelligence collective, InterEditions, 1995, ISBN 2-7296-0572-X.
- Source de la 2e partie de cet article (issue du projet JavAct, laboratoire IRIT )
- (en)Michael R. Genesereth and Nils J. Nilsson, Logical Foundations of Artificial Intelligence, 1987 [détail des éditions], chap. 13 Intelligent-Agent Architecture, pp. 307-328
- (en)Michael Wooldridge, An Introduction to MultiAgent Systems, 2002 [détail des éditions]
Liens internes
- Portail de l’informatique
Catégories : Architecture logicielle | Intelligence artificielle
Wikimedia Foundation. 2010.