Projet WarBot

Module Systèmes Multi-Agents - Année 2001-2002

Coopération et conflits dans les sociétés d'agents

Proposé par J. Ferber

Contexte

L'étude de la coopération entre agents constitue l'un des aspects les plus importants des systèmes multi-agents. Mais les situations de conflits ou plus exactement de compétition sont au moins aussi importantes que les situations de coopérations.

De nombreux exemples ont été proposés dans l'histoire des systèmes multi-agent pour aider à comprendre et à étudier ces situations: poursuites " proies-prédateurs ", recherche d’échantillons, agence de voyage, robots footballeurs, etc. sont des exemples de telles situations.

Nous nous proposons dans ce module de DEA de vous fournir un nouveau contexte d’étude de la coopération et de la compétition. Ce contexte s’appelle la guerre des robots (Robot War en anglais, dont nous avons tiré le nom du projet WarBot).

Présentation du projet WarBot

WarBot est un environnement de simulation de comportement de robots se déplaçant et agissant dans un environnement simulé. La figure 1 montre un exemple d’un tel environnement.

Deux équipes comprenant chacune n robots s’affrontent. Ces robots sont divisés en plusieurs catégories : pour l'instant il n'existe que deux types de robots: les robots lanceurs de missiles et les robots eplorateurs.

Le but des équipes est de détruire les bases du camp adverse avant que l'autre ne le fasse...

Pour cela toutes les stratégies sont possibles !

Figure 1. Environnement de WarBot. Attention : il ne s’agit que d’une image de la version précédente. L''interface de Warbot II est légèrement différente.

L’objectif de ce projet est de définir une équipe, c’est à dire de définir le comportement des robots sachant que le nombre de robots et leur répartition dans les catégories précitées sont les mêmes pour tous.

Une fois cette équipe définie et les positions initiales précisées, deux équipes s’affrontent sans intervention humaine. Que le meilleur gagne...

Les robots de WarBot

Un robot dans WarBot se compose de deux parties : le corps et la tête.

WarBot fonctionne sur la plate-forme MadKit. Il est donc possible d'utiliser tous les outils de cette plateforme pour surveiller l'évolution des robots.

Les types de corps

Dans la version actuelle, il existe exactement trois types de corps de robots:

Les robots explorateurs (warbot.kernel.Explorer)

Ces robots n'ont aucune arme, mais ils se déplacent plus rapidement que les lanceurs de missiles et ils disposent d'une distance de perception plus grande. Voici leurs valeurs initiales (attention la vitesse mesure en fait la "lenteur" des agents. Plus un agent est rapide, plus sa vitesse est faible. Les agents les plus rapides ont une valeur de vitesse de 1):

Les robots lanceurs de missiles (warbot.kernel.RocketLauncher)

Ces robots sont assez lents, mais disposent d'une bonne quantité d'énergie et surtout sont capables de lancer des rockets. Ils comportent 300 rockets (ce qui est assez importants) et peuvent aussi construire de nouvelles rockets en transformant leur énergie en rockets.

Les bases (warbot.kernel.Home)

Les bases sont aussi des robots, mais des robots immobiles. Elles disposent d'une grande énergie initiale, d'une grande capacité de perception et de toutes les caractéristiques de communication des autres robots.

Les têtes (brain)

Les têtes sont des agents madkit qui contrôlent le comportement des "corps" des robots. La classe madkit.kernel.Brain constitue le lieu de relation entre les programmes comportementaux des têtes et les comportements effectifs réalisés par le corps.

On peut programmer les têtes pour l'instant dans trois langages différents: Java, Python et Jess.

Python et Jess sont des langages de scripting qui permettent de décrire des comportements d'agents de manière très facile.

Python est un langage fonctionnel et objet qui manipule de manière très élégante des structures de données telles que les listes et les dictionnaires. De plus la version de Python utilisée, jython disponible sur le site www.jython.org, permet d'utiliser toutes les classes Java.

Jess un système à base de règles qui fonctionne selon le modèle des "moteurs d'inférence": un ensemble de règle s'appliquent sur une base de faits jusqu'à ce que la base soit saturée, c'est à dire que le moteur ne puisse plus déduire de nouveaux faits. Jess, qui est un moteur d'inférence fonctionnant essentiellement en chaînage avant, implémente l'algorithme de Rete. C'est un descendand de OPS5 et CLIPS. Il est très pratique pour décrire des comportements d'agents évolués, en associant un comportement élémentaire à une règle. Il est possible aussi d'ajouter des fonctions et ainsi d'étendre les capacités du langage. Jess est très bien interfacé à Java. Toutes les classes de Java sont directement accessibles depuis Jess.

Par la suite d'autres langages de scripting seront disponibles: Scheme (version Kawa), Forth (Fidji), BeanShell (un interpréteur Java), JavaScript, etc...

Quelques exemples

On pourra note d'une part la simplicité des comportements, et d'autre part que le comportement d'équipe est très réduit (sinon inexistant) dans ces exemples. A vous de jouer...

Les actions des corps

Voici quelques unes des actions et fonctions primitives que l'on peut utiliser pour programmer des "têtes" (on appelle "Brain" en anglais ces têtes). Toutes ces fonctions se présentent comme des méthodes "public" de la classe warbot.kernel.Brain:

Actions d'accès aux attributs internes du robot

Actions de déplacement

Actions de détection

Actions de communication

Toutes les communications entre agents (donc entre 'Brains') s'effectuent à l'aide de message de type "WarbotMessage" qui ne comprennent que des chaînes de caractères: il est donc impossible de transférer une référence vers un objet à l'aide d'un message.

Il est possible d'obtenir les informations correspondant à un WarbotMessage de la manière suivante:

Attention: un 'Brain' ne peut pas envoyer d'autres messages que des WarbotMessage. Même les mécanismes d'envoi de messages traditionnels (sendMessage, broadcastMessage, etc..) ont été réécrits pour ne pas permettre de manipuler d'autres types de messages.

Actions de manipulation d'objets

Note: pour l'instant les commandes de manipulation de sac ne sont pas terminées... Cela ne devrait pas durer...

Actions de commandes des armes (uniquement valables pour les RocketLauncher)

Evidemment, d’autres actions sont envisagées et seront fournies par la suite. Pour plus d’informations retourner régulièrement à cette page à l’adresse www.lirmm.fr/~ferber/warbot

De plus, comme les têtes sont des AbstractAgent au sens de MadKit, ils disposent de toutes les fonctionnalités des agents MadKit!! (création de groupes, demande d'adhésion à un groupe en jouant un rôle, récupération de tous les agents jouant un certain rôle dans un certain groupe, etc..)

Pour plus d'informations et de détails, lire la Javadoc du dossier WarBot, le code sources des corps et des têtes données en exemple.

Bibliographie

[Fer 95] J. Ferber, les systèmes multi-agents, InterEditions, 1995.