diff --git a/LaTex/Soutenance/Rapport_en_LaTeX/Soutenance.pdf b/LaTex/Soutenance/Rapport_en_LaTeX/Soutenance.pdf index 39b9cdb1ba9521b1791f8f52d3ff96a84885a71d..07684bc7fec5cd9467b851ed4ef166a79e057a56 100644 Binary files a/LaTex/Soutenance/Rapport_en_LaTeX/Soutenance.pdf and b/LaTex/Soutenance/Rapport_en_LaTeX/Soutenance.pdf differ diff --git a/LaTex/Soutenance/Rapport_en_LaTeX/Soutenance.tex b/LaTex/Soutenance/Rapport_en_LaTeX/Soutenance.tex index 8498cfcec0391a78b4f487d282c9f0bdbe2b2b73..9fd7a31cf8d83194aee1ecf61fbffceffe7dd115 100644 --- a/LaTex/Soutenance/Rapport_en_LaTeX/Soutenance.tex +++ b/LaTex/Soutenance/Rapport_en_LaTeX/Soutenance.tex @@ -1,21 +1,20 @@ \documentclass[11pt]{beamer} -\usetheme{Montpellier} +\usetheme{CambridgeUS} \usecolortheme{beaver} \usepackage[utf8]{inputenc} -%\usepackage[T1]{fontenc} -%\usepackage[french]{babel} +\usepackage[T1]{fontenc} +\usepackage[french]{babel} \usepackage{graphicx} -\usepackage{subcaption} -\author[Bariatti Gasté Le Lebouc]{Francesco BARIATTI \and Adrien GASTÉ \and Mikael LE \and Romain LEBOUC} -\title[Intelligence Artificielle - Monte Carlo Tree Search]{Étude Pratique : Développement d’une Intelligence Artificielle à base de l’algorithme Monte Carlo Tree Search} +\author[Bariatti - Gasté - Le - Lebouc]{Francesco BARIATTI \and Adrien GASTÉ \\ \and Mikael LE \and Romain LEBOUC} +\title[MCTS - Jeu du Pingouin]{Étude Pratique : Développement d’une Intelligence Artificielle à base de l’algorithme Monte Carlo Tree Search} \logo{\includegraphics[width=0.2\linewidth]{images/insa}} -\institute{Encadrant : Pascal GARCIA} -\date[2015/16]{Année scolaire 2015/16} +\institute[]{Encadrant : Pascal GARCIA} +\date[Année 2015/16]{Année scolaire 2015/16} \AtBeginSection[] { @@ -24,6 +23,8 @@ \end{frame} } +\setbeamertemplate{caption}{\raggedright\insertcaption\par} + \begin{document} @@ -32,118 +33,218 @@ \end{frame} \begin{frame}{Sommaire} +\setcounter{tocdepth}{1} \tableofcontents +\setcounter{tocdepth}{2} \end{frame} \section{Introduction} \subsection{Notre projet} \begin{frame}{Notre projet} -\begin{itemize} - \item Développer une intelligence artificielle basée sur le Monte Carlo Tree Search (MCTS) - \item Transposer le Jeu du Pinguin dans un environnement virtuel -\end{itemize} -\begin{figure} - \includegraphics[scale=0.2]{images/boite_jeu} -\end{figure} + \begin{itemize} + \item Développer une intelligence artificielle basée sur le Monte Carlo Tree Search (MCTS) + \item Transposer le Jeu du Pinguin dans un environnement virtuel + \end{itemize} + \begin{figure} + \includegraphics[scale=0.2]{images/boite_jeu} + \end{figure} \end{frame} \subsection{Le Jeu du Pingouin} \begin{frame}{Principe du jeu} -\begin{itemize} -\item Jeu de plateau pour 2 à 4 joueurs. + \begin{itemize} + \item Jeu de plateau pour 2 à 4 joueurs. + + \item 60 cases et 4 pingouins par joueur. \\ + Une case peut avoir 1, 2 ou 3 poissons. + \item Le joueur avec les plus de poissons à la fin du jeu gagne + \item Le jeu se termine quand \textbf{aucun} joueur ne peut plus bouger + \end{itemize} -\item 60 cases et 4 penguins par joueur. Une case peut avoir 1, 2 ou 3 poissons. -\item Le joueur avec les plus de poissons à la fin du jeu gagne -\item Le jeu se termine quand \textbf{aucun} joueur ne peut bouger -\end{itemize} -\begin{figure} -\includegraphics[scale=0.05]{images/tiles} -\caption{Les 3 types de cases} -\end{figure} + \begin{figure} + \includegraphics[scale=0.05]{images/tiles} + \caption{Les 3 types de cases} + \end{figure} \end{frame} -\begin{frame}{Règles additionnelles} -\begin{itemize} -\item Un pingouin peut bouger dans les 6 directions possibles tant qu'il ne rencontre pas d'obstacles. -\item Le joueur gagne la case d'où le pingouin part. -\item Les obstacles sont: +\begin{frame}{Règles de déplacement} + \begin{block}{Règle de base} + \begin{itemize} + \item Un pingouin peut bouger dans les 6 directions de l'hexagone tant qu'il ne rencontre pas d'obstacles. + \item Le joueur gagne la case d'où le pingouin part. + \item Si un joueur ne peut plus bouger, il passe son tour. + \end{itemize} + \end{block} + + Les obstacles sont: \begin{itemize} - \item Un pingouin (allié comme adverse) - \item Un trou crée par l'absence de case + \item Un pingouin (allié comme adverse) + \item Un trou crée par l'absence de case \end{itemize} -\item Si un joueur ne peut plus bouger, il passe son tour. -\end{itemize} +\end{frame} + +\subsection{Le Monte Carlo Tree Search} +\begin{frame}{Le Monte Carlo Tree Search} + \begin{itemize} + \item Algorithme de recherche de décision utilisé dans jeux tels que le Go ou Ms. Pacman + \item Simule un grand nombre de parties pour construire un arbre + \item Choisit le meilleur chemin dans l'arbre construit + \end{itemize} + + \begin{figure} + \includegraphics[width=0.4\linewidth]{images/go_board} + \end{figure} +\end{frame} + +\begin{frame} + \begin{itemize} + \item À chaque tour l'IA simule des millions de boucles pour construire l'arbre + \item Chaque boucle consiste en 4 étapes + \end{itemize} + + \begin{figure} + \includegraphics[width=\linewidth]{images/mcts} + \end{figure} + \end{frame} \subsection{Objectifs} \begin{frame}{Objectifs du projet} -\begin{itemize} -\item Comprendre le MCTS et son code en C++ -\item Implementer les règles du jeu de façon efficace \\ - $ \to $ bitboards -\item Créer une interface graphique -\end{itemize} + \begin{itemize} + \item Comprendre le MCTS et son code en C++ + \item Implementer les règles du jeu de façon efficace \\ + $ \to $ bitboards + \item Créer une interface graphique + \end{itemize} + + \begin{figure} + \includegraphics[width=0.4\linewidth]{images/reflection} + \end{figure} \end{frame} -\subsection{Le Monte Carlo Tree Search} -\begin{frame}{Le Monte Carlo Tree Search} -\begin{itemize} -\item Algorithme de recherche de décision utilisé dans jeux tels que le Go ou Ms. Pacman -\item Simule un grand nombre de parties pour construire un arbre -\item Choisit le meilleur chemin dans l'arbre construit -\end{itemize} +\section{Implémentation du MCTS pour le Jeu du Pingouin} +\subsection{Le plateau} +\begin{frame}{Le plateau} + \begin{itemize} + \item Position 0 en bas à droite, 59 en haut à gauche + \item Comptage ligne par ligne en montant + \end{itemize} + \begin{figure} + \includegraphics[scale=0.27]{images/board} + \end{figure} -%\begin{figure} -% \begin{subfigure}[b] -% \includegraphics[width=0.4\linewidth]{images/go_board} -% \end{subfigure} -% \begin{subfigure} -% \includegraphics[width=0.4\linewidth]{images/go_board} -% \end{subfigure} -%\end{figure} \end{frame} -\begin{frame} -\begin{itemize} -\item À chaque tour l'IA simule des millions de boucles pour construire l'arbre -\item Chaque boucle consiste en 4 étapes -\end{itemize} -\begin{figure} -\includegraphics[width=\linewidth]{images/mcts} -\end{figure} +\begin{frame}{Plateau en bitboard} + \begin{itemize} + \item 3 bitboards: un par type de case + \end{itemize} + + \begin{figure} + \includegraphics[scale=0.3]{images/bitboard_creation} \\ + \caption{Bitboard obtenu: $10010001 = 145$} + \end{figure} + \begin{itemize} + \item Opérations binaires pour avoir les obstacles + \end{itemize} \end{frame} -\section[Implémentation]{Implémentation du MCTS pour le Jeu du Pingouin} -\subsection{Le Plateau} -\begin{frame} -huhu +\begin{frame}{Gestion des déplacements} + \begin{itemize} + \item Déplacements calculés avec des formules simples sur la position + \end{itemize} + + \begin{figure} + \includegraphics[scale=0.17]{images/moves} + \end{figure} + + \begin{itemize} + \item Bords reconnus grâce à l'opérateur modulo «\%» + \end{itemize} + \end{frame} + \subsection{Les pingouins} -\begin{frame} -TODO +\begin{frame}{Les pingouins} + \begin{itemize} + \item 1 pingouin: 32 bits + \item Chaque « partie » interprétée différemment + \end{itemize} + + \begin{figure} + \includegraphics[width=\linewidth]{images/penguin_bitboard} + \end{figure} + + \begin{itemize} + \item Par exemple, pour avoir le nombre de coups: \texttt{(penguin \& 4032) >> 6 } + \end{itemize} \end{frame} \section{Interface graphique} + +\subsection{Interaction IA/Interface} +\begin{frame}{Interaction avec l'IA} + \begin{itemize} + \item Chaque tour l'IA communique l'état de la partie\\ + $\to$ format JSON par clarté + \item L'IA attend un numéro de coup parmi les coups possibles pour le joueur + \end{itemize} + + \begin{figure} + \includegraphics[scale=0.3]{images/IA_comm} + \end{figure} + + \begin{itemize} + \item Très difficile à interpréter pour un humain + \end{itemize} + +\end{frame} + +\begin{frame}{Interaction avec l'IA} + \begin{itemize} + \item L'interface graphique lance le programme et écoute sa sortie standard + \item Les actions du joueur sont envoyées à l'entrée standard + \end{itemize} + + \begin{figure} + \includegraphics[scale=0.3]{images/IA_GUI} + \end{figure} +\end{frame} + \subsection{Architecture MVC} -\begin{frame} -TODO +\begin{frame}{Modèle - Vue - Contrôleur} + \begin{itemize} + \item Un modèle qui contient l'état du jeu \\ + $\to$ des fonctions pour accéder facilement aux valeurs + \item Une vue pour afficher de façon claire l'état + \item Un contrôleur pour associer des actions aux clics du joueur + \end{itemize} + + \begin{figure} + \includegraphics[scale=0.25]{images/board_game} + \end{figure} + + \end{frame} -\subsection{Intéraction IA/Interface} -\begin{frame} -TODO +\section{Démonstration} +\begin{frame}{Let's play!} + \begin{figure} + \includegraphics[scale=0.6]{images/pingual} + \caption{Nut nut} + \end{figure} + \end{frame} -\section{Press start to play} \begin{frame} - + \titlepage \end{frame} -\end{document} \ No newline at end of file +\end{document} diff --git a/LaTex/Soutenance/Rapport_en_LaTeX/images/IA_GUI.png b/LaTex/Soutenance/Rapport_en_LaTeX/images/IA_GUI.png new file mode 100644 index 0000000000000000000000000000000000000000..41bd5888811b7dd8f8e471e868ddeeb6607a3a5a Binary files /dev/null and b/LaTex/Soutenance/Rapport_en_LaTeX/images/IA_GUI.png differ diff --git a/LaTex/Soutenance/Rapport_en_LaTeX/images/IA_comm.png b/LaTex/Soutenance/Rapport_en_LaTeX/images/IA_comm.png new file mode 100644 index 0000000000000000000000000000000000000000..a3dfeff3d0b1bca1714848a69eca47d403501685 Binary files /dev/null and b/LaTex/Soutenance/Rapport_en_LaTeX/images/IA_comm.png differ diff --git a/LaTex/Soutenance/Rapport_en_LaTeX/images/bitboard_creation.png b/LaTex/Soutenance/Rapport_en_LaTeX/images/bitboard_creation.png new file mode 100644 index 0000000000000000000000000000000000000000..d5fa3387493c9d0675aeb9e81970d415d6880f13 Binary files /dev/null and b/LaTex/Soutenance/Rapport_en_LaTeX/images/bitboard_creation.png differ diff --git a/LaTex/Soutenance/Rapport_en_LaTeX/images/board.png b/LaTex/Soutenance/Rapport_en_LaTeX/images/board.png new file mode 100644 index 0000000000000000000000000000000000000000..7c680ea5be5ddd482fe80c707ddd062bfb946b6e Binary files /dev/null and b/LaTex/Soutenance/Rapport_en_LaTeX/images/board.png differ diff --git a/LaTex/Soutenance/Rapport_en_LaTeX/images/board_game.png b/LaTex/Soutenance/Rapport_en_LaTeX/images/board_game.png new file mode 100644 index 0000000000000000000000000000000000000000..72fd13fdc4ca77d2808139db2e4bcd2f0d7e432b Binary files /dev/null and b/LaTex/Soutenance/Rapport_en_LaTeX/images/board_game.png differ diff --git a/LaTex/Soutenance/Rapport_en_LaTeX/images/moves.png b/LaTex/Soutenance/Rapport_en_LaTeX/images/moves.png new file mode 100644 index 0000000000000000000000000000000000000000..688e422a8b92d66a3a9c1082df6e47d3779fd727 Binary files /dev/null and b/LaTex/Soutenance/Rapport_en_LaTeX/images/moves.png differ diff --git a/LaTex/Soutenance/Rapport_en_LaTeX/images/penguin_bitboard.png b/LaTex/Soutenance/Rapport_en_LaTeX/images/penguin_bitboard.png new file mode 100644 index 0000000000000000000000000000000000000000..45f21a8c4818638f4de992ca232c654765c40a45 Binary files /dev/null and b/LaTex/Soutenance/Rapport_en_LaTeX/images/penguin_bitboard.png differ diff --git a/LaTex/Soutenance/Rapport_en_LaTeX/images/pingual.jpg b/LaTex/Soutenance/Rapport_en_LaTeX/images/pingual.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2e607bd4f49573880eabd9d39fb929aeb2e1fff Binary files /dev/null and b/LaTex/Soutenance/Rapport_en_LaTeX/images/pingual.jpg differ diff --git a/LaTex/Soutenance/Rapport_en_LaTeX/images/reflection.jpg b/LaTex/Soutenance/Rapport_en_LaTeX/images/reflection.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d64c85e836d56a21db7d60befa470c90fd15834 Binary files /dev/null and b/LaTex/Soutenance/Rapport_en_LaTeX/images/reflection.jpg differ