7.9 KiB
BUT3-IA-Jeux-PUBLIC
Dépôt pour ressource cours IA sur les jeux de BUT3. Formellement MATH 5.1 et DEV 5.5
évaluation. MATH 5.1 examen sur table 100% DEV 5.5 TPs filés et éventuel mini projet final. soutenance probable. note différenciée par groupe possible
Des ressources sont disponibles dans le répertoire 2023-24.
Notes de cours.
Premier cours (mardi 2/9/2025)
Au tableau.
Résumé du cours.
Réflexion sur la nature d'un jeu. Classification de divers jeux. Focus sur les jeux à 2 joueurs, tour par tour, à information complète, et déterministe, nbre de coups finis, durée du jeu finie.
Explication informelle des notions suivantes: Stratégie gagnante, états, graphe des états, arbre de jeu.
Un peu d'histoire brièvement : Deepblue vs Kasparov aux échecs, MoGo et Monte Carlo Tree Search, AlphaGo.
Illustration de Minimax et approximations.
Point de blocage taille de l'arbre de jeu.
Exemple du jeu de Nim et de son arbre de jeu pour 5 allumettes. Condition de défaite : prendre la dernière allumette.
Illustration apprentissage par renforcement en info débranché pour le Jeu de Nim
Second cours (jeudi 4/9/2025)
Au tableau.
Résumé du cours.
- Idée détaillée et Pseudo code de minimax pour le jeu de Nim
- variante qui détecte si j'ai déjà gagné et donc pas besoin de continuer la boucle pour voir d'autres coups.
- variante coupe à profondeur fixe, discussion d'évaluateur de position
- variante mémoïsation avec deux tableaux (cache des positions déja évaluées, un tableau par joueur).
Rappel de ce que nous avons vu avec détails historique et une premioère passe pour alpha beta avec les transparents du cours (dispo dans le répertoire le plus ancien).
à faire en salle machine
- créer un git individuel BUT3Jeux partagé avec moi
- dans un sous répertoire TP1, coder minimax pour le jeu de Nim
- Prendre soin de garder plusieurs versions dans des fichiers distincts (version de base sans optimisation, puis avec).
- Ajouter un README.md dans TP1 détaillant ce que fait chaque version, si elle fonctionne correctement ou pas.
- tester votre code
- Reprendre votre code pour compter le nombre d'états visités dans chaque version
- Tester pour différents nombre d'allumettes 5, 7, 13, 19, 31... Écrire un tableau avec le nombre d'états visités pour chaque variante plus ou moins avancées.
Troisième cours (jeudi 11/9/2025)
Au tableau + présentation.
Résumé du cours.
- Rappel minimax (in english)
- Rappel cut off et jeu approximé.
- Présentation détaillée de alpha beta
- Exercices au tableau sur arbre de jeu fictif
à faire en salle machine
- terminer TP précédent si pas fini
- Me demander de regarder quand fini pour évaluation individuelle
Nouveau à faire aujourd'hui
- implanter alpha beta pour le jeu de nim (sans cut off)
- tester pour vérifier que le résultat est le même que pour minimax
- compter les noeuds et comparer avec minimax
Si le temps
- tester alpha beta avec un ordre différent des coups. au lieu de faire allumettes de 1 à 3, fabriquer une liste [1,2,3], la mélanger aléatoirement, faire une boucle sur cette liste mélangée.
Quatrième cours (jeudi 18/9/2025)
conditions un peu dégradées. Cours en hybride. 3 étudiants en visio, 2 absents.
Les notes de ce cours sont disponibles dans le répertoire de cette année.
En cours le matin.
- travail sur la conception des classes pour un jeu
- évolution progressive vers assze d'abstraction pour une API.
En TP l'après-midi
- finir TP précédent
- lire API proposée sur le git
- commencer à implanter les classes concrètes pour le jeu de Nim.
NB. évolution mineure de l'API le 19/09 à faire pour le prochain cours
- implanter les classes concrètes pour le jeu de Nim.
cinquième cours (jeudi 9/10/2025)
En salle TP. Il faut finir le TP de la dernière fois.
- lire API proposée sur le git (NB. attention prenez la dernière version svp).
- implanter les classes concrètes pour le jeu de Nim.
Pour tester votre code pour la partie moteur de jeu (tout sauf le joueur), vous pouvez réaliser un joueur qui joue :
- au hasard
- humain en ligne de commande
- minimax (en dernier)
Une fois que vous avez tous les composants, votre main doit mettre en oeuvre une classe concrète qui hérite de AbstractGame et assemble tous les éléments nécessaires.
Notez que vous pouvez tester ue vous utilisez correctement l'API en utilisant votre bot contre le moteur du jeu d'un autre étudiant. Vous devriez même pouvoir le faire en demandant juste les .class.
sixième cours (jeudi 16/10/2025)
Le but est de mettre en oeuvre des jeux plus intéressants que le jeu de Nim, toujours en suivant l'API.
Vous devez constituer des groupes de 4 ou 5 étudiants. Un groupe est identifié par le jeu qu'il devra coder.
Dans un second temps, on fera des bots le plus efficace possible (probablement un alpha beta avec cut-off plus fonction d'évaluation qui peut être faite à la main ou par MonteCarlo).
Les jeux sont forcément un jeu parmi les suivants.
- Hex 11 fois 11
- Chomp 4 fois 5, plus d'autres tailles paramétrables
- Domineering 8 fois 8
- Quarto
- Avalam
les groupes de projet.
Hex
- DUCREUX Clémence
- GENTIL William
- JANNAIRE Clement
- KARA-MOSTEFA Riad
- VAISSE Alistair
Chomp
- AÏSSI Jude Christ
- BRIDJA Abed
- BRIGITTE Wilfried
- CREUZET Jossua
- DUBREUIL Christopher
Domineering
- AUBERT Marvin
- CHENET Gaston
- LEBRETON Maxime
- MOMMÉJA Tom
- RIERA Damien
Quarto
- AKAGUNDUZ David
- BOUTARIC James
- GALLEGO Julian
- HOCHLAF Raphaël
- TOP Bamba
Avalam
- AMARY Aurélien
- DICK Adrien
- RABAN Hugo
- FELIX-VIMALARATNAM Patrick
Modalités
- Il faut faire un projet sur le git du département partagé avec moi qui s'appelle BUT3ProjetJeuGroupe
- Il faut coder les éléments suivants (entre parenthèse l'importance en notation MoSCoW).
- (M) Le moteur de jeu qui utilise l'API proposée
- (S) un affichage des positions du jeu pour pouvoir faire du debug
- (M) des tests du moteur de jeu (dans des Main ou avec JUnit)
- (M) Un bot pour votre jeu, soit en alpha beta qui arrive à jouer optimalement en un temps raisonnable en regardant tout l'arbre de jeu, soit en coupant l'arbre de jeu avec une fonction d'évaluation.
- (M) Une fonction d'avaluation utilisant soit MonteCarlo, soit une feature du jeu (par exemple pour avalam, on peut compter les points en cours de partie pour guider la recherche).
- (S) Avoir plusieurs bots et les faire s'affronter. Par exemple, Random, un Bot codé à la main de manière simple (algo glouton), votre bot alpha beta + évaluateur.
- votre git doit refléter votre organisation. Je dois y voir des tâches/ tickets etc ou un lien vers un trello ou autre outil similaire que vous avez utilisé activement.
- votre git doit documenter les classes principales (javadoc)
- Il faut m'indiquer dans un README comment lancer des tests/démos de votre programme. Ça doit se déployer et fonctionner sur une machine de l'IUT sans effort important de ma part. Je vous laisse libre quant au mode de déploiement.
- Il faut me rendre un rapport de 6 pages environs en Markdown ou en pdf.
- 1 page sur ce qui a été fait pas fait.
- 1 ou 2 pages qui détaille votre meilleur bot et son fonctionnement.
- Des détails éventuels sur d'autres variantes et pourquoi vous avez abandonné certaines pistes.
- 1 ou 2 pages sur les aspects méthodologique (votre organisation, ce que vous avez bien fait, ce que vous n'avez pas bien fait).
- 1 ou 2 pages sur la partie technique de votre implantation : diagrammes de classes expliqués.
- une conclusion individuelle de quelques lignes
- une conclusion collective de quelques lignes