Skip to content

Repository files navigation

Ce projet vise à implémenter le jeu Puissance 4, un jeu de stratégie où deux adversaires tentent d'aligner quatre pions de leur couleur. Vous travaillerez avec Python et le framework PettingZoo, conçu pour créer et évaluer des agents capables de s'affronter de manière autonome. Les agents que vous développerez seront finalement soumis sur ML-Arena, une plateforme dédiée aux compétitions d'intelligence artificielle.

Votre objectif est de concevoir un agent intelligent capable de jouer au Puissance 4 de manière optimale sous contraintes de temps (max 3 secondes par coup), de mémoire (max 384 Mo) et de puissance CPU (max 1 cœur).

Objectifs pédagogiques

En complétant ces exercices, vous serez capable de :

  1. Comprendre le problème : décomposer un problème de jeu en tâches algorithmiques
  2. Implémenter des algorithmes simples : créer des agents capables de jouer à Puissance 4 avec différentes stratégies
  3. Concevoir des stratégies de test : développer des tests complets pour évaluer et comparer les performances des agents
  4. Appliquer les bonnes pratiques de génie logiciel : écrire du code propre, modulaire et testable

Le projet de décompose en deux parties.

Organisation

Le projet se fait en groupe de deux personnes. Vous devrez choisir un nom de groupe.

Partie 1 : Bases et découverte (difficulté progressive)

Cette partie vous familiarisera avec les concepts fondamentaux du jeu, du développement de jeux en Python et de la notion d'agent. Vous progresserez à travers une série d'exercices qui vous permettront de :

  • Analyser le jeu: Comprendre les règles, les mouvements possibles et les conditions de victoire.

  • Modéliser le jeu: Représenter le jeu sous forme de données (grille, état du jeu) en Python.

  • Implémenter des algorithmes simples: Développer des stratégies basiques pour jouer au jeu (aléatoire, coup prioritaire).

  • Concevoir des tests efficaces: Évaluer la performance des différentes stratégies et identifier les points faibles.

  • Structurer le code source en plusieurs modules et exécutables

  • (Optionnel) Créer un package Python en utilisant les éléments du cours

Rendu : Créer un dépôt github et soumettre le code source. Un dépôt par groupe.

IMPORTANT : le code doit être de qualité et commenté. Utiliser pytest pour exécuter des tests unitaires et pylint pour évaluer la qualité du code.

Partie 2 : Agent final et compétition (MLArena)

Dans cette partie, vous mettrez en pratique vos connaissances acquises pour construire un agent intelligent capable de rivaliser avec d'autres agents développés par d'autres. Vous devrez:

  • Concevoir une classe Agent: Implémenter la logique décisionnelle de votre agent, qui choisira le meilleur coup à jouer en fonction de l'état actuel du jeu.
  • Choisir et implémenter un algorithme de décision: Explorez des différentes techniques pour trouver la meilleure stratégie.
  • Optimiser votre agent: Assurez-vous que votre agent respecte les contraintes de temps (3 secondes par coup), de mémoire (384 Mo) et CPU (1 cœur).
  • Soumission de l'agent final sur MLArena: Enregistrez votre agent sur la plateforme MLArena et participez à des compétitions pour comparer vos performances avec celles d'autres agents.
  • Soumission du code source sur GitHub: Créer un dépôt GitHub et soumettre le code source

Ressources utiles:

Prérequis

  • Python 3.8+
  • Compréhension de base de la programmation Python
  • Familiarité avec les tableaux/matrices

Installation

Installez les dépendances requises :

pip install pettingzoo[classic] numpy

Partie 1 : Bases et découverte (difficulté progressive)

Structure des exercices

Les exercices sont conçus pour être complétés dans l'ordre, chacun s'appuyant sur le précédent :

  • Apprendre les règles du jeu Puissance 4
  • Comprendre le framework PettingZoo
  • Analyser la représentation de l'état du jeu
  • Créer votre premier agent fonctionnel
  • Comprendre l'interface d'un agent
  • Apprendre les coups valides et les masques d'action
  • Concevoir des heuristiques pour un meilleur jeu
  • Implémenter la détection de victoire
  • Implémenter le blocage défensif
  • Ajouter des améliorations stratégiques
  • Concevoir une stratégie de test complète
  • Implémenter des tests de performance
  • Créer des comparaisons par tournoi
  • Mesurer les contraintes de temps et de mémoire
  • Implémenter l'algorithme Minimax
  • Explorer Monte Carlo Tree Search (MCTS)
  • Optimiser pour les contraintes de performance

Ce que vous allez construire

À la fin de ces exercices, vous aurez créé :

  • RandomAgent : un agent simple qui joue aléatoirement (référence de base)
  • SmartAgent : un agent basé sur des règles utilisant des heuristiques
  • Suite de tests : des tests complets pour évaluer vos agents
  • Système de tournoi : comparer les agents de manière systématique
  • Optionnel : agents avancés utilisant Minimax ou MCTS

Pour commencer

  1. Commencez par l'exercice 1
  2. Lisez chaque exercice complètement avant de commencer
  3. Essayez de résoudre les problèmes par vous-même d'abord
  4. Testez votre code au fur et à mesure
  5. Créez de nouveaux fichiers comme indiqué dans chaque exercice

Conseils pour réussir

  • Lisez la documentation : la documentation PettingZoo est votre amie
  • Testez progressivement : n'attendez pas la fin pour tester votre code
  • Commencez simple : faites d'abord fonctionner le code, puis optimisez
  • Utilisez des print : visualisez ce que votre agent "pense"
  • Expérimentez : essayez différentes approches et comparez les résultats
  • Posez des questions : comprendre est plus important que simplement faire fonctionner

Critères d'évaluation

  1. Exactitude : votre agent suit-il les règles et joue-t-il légalement ?
  2. Qualité du code : votre code est-il propre, bien organisé et documenté ?
  3. Tests : avez-vous implémenté des tests complets ?
  4. Compréhension : pouvez-vous expliquer vos décisions de conception ?
  5. Performance : votre agent respecte-t-il les contraintes de temps/mémoire ?

Ressources

Obtenir de l'aide

Si vous êtes bloqué :

  1. Relisez attentivement les instructions de l'exercice
  2. Consultez la documentation PettingZoo Connect Four
  3. Examinez les exemples de code dans les exercices
  4. Utilisez les outils de débogage (instructions print, débogueur)

Directives de soumission

  • Code source. Dans un dépôt github (un par groupe) :
    • Soumettre tous les fichiers Python que vous avez créés. Structurer le code source en modules (optionnel : construire un package)
    • Créer des modules de tests. Tester avec pytest si besoin
    • Créer des fichiers de documentation (a minima README.md) pour décrire vos décisions de conception, et d'autres éléments jugés utiles
  • Soumission de l'agent final sur la plateforme ML-Arena, voir les instructions ci-dessus.

About

Project of the course "Python: from the basics to the scientific programming"

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors