\subsection{L'algorithme Monte-Carlo Tree Search (MCTS)}
Le \textit{Monte-Carlo Tree Search} est un algorithme de recherche de décision, utilisé dans les jeux tel que le Go ou encore Ms. Pacman.
Son principe repose sur la simulation de plusieurs millions de parties qui permettent de construire progressivement un arbre et d'ensuite choisir le meilleur chemin pour le tour courant du joueur.
...
...
@@ -105,9 +105,10 @@ L'algorithme à implémenter dans le programme est le MCTS. L'algorithme a déj
C'est donc à nous de faire cette représentation de sorte à qu'elle respecte l'interface définie par Pascal GARCIA et qu'elle comporte des calculs rapides pour passer d'une étape à l'autre du jeu.
\subsection{Création d'une interface graphique}
Pour permettre de rendre l'application facile à utiliser, une interface graphique doit être programmée; les interactions Homme-Machine se font à la souris. Il n'y a pas de restriction sur la méthode utilisée. \\
Il va de soi que l'interface graphique doit pouvoir lancer le jeu et communiquer les coups du joueur à l'IA et inversement.
Il va de soi que l'interface graphique doit pouvoir lancer le jeu et communiquer les coups du joueur à l'IA et inversement.\\
\newpage
%\newpage
\section{Réalisation}
A chaque séance, nous nous sommes généralement divisés en 2 équipes de 2 afin d'avancer plus rapidement le projet sur deux points différents.
Lorsque nous avions l'occasion, nous rencontrions notre encadrant afin qu'il donne son avis ainsi que des conseils pour des problèmes que nous n'arrivions pas à résoudre.
...
...
@@ -121,6 +122,7 @@ Cela nous a également permis d'apprendre à programmer en C++, langage qu'on ne
Pascal GARCIA nous a conseillé de représenter la grille sous forme de \textit{bitboards\footnote{Une bitboard est juste un nombre entier classique, dans lequel chaque bit est interprété de façon particulière. Souvent chaque bit représente la présence, ou l'absence, d'un élément dans une case du plateau}} de 16 bits pour optimiser les calculs, l'un représentant les croix et l'autre les cercles.
Les états gagnants étaient des \textit{bitboards}, définis dans le code comme des entiers. Lorsque l'un des \textit{bitboards} satisfaisait(selon certaines opérations bit à bit) un de ces états, la partie se terminait.
\newpage
\subsection{Le Jeu du Pingouin}
La deuxième étape du projet consiste à coder le Jeu du Pingouin de telle sorte que l'IA respecte les règles et comprenne la condition de victoire et que les calculs pour effectuer chaque coup soient rapides, pour que le MCTS puisse simuler énormement de parties dans le temps imparti.
...
...
@@ -155,6 +157,13 @@ L'IA nécessite d'avoir le coups qu'on veut jouer exprimés comme numéro par ra
Le choix du langage pour implémenter l'interface graphique est tombé vers un langage qu'on maîtrise mieux que le C++: le Java. elle est donc développée avec la bibliothèque \textit{javafx} qui permet d'avoir un modèle \textit{Modèle, Vue, Contrôleur} qui va faciliter la reprise dans le futur. \\
L'interface devait être facile à l'utilisation et "jolie". On n'avait pas de bases ni d'indications particulières, on a donc commencé de zéro pour cette partie.
\paragraph{Communication avec l'IA}Les deux programmes étant indépendant, il faut une façon pour que les données du jeu passent du programme en C++, qui gère le jeu et l'IA, à l'interface en Java. Pour ce faire on a décidé d'utiliser une représentation en \href{https://fr.wikipedia.org/wiki/JavaScript_Object_Notation}{JSON}, et de transmettre l'état entier du jeu après chaque coup.
L'interface graphique fait le travail inverse de l'IA: elle convertit les différentes valeurs des \textit{bitboards} de l'état en tableaux et objets qui sont ensuite utilisés pour l'affichage.