Skip to content
Snippets Groups Projects
Commit a983c44d authored by Romain Lebouc's avatar Romain Lebouc
Browse files
parents 68d79045 fa4e9c03
No related branches found
No related tags found
No related merge requests found
\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
%Package utilisation accents
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PACKAGES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{graphicx}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[french]{babel}
\setlength{\voffset} {-0.54cm}
\setlength{\hoffset} {-0,04cm}
\setlength{\textwidth} {14cm}
\setlength{\textheight} {24cm}
\setlength{\oddsidemargin} {1cm}
\setlength{\evensidemargin} {1cm}
\setlength{\marginparsep} {0cm}
\setlength{\marginparwidth} {0cm}
\setlength{\topmargin} {0cm}
\setlength{\headheight} {0,45cm}
\setlength{\headsep} {0,57cm}
%\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[hidelinks]{hyperref}
%\usepackage[french]{babel}
%\setlength{\voffset} {-0.54cm}
%\setlength{\hoffset} {-0,04cm}
%\setlength{\textwidth} {14cm}
%\setlength{\textheight} {24cm}
%\setlength{\oddsidemargin} {1cm}
%\setlength{\evensidemargin} {1cm}
%\setlength{\marginparsep} {0cm}
%\setlength{\marginparwidth} {0cm}
%\setlength{\topmargin} {0cm}
%\setlength{\headheight} {0,45cm}
%\setlength{\headsep} {0,57cm}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......@@ -27,43 +27,43 @@
\title{ \textbf{Étude Pratique : Développement d'une Intelligence Artificielle
à base de l'algorithme Monte Carlo Tree Search} }
\markright{Étude Pratique : Développement d'une Intelligence Artificielle
à base de l'algorithme Monte Carlo Tree Search}
% Pour avoir le titre de l'expose sur chaque page
\author{Francesco \textsc{BARIATTI}, Mikael \textsc{LE}, \\
Romain \textsc{LEBOUC}, Adrien \textsc{GASTÉ} \\
\author{Francesco \textsc{BARIATTI} \and Adrien \textsc{GASTÉ} \and Mikael \textsc{LE} \and Romain \textsc{LEBOUC}
\\
Encadreur : Pascal \textsc{GARCIA}}
Encadrant : Pascal \textsc{GARCIA}}
\date{2015 - 2016}
\date{2015 - 2016}
\begin{document}
\maketitle
\thispagestyle{empty}
\pagenumbering{gobble}
\newpage
\tableofcontents
\newpage
\pagenumbering{arabic}
\section{Introduction}
\smallbreak Les études pratiques sont des projets réalisés chaque année pas les élèves du département Informatique de l’INSA de Rennes qui s’étalent sur 10 mois.
\smallbreak Cette étude pratique se présente sous la forme d'une Intelligence Artificielle (IA) à créer pour un jeu de plateau, qui sera jouable via une interface graphique.
Les études pratiques sont des projets réalisés chaque année pas les élèves du département Informatique de l’INSA de Rennes qui s’étalent sur 10 mois.
Cette étude pratique se présente sous la forme d'une Intelligence Artificielle (IA) à créer pour un jeu de plateau, qui sera jouable via une interface graphique.
\subsection{Le Jeu du Pingouin}
\smallbreak Le Jeu du Pingouin est un jeu de plateau confrontant 2 à 4 joueurs sur un plateau de 60 cases hexagonales, sur lesquelles se trouvent de 1 à 3 poissons, comme présenté dans la figure \ref{Plateau}.
\smallbreak Chaque joueur place 4 pingouins sur le plateau en début de partie. À chaque tour, il en déplace un dans l'une des 6 directions possibles, en récupérant la case sur laquelle le pingouin se trouvait. Il gagne alors autant de points qu'il y a de poissons dessus.
\smallbreak Les pingouins ne peuvent pas passer à travers des autres pingouins (y compris ceux du même joueur) et des trous crées par les déplacements des pions. Lorsqu'un joueur ne peut pas jouer, ceux
Le Jeu du Pingouin est un jeu de plateau confrontant 2 à 4 joueurs sur un plateau de 60 cases hexagonales, sur lesquelles se trouvent de 1 à 3 poissons, comme présenté dans la figure \ref{Plateau}.
Chaque joueur place 4 pingouins sur le plateau en début de partie. À chaque tour, il en déplace un dans l'une des 6 directions possibles, en récupérant la case sur laquelle le pingouin se trouvait. Il gagne alors autant de points qu'il y a de poissons dessus.
Les pingouins ne peuvent pas passer à travers des autres pingouins (y compris ceux du même joueur) et des trous crées par les déplacements des pions. Lorsqu'un joueur ne peut pas jouer, ceux
pouvant encore jouer continuent.
\smallbreak Le jeu se termine lorsque aucun des pingouins ne peut se déplacer, et le joueur avec le plus de points remporte la partie.
Le jeu se termine lorsque aucun des pingouins ne peut se déplacer, et le joueur avec le plus de points remporte la partie.
\begin{figure}[!h]
\centering
......@@ -74,10 +74,11 @@ pouvant encore jouer continuent.
\subsection{L'algorithme Monte-Carlo Tree Search (MCTS)}
\smallbreak Le Monte-Carlo Tree Search est un algorithme de recherche de décision, utilisé dans les jeux tel que le Go ou encore Ms. Pacman.
Le 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.
\smallbreak La construction de cet arbre est composée de 4 étapes :
\begin{itemize}
La construction de cet arbre est composée de 4 étapes :
\begin{itemize}
\item la sélection : En considérant un arbre partiellement construit suite à plusieurs simulations, un chemin est alors choisi par un calcul se servant des valuations aux noeuds, permettant ainsi d'explorer des choix moins bons, jusqu'au dernier noeud qui est une feuille;
ce principe repose sur le tirage aléatoire pondéré.
\item l'expansion : À partir du noeud considéré, il développe ses enfants puis on en choisit un au hasard.
......@@ -90,7 +91,7 @@ Son principe repose sur la simulation de plusieurs millions de parties qui perme
\begin{figure}[!h]
\includegraphics[width=\linewidth]{./Images/MCTS.png}
\caption{Étapes du MCTS}
\label{lol}
\label{mcts}
\end{figure}
L'un des avantages indéniables de l'algorithme est qu'il peut être interrompu à tout moment, le choix de la branche optimale sera fait à partir de l'arbre déjà construit. De plus, C'est un
......@@ -102,54 +103,59 @@ algorithme sans heuristique, c'est à dire qu'il n'a pas besoin de connaître au
\newpage
\section{Étude Pratique}
\subsection{Tâche à réaliser}
\smallbreak La tâche à réaliser est de programmer le jeu du Pingouin en Langage C++ et y implémenter le MCTS pour l'IA. Le mode Joueur contre IA est imposé. Il faut
La tâche à réaliser est de programmer le jeu du Pingouin en Langage C++ et y implémenter le MCTS pour l'IA. Le mode Joueur contre IA est imposé. Il faut
également créer une interface utilisateur pour rendre le programme accessible à tous.
\subsection{Implémentation du MCTS}
\smallbreak L'algorithme à implémenter dans le programme est le MCTS. Il a déjà été programmé par notre encadrant Pascal GARCIA en C++. C'est donc à nous de le faire intéragir avec le programme du jeu afin que
L'algorithme à implémenter dans le programme est le MCTS. Il a déjà été programmé par notre encadrant Pascal GARCIA en C++. C'est donc à nous de le faire intéragir avec le programme du jeu afin que
l'IA choisisse la meilleure solution en fonction du coup fait par le joueur humain.
\subsection{Création d'une interface graphique}
\smallbreak Pour permettre de rendre l'application facile à utiliser, une interface graphique doit être programmée; les intéractions Homme-Machine se font à la souris.
Il n'y a pas de restriction sur la méthode utilisée.
Pour permettre de rendre l'application facile à utiliser, une interface graphique doit être programmée; les intéractions Homme-Machine se font à la souris. Il n'y a pas de restriction sur la méthode utilisée.
\newpage
\section{Réalisation}
\smallbreak 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 2 points différents. Lorsque nous avions l'occasion, nous rencontrions
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 2 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.
\smallbreak Le projet a été effectué à l'aide de Git pour faciliter l'accès aux différentes versions du code.
Le projet a été effectué à l'aide de Git pour faciliter l'accès aux différentes versions du code.
\subsection{Prise en main du MCTS avec le Tic-Tac-Toe}
\smallbreak Afin de comprendre et tester le fonctionnement du MCTS, nous avons décidé, pendant le 1er semestre, de l'implémenter sur un jeu simple, à savoir le Tic-Tac-Toe.
Afin de comprendre et tester le fonctionnement du MCTS, nous avons décidé, pendant le 1er semestre, de l'implémenter sur un jeu simple, à savoir le Tic-Tac-Toe.
Cela nous a également permis d'apprendre à programmer en C++, le langage utilisé pour coder l'algorithme.
\smallbreak Pascal GARCIA nous a conseillé de représenter la grille sous forme de \textit{bitboards} de 16 bits pour optimiser les calculs, l'un représentant les croix et l'autre les cercles.
Pascal GARCIA nous a conseillé de représenter la grille sous forme de \textit{bitboards} de 16 bits pour optimiser les calculs, l'un représentant les croix et l'autre les cercles.
Les états gagnants étaient sous forme d'entiers et lorsque l'un des \textit{bitboards} satisfaisait un de ces états, la partie se terminait.
\subsection{Création de l'IA pour le Jeu du Pingouin}
\smallbreak 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.
\smallbreak Chacun des pingouins a été modélisé par un \textit{bitboard} de 32 bits.
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.
Chacun des pingouins a été modélisé par un \textit{bitboard} de 32 bits.
Le plateau a été représenté à l'aide de 3 \textit{bitboards} de 64 bits (chacun représentant la présence de 1,2 ou 3 poissons sur les cases) que nous avons ensuite complété avec la position des pingouins.
\smallbreak Il a fallu confronter le problème du déplacement des pions qui n'existait pas dans le Tic-Tac-Toe : en effet, il n'a pas été évident de relier déplacement sur le plateau et déplacement et sa représentation
Il a fallu confronter le problème du déplacement des pions qui n'existait pas dans le Tic-Tac-Toe : en effet, il n'a pas été évident de relier déplacement sur le plateau et déplacement et sa représentation
en \textit{bitboard}. La solution retenue a été de numéroter les 60 cases du plateau et de faire correspondre le déplacement de chacune des 6 directions par un calcul arithmétique.
\smallbreak De plus, la modélisation optimale des pingouins a été trouvée difficilement car il a fallu associer plusieurs types d'informations différentes à chacun des pingouins (par exemple, le nombre de déplacements possibles dans une direction).
\begin{figure}[!h]
De plus, la modélisation optimale des pingouins a été trouvée difficilement car il a fallu associer plusieurs types d'informations différentes à chacun des pingouins (par exemple, le nombre de déplacements possibles dans une direction).
\begin{figure}[h!]
\includegraphics[width=\linewidth]{./Images/Structure_Pingouin.png}
\caption{Découpage du \textit{bitboard} pour un pingouin}
\label{pingouin}
\end{figure}
\smallbreak Une solution envisagée a été de mettre chaque type d'informations dans un \textit{bitboard} en particulier, mais cela s'est révélé trop difficile à gérer. Nous avons alors opté de stocker toutes les informations concernant un pingouin dans un \textit{bitboard} personnel.
Une solution envisagée a été de mettre chaque type d'informations dans un \textit{bitboard} en particulier, mais cela s'est révélé trop difficile à gérer. Nous avons alors opté de stocker toutes les informations concernant un pingouin dans un \textit{bitboard} personnel.
\subsection{Intégration de l'interface graphique pour le jeu}
TODO: gui
\newpage
\subsubsection*{Conclusion}
\subsubsection*{Remerciements}
\section{Conclusion}
TODO: conclusion
\subsection{Remerciements}
TODO: remerciements
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment