Ce document est la documentation technique du projet d'études pratiques réalisé dans le cadre de la 3\ieme année de formation à l'\textsc{insa} de Rennes.
Ce document est la documentation technique du projet d'études pratiques réalisé dans le cadre de la 3\ieme année de formation à l'\textsc{insa} de Rennes.
Le projet est composé de deux parties: une intelligence artificielle codée en C++ et une interface graphique codée en Javafx; Dans ce document on va aussi appeler l'intelligence artificielle IA ou MCTS (pour Monte Carlo Tree Search, le nom de l'algorithme de recherche utilisé).
Le projet est composé de deux parties: une intelligence artificielle codée en C++ et une interface graphique codée en Javafx; Dans ce document on va souvent appeler l'intelligence artificielle IA ou MCTS (pour Monte Carlo Tree Search, le nom de l'algorithme de recherche utilisé).
Dans la section dédiée à l'IA on va voir comment on peut implémenter un jeu pour qu'il puisse utiliser le MCTS comme IA et ensuite voir comment le Jeu du Pingouin est implémenté.
Dans la section dédiée à l'IA on va voir comment on peut implémenter un jeu pour qu'il puisse utiliser le MCTS pour jouer contre un humain et ensuite voir comment le Jeu du Pingouin est implémenté.
\subsection*{Auteurs et license}
\subsection*{Auteurs et license}
La partie MCTS a été codée par Pascal \textsc{Garcia}, notre encadrant. Notre groupe a codé la partie Jeu du Pinguin (\verb|penguin.cpp penguin.hpp|) et la partie Interface Graphique (dossier \verb|GUI|).
La partie MCTS a été codée par Pascal \textsc{Garcia}, notre encadrant. Notre groupe a codé la partie Jeu du Pinguin (\verb|penguin.cpp penguin.hpp|) et la partie Interface Graphique (dossier \verb|GUI|).
...
@@ -55,7 +52,7 @@ Une fois la nouvelle classe codée, il suffit de changer une ligne dans le fichi
...
@@ -55,7 +52,7 @@ Une fois la nouvelle classe codée, il suffit de changer une ligne dans le fichi
a une valeur qui est utilisée dans la construction de l'arbre de décision (classiquement 1 si le MCTS gagne, -1 s'il perd)
a une valeur qui est utilisée dans la construction de l'arbre de décision (classiquement 1 si le MCTS gagne, -1 s'il perd)
\paragraph*{} Pour implémenter l'interface, il faut implémenter toutes ses fonctions. Elles ne sont pas toutes indispensables ou dépendantes du jeu, donc une partie
\paragraph*{} Pour implémenter l'interface, il faut implémenter toutes ses fonctions. Elles ne sont pas toutes indispensables ou dépendantes du jeu, donc une partie
d'entre elles pourront être copiées du fichier \verb|penguin.cpp|. Pour les autres on va en donner une liste avec des explications ci-dessous
d'entre elles pourront être copiées du fichier \verb|penguin.cpp|. Pour les autres on va en donner une liste avec des explications ci-dessous:
\paragraph*{}
\paragraph*{}
\begin{itemize}
\begin{itemize}
...
@@ -64,7 +61,7 @@ d'entre elles pourront être copiées du fichier \verb|penguin.cpp|. Pour les au
...
@@ -64,7 +61,7 @@ d'entre elles pourront être copiées du fichier \verb|penguin.cpp|. Pour les au
\item\verb|bool won/lost/draw(uint8 player)| Si le joueur \verb|player| a gagné / perdu / fait égalité.
\item\verb|bool won/lost/draw(uint8 player)| Si le joueur \verb|player| a gagné / perdu / fait égalité.
\item\verb|uint8 current_player()| Le jouer qui doit jouer actuellement.
\item\verb|uint8 current_player()| Le jouer qui doit jouer actuellement.
\item\verb|uint16 number_of_moves()| Le nombre total de coups que le joueur actuel peut jouer.
\item\verb|uint16 number_of_moves()| Le nombre total de coups que le joueur actuel peut jouer.
\item\verb|play(uint16 move)| Joue le coup numéro \verb|mouve| pour le joueur actuel.
\item\verb|play(uint16 move)| Joue le coup numéro \verb|move| pour le joueur actuel.
\item\verb|string player_to_string(uint8 player)| Représentation d'un joueur de façon compréhensible pour un humain.
\item\verb|string player_to_string(uint8 player)| Représentation d'un joueur de façon compréhensible pour un humain.
\item\verb|string move_to_string(uint16 m)| Représentation d'un coup jouable de façon compréhensible pour un humain.
\item\verb|string move_to_string(uint16 m)| Représentation d'un coup jouable de façon compréhensible pour un humain.
\item\verb|string to_string()| Représentation de l'état actuel du jeu de façon compréhensible pour un humain.
\item\verb|string to_string()| Représentation de l'état actuel du jeu de façon compréhensible pour un humain.