TP 1 : Manipuler le labyrinthe et le graphe associé

Dans le cadre de ce premier TP, nous allons prendre le temps de nous familiariser avec la plateforme PyRat. En particulier, nous allons programmer des fonctions utilitaires pour :

  • Récupérer la case au dessus (resp. en dessous, à gauche et à droite) d’une case donnée.
  • Déterminer si la case au dessus (resp. en dessous, à gauche et à droite) d’une case donnée est accessible en une décision.
  • Récupérer le mouvement nécessaire pour aller d’une case A à une case adjacente B.

Présentation de la plateforme

Tout d’abord, nous vous demandons de lire cette page du blog, qui présente le logiciel PyRat. De même, le fichier README.md à la racine de votre dossier de travail, ainsi que les nombreux commentaires dans les fichiers vous donneront les détails nécessaires pour démarrer une partie de PyRat.

Important ! Le fichier AIs/template.py est un “code à trous” qui servira de base à toutes vos IAs. Vous devez le copier et le renommer pour chacun de vos programmes. Le fichier AIs/random.py est un exemple d’IA se déplaçant aléatoirement basée sur ce “code à trous”.

Votre enseignant(e) vous fera une démonstration pour vous guider dans l’utilisation de la plateforme PyRat.

Fonctions à programmer

Comme indiqué ci-dessus, commencez par copier le fichier AIs/template.py, et renommez la copie en AIs/primitives.py (ou AIs/TP1.py si ça vous parle plus, l’essentiel est de s’y retrouver).

Tout d’abord, programmez la fonction aboveOf. Elle prend en argument une position, et doit renvoyer la position de la case au dessus de celle donnée en argument. Sur le même modèle, on vous demande de programmer les fonctions belowOf, leftOf et rightOf.

Pour réaliser ces fonctions, vous aurez besoin des informations suivantes :

  • Les cases du labyrinthe sont représentées par leurs coordonnées. Cela signifie que la case en bas à gauche est à la position (0, 0), que celle au dessus est à la case (0, 1) et que celle à sa droite est à la position (1, 0).
  • En Python, on accède au premier élément d’une paire p en écrivant p[0] et au second élément par p[1].

Dans un premier temps, on ne vous demande pas de vérifier si cette case est accessible, ni même si elle existe. Ainsi, la case à gauche de la position (0, 0) est (-1, 0), et celle en dessous en (0, -1).

Important ! Pensez à tester vos fonctions. Vous pouvez pour cela utiliser la plateforme PyRat en appelant les fonctions à tester depuis la fonction preprocessing par exemple. Exécutez ensuite votre programme via la commande suivante : python pyrat.py –rat AIs/Primitives.py

Ensuite, on vous demande de programmer une fonction canMove qui prend en paramètres le graphe du labyrinthe, une position de départ et une position d’arrivée; et qui renvoie True si et seulement si il est possible de passer de la première à la seconde en une décision.

Pour cette fonction, notez qu’il est facile en Python d’itérer sur toutes les clés d’une table de hachage (= dictionnaire). Il suffit d’écrire for key in dictionary : (…), où key est la variable de boucle et dictionary est le dictionnaire à parcourir.

La fonction getMove prend en arguments la carte du labyrinthe, une position de départ et une position d’arrivée; et renvoie le mouvement nécessaire pour passer de la première à la seconde, ou None si ce n’est pas possible (cette information vous est donnée par la fonction canMove).

Ces quelques fonctions ne sont que des exemples de fonctions simples pour manipuler le labyrinthe. N’hésitez pas à enrichir cette liste, comme avec par exemple une fonction renvoyant la liste des mouvements n’amenant pas dans un mur, ou renvoyant un mouvement aléatoire…

Ecrire un programme aléatoire amélioré

Le programme programs/Random.py fourni bouge à chaque tour dans une direction aléatoire, même si celle-ci l’amène dans un mur. Vous ne devriez pas avoir de mal à programmer une IA un peu plus intelligente, se déplaçant aléatoirement parmi un ensemble de mouvements n’amenant pas votre pion dans un mur.

Nous vous demandons enfin de suivre le tutoriel PyRat disponible sur ce lien. Vous y serez guidés pour écrire une IA se déplaçant en priorité vers des cases non visitées, et se déplaçant aléatoirement si cela n’est pas possible.

Important ! Dans ce tutoriel, vous apprendrez aussi à faire des statistiques avec PyRat, qui vous serviront à appuyer vos arguments lors des évaluations orales.

Quoi faire ensuite ?

Les résultats obtenus en suivant ce TP (ainsi que ceux du TP 2) seront présentés lors de l’entretien de la séance 3.

Vérifiez le bon fonctionnement de vos fonctions sur des labyrinthes générés aléatoirement.

Étudiez l’influence de la densité de murs dans le labyrinthe (ou d’un autre paramètre) sur le nombre de mouvements nécessaires pour ramasser un unique morceau de fromage. Comparez vos algorithmes aléatoires améliorés avec celui fourni (AIs/random.py).

Interprétez les résultats obtenus dans le cas précédent à l’aide d’un modèle mathématique. Le niveau rouge correspondant à de l’approfondissement en autonomie, vous pouvez faire autre chose qui vous intéresse plus, mais c’est une piste :)

Publié le

Laisser un commentaire