Skip to content

Latest commit

 

History

History
74 lines (52 loc) · 5.95 KB

instructions_projet.md

File metadata and controls

74 lines (52 loc) · 5.95 KB

Projet - Paint Wars

Description

Deux équipes de 8 robots ("red team" et "blue team") s'affrontent pour visiter au mieux une arène découpée en cases. Une case appartient à l'équipe qui l'a visitée en dernier. Le temps est limité et l'équipe qui possède le plus de cases après 2000 itérations gagne. Il s'agit là d'une variation compétitive du problème de la patrouille multi-agents, un problème classique en robotique.

Executez le fichier paintwars.py pour avoir un aperçu du projet.

Pour commencer, n'hésitez pas à réutiliser les comportements déjà obtenus dans les TP1 et TP2. Dans votre architecture de comportement finale, il est demandé d'avoir a minima:

  • une achitecture de subsomption ou une arbre de comportement
  • au moins deux comportements type Braitenberg
  • optionnel: un comportement de Braitenberg dont les poids ont été optimisé au préalable par algorithme génétique

Tout les coups sont permis, tant que votre code tient exlusivement dans la fonction step du fichier paintwars_team_challenger et que vous respectez les contraintes suivantes:

  • la mémoire autorisée d'un step à l'autre limité un seul et unique entier par robot. Par exemple pour faire un compteur ou une variable d'état pour alterner entre plusieurs comportements.
  • chaque robot peut connaître sont identifiant (robotId), ce qui permet éventuellement de spécialiser chaque robot de votre équipe. Attention: le 1e robot de l'équipe 1 a l'identifiant 0, le 1er robot de l'équipe 2 a l'identifiant 4 (si chaque équipe a 4 robots). Astuce: utilisez robotId%4 pour connaitre votre place dans votre équipe.
  • pas de communication
  • pas d'information supplémentaire que celles données par les senseurs
  • pas de construction ou d'utilisation de cartes

N'hésitez pas à reprendre la fonction get_extended_sensors(sensors) de comportement.py si vous pensez que cela vous simplifiera la vie. Cependant le code donné dans paintwars.py est plus complet (distingue murs et robots, permet de savoir si un robot est de la même équipe).

Fichiers

Fichiers importants, à modifier:

  • paintwars_team_challenger.py: votre stratégie comportementale.
    • get_team_name(): renvoie le nom de votre équipe (à vous de décider son nom)
    • def step(robotId, sensors):
      • en entrée: numéro du robot et information sensorielle
      • en sortie: renvoie vitesse de translation et vitesse de rotation
    • remarque: vous pouvez renommer ce fichier (il faudra mettre paintwars_config.py à jour).
  • paintwars_config.py:
    • arenaIndexSelector: numéro du labyrinthe utilisé (entre 0 et 4)
    • invertStartingPosition: inverse les positions de départ des deux équipes
    • step_red_team et get_name_red_team: alias vers les fonctions que vous aurez défini dans paintwars_team_challenger.py

Autres fichiers, à ne pas modifier.

  • paintwars.py: le programme principal. Ne pas modifier.
  • paintwars_team_champion.py: le comportement fourni par défaut, contre lequel il va falloir faire du mieux possible! Ne pas modifier.
  • paintwars_arena.py: défini les arènes possibles. Sélectionnable via la variable arenaIndexSelector dans paintwars_config.py. Vous pouvez éventuellement ajouter des cartes pour faire des tests si vous le souhaitez.

Vous pouvez aussi utiliser le script go_tournament qui permet de lancer 10 matches (2 matches par arène, en changeant la position de départ -- l'équipe rouge démarrera à gauche, puis à droite).

paintwars.py utilise par défaut les paramètres spécifiés dans paintwars_config.py (numéro d'arène, position de départ, vitesse de rendu). Cependant, il est possible de lancer paintwars.py avec des paramètres en ligne de commande, comme suit:

python paintwars.py <numero_arene> <inverser_position_de_depart> <vitesse_de_simulation>

  • <numero_arene> : entre 0 et 5
  • <inverser_position_de_depart> : False ou True
  • <vitesse_de_simulation> : 0 (normal), 1 (rapide), 2 (très rapide, pas d'affichage)
  • Exemple: python paintwars.py 3 True 1

Evaluation

Lors de la dernière séance de TP, vous présenterez votre travail pendant une interview de 15 minutes environ, en faisant tourner votre code.

Nous vous fournirons au début de la séance deux nouveaux fichiers:

  1. go_tournament_eval qui permet de lancer un tournoi sur l'ensemble des arènes initialement fournies, ainsi que de nouvelles arènes
  2. paintwars_arena_grX.py qui définit de nouvelles arènes inédites. le X correspond à votre numéro de groupe.

Pour utiliser ces nouvelles arènes, vous devez modifier le fichier paintwars_config.py (ligne 4) en remplaçant paintwars_arena.py par le fichier fourni paintwars_arena_grX.py (exemple: import paintwars_arena_gr4 as paintwars_arena).

On vous demandera de:

  • utiliser le script go_tournament_eval pour présenter les scores de votre stratégie préférée contre l'équipe paintwars_team_champion pour chacun des labyrinthes initiaux ainsi que les labyrinthes inédits;
  • utiliser paintwars.py pour faire une démonstration des stratégies que vous avez implémentés;
  • expliquer votre architecture à l'oral, c'est à dire l'architecture globale et les comportements de base. ;
  • répondre aux questions qui pourront porter sur le code et sur les méthodes utilisées ou vues en cours.

Pendant la séance (hors interview), vous devrez vous coordonner avec les autres groupes de votre séance pour faire un tournoi. Chaque groupe devra rencontrer le maximum de groupes adversaires, sur tous les labyrinthes (2 matches par labyrinthe, en variant la position de départ). Pour cela, vous modifierez paintwars_config.py pour faire s'affronter les deux équipes (i.e. une équipe jouera les bleus), et vous utiliserez le script go_tournament_eval pour avoir rapidement des résultats.

Vous reporterez les résultats du tournoi sur un document partagé qui vous sera donné en début de séance.

Le dernier git push de votre projet avant le début de la séance d'évaluation sera pris en compte comme rendu.