Programmation orientée agents

(FMIN108-Université de Montpellier - Département Informatique)

Resp: Jacques Ferber,

 

TP 6 - Warbot (Warlogo) #1

Dernière mise à jour : Novembre 2020

 

Warbot est un jeu de guerre entre deux équipe.. La version que nous allons utiliser dans ce TP est celle qui a été écrite en NetLogo... Voici la version actuelle (2.8) de Warlogo: (warlogo_2.zip) que vous pouvez télécharger. Vous la décompresser. La documentation se trouve dedans... ATTENTION: cette version requiert NetLogo 6 ou supérieur pour fonctionner.

Mais voici un lien vers la documentation de Warlogo en .pdf téléchargeable directement.

Voici les différences principales:

  1. Il est écrit en NetLogo et non plus en Java
  2. Les deux équipes sont définies dans deux fichiers: warbot-team1.nls et warbot-team2.nls. Au départ, l'équipe t2 est une équipe basique qu'il s'agit de combattre. On peut inhiber l'équipe t2 par un switch.
  3. Pour décrire un comportement, il suffit de modifier la fonction to-report <type vehicule>-t1-action donnée dans le fichier warbot-team1.nls (ce fichier peut être ouvert directement dans NetLogo avec le bouton déroulant 'includes').

Donc pour les explorers: to-report explorer-t1-action et idem pour les rocket-launcher, et la base.

NOTE: comme il est écrit en Netlogo, toutes les primitives de NetLogo se trouvent accessibles.

Les actions possibles:

Les actions qui ne prennent pas de temps:

Actions qui ne prennent pas de temps.. (peuvent être utilisée autant de fois que l'on veut dans le corps d'un comportement d'agent)

L'attribut percepts de l'agent contient l'ensemble de ses perceptions et elle est mise à jour à chaque tick.

Aller regarder les codes des exemples de fonctionnement des différentes agents, et tout particulièrement le code des agents basiques (team t2 initialement).

 

Note: Du fait que c'est écrit en NetLogo, il est possible de faire n'importe quoi. Il est important de jouer le jeu et de n'utiliser que les primitives qui vous sont proposées: par conséquent il est interdit de modifier n’importe quelle variable autre que sa tâche, ses croyances et les variables locales. Il est aussi interdit de lire des informations que l’agent ne possède pas dans ses percepts ou dans ses messages.

De ce fait, il est interdit d'utiliser les procedures Netlogo de déplacement (fd notamment) mais on peut faire setheading sur un autre agent. Par ex. il est possible de faire:

set-heading min-one-of get-bases [distance myself]

qui fait pointer l'agent sur la base la plus proche. Il est interdit aussi d'utiliser les primitives de perception (in-radius, in-cone) car les percepts sont directement gérés par le noyau de Warlogo et tous les percepts se trouvent dans l'attribut 'percepts' de l'agent.

Pour finir, il est interdit de garder un pointeur sur un agent en mémoire. En revanche, vous avez le droit de garder toutes les informations d’un agent perçu (son numéro, son énergie...). La raison est que (pour des raisons de simplicité et d’efficacité), nous vous fournissons en perception des pointeurs sur les autres agents. Si vous mémorisez ce pointeur et que l’agent sort de votre champ perceptif... vous avez toujours accès aux informations (mises à jour) de cet agent, alors que vous devriez, au mieux, ne pouvoir vous souvenir que des informations de votre dernière rencontre.

Si vous avez besoin de

1. Récupérer de la nourriture

a) Ecrire un agent explorateur qui récupère de la nourriture

b) Ecrire un agent explorateur qui récupère de la nourriture et la ramène à sa base.. (récupère l'ensemble des bases avec la fonction get-bases)

c) A partir de la machine à états finis de l'agent récupérateur de nourriture tel qu'on l'a vu en cours, écrire le comportement d'un explorateur qui récupère de la nourriture dès qu'il en voit et retourne immédiatement à la base sans en prendre de nourriture supplémentaire sur son chemin.

d) Modifiez la structure de la machine à états finis de votre robot explorateur pour qu'il continue à récupérer de la nourriture tout en retournant à la base.

2. Attaquant

a) Ecrire le comportement d'un lanceur de missile qui se déplace de manière aléatoire et qui qui attaque la base ennemie s'il l'aperçoit, en utilisant une implémentation à base de machine à états finis (FSM).

3. Défenseur

a) Faire un lanceur de missile qui reste à portée de sa base tout en se déplaçant. (note: cela correspond à un seul état du lanceur de missile)

b) Modifier le comportement de ce lanceur de missile pour qu'il attaque un ennemi qui arrive dans sa zone de vision alors qu'il est en défense. Implémenter son comportement sous la forme d'une FSM

c) Faire en sorte que ce défenseur fuit le combat si son énergie baisse en dessous d'une certaine valeur (idem, on modifie la FSM).