Le tournoi PyRat
Durée2h30 + préparationObjectifs de la séance
Après l’examen final, un créneau horaire est dédié à un tournoi PyRat. Il se déroulera après les vacances, pour vous laisser un peu de temps si vous voulez peaufiner votre IA.
Pour ce tournoi, vous devrez concevoir un programme PyRat pour affronter un adversaire. Le joueur qui récupère le plus rapidement les morceaux de fromage remporte la partie !
Cet événement est facultatif et non-évalué, conçu uniquement pour vous amuser.
Voici quelques vidéos réalisées depuis la création du cours PyRat ! Certaines sont plus “commerciales” que d’autres, mais elles offrent un aperçu de l’ambiance pendant le tournoi, ainsi qu’un aperçu versions plus anciennes du jeu !
Organisation du tournoi
Deux phases
Malheureusement, nous n’aurons pas le temps de faire concourir tout le monde dans le tournoi final. Par conséquent, nous procéderons sous forme de poules dans lesquelles tous les joueurs s’affronteront en deux manches gagnantes. Dans chaque poule, nous conserverons le meilleur programme, c’est-à-dire, celui avec le plus grand nombre de points dans les matchs de poule (1 point pour une victoire, 0.5 pour un match nul). En cas d’égalité après tous les matchs, nous considérerons comme meilleur programme celui avec le temps d’exécution total le plus faible.
Une fois les vainqueurs des poules déterminés (soit 16 programmes), le tournoi lui-même aura lieu en amphithéâtre. Les matchs seront déterminés aléatoirement.
Le gagnant du tournoi remportera un trophée, et son IA servira de boss final pour les étudiants de l’année suivante !
Paramètres de PyRat
Les options suivantes seront utilisées pour créer les parties PyRat :
maze_width
: 25.maze_height
: 20.cell_percentage
: 80.0.wall_percentage
: 60.0.mud_percentage
: 20.0.mud_range
: [4, 9].nb_cheese
: 41.preprocessing_time
: 3.0.turn_time
: 0.1.
Voici le script de jeu que nous utiliserons pour le tournoi.
Notez que les joueurs seront instanciés sans aucun argument. Ainsi, assurez-vous de définir des valeurs par défaut dans votre constructeur si vous utilisez des arguments supplémentaires. En particulier, si vous souhaitez un nom personnalisé (et non le nom de la classe) pour votre programme, vous devez le spécifier comme suit :
def __init__ ( self,
*args: object,
**kwargs: object
) -> None:
# Inherit from parent class
super().__init__(name="Votre nom ici", *args, **kwargs)
Comment participer ?
Pour participer, vous devez soumettre votre programme sur Moodle avant la date limite indiquée sur la page.
Votre programme doit être placé dans une archive nommée team_name.zip
, où team_name
est le nom de votre équipe.
Cette archive doit être structurée comme suit :
team_name.zip
|
|_ games
| | # Placez ici un script de jeu simple qui démarre une partie avec votre programme
| | # Cela nous permettra de vérifier qu'il fonctionne
| |_ # Inspirez-vous des scripts visualize_XXX.py avec les paramètres du tournoi
|
|_ players
| | # Placez ici votre joueur
| | # Ce répertoire ne doit contenir que le fichier de votre joueur qui participera au tournoi
| |_ # Si vous avez besoin de fonctions définies dans d'autres joueurs, placez-les dans utils
|
|_ utils
| |_ # Placez ici vos codes supplémentaires (le cas échéant)
|
|_ data
| |_ # Placez ici vos autres fichiers (le cas échéant)
|
|_ README_TOURNAMENT.md
Vous pouvez trouver le fichier README_TOURNAMENT.md
à ce lien.
Veuillez remplacer tout ce qui est dans <...>
.
Veuillez vous assurer que votre programme fonctionne et que vous respectez l’organisation des fichiers ci-dessus.
Assurez-vous également que tous les fichiers nécessaires sont disponibles pour que votre programme fonctionne. Nous aurons de nombreux matchs à effectuer pour les poules, donc nous ne pouvons pas perdre trop de temps à demander des fichiers manquants.