diff --git a/.gitignore b/.gitignore index 24005c1..82d5ce7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ othello report/* !report/*.tex +!report/imgs +report/imgs/*.png diff --git a/report/document.tex b/report/document.tex index 0081937..8d9fede 100644 --- a/report/document.tex +++ b/report/document.tex @@ -1,29 +1,27 @@ \documentclass{article} -\renewcommand{\familydefault}{\sfdefault} % police en "sans-serif" \usepackage[T1]{fontenc} % encodage +\renewcommand{\familydefault}{\sfdefault} % police en sans-serif + \usepackage[french]{babel} % langue +\frenchsetup{SmallCapsFigTabCaptions=false} + \usepackage[hidelinks]{hyperref} % liens cliquable dans la table des matières -\usepackage{graphicx} % image +\usepackage{graphicx} % images +\usepackage{caption} -% Donné un label au code -\usepackage[figurename=Code\ Source]{caption} % nom des images - -\usepackage{geometry} % change les dimensions de la page - -\geometry{ % définition taille pages - a4paper, - left=20mm, - top=20mm -} +\usepackage[a4paper, left=20mm, top=20mm]{geometry} % dimensions de la page \usepackage{minted} % intégration code \usemintedstyle{emacs} -\title{Projet - IA pour le jeu d'Othello\thanks{Sujet 35}} -\author{\href{mailto:anri.kennel@etud.univ-paris8.fr}{Anri Kennel}\thanks{Numéro d'étudiant : 20010664}\, (L3-A)\\Algorithmique avancée $\cdot$ Université Paris 8} +\title{Projet - IA pour le jeu d'Othello + \thanks{\href{https://jj.up8.site/AA/ProjetsAA.pdf}{Sujet 35}}} +\author{\href{mailto:anri.kennel@etud.univ-paris8.fr}{Anri Kennel} + \thanks{Numéro d'étudiant : 20010664}\, (L3-A) + \\Algorithmique avancée $\cdot$ Université Paris 8} \date{Année universitaire 2022-2023} \begin{document} @@ -31,24 +29,73 @@ \tableofcontents \clearpage -\section{Choix faits} -Ce projet présente une implémentation d'un jeu d’Othello et d'une intelligence -artificielle jouant selon un algorithme minimax et d'un élagage alpha-beta. -Il y a aussi une comparaison d'efficacité des IAs à différentes profondeurs de jeu. +\section{Projet} +Ce projet présente une implémentation d'un jeu d’Othello ainsi que deux +intelligences artificielles jouant; l'une selon un algorithme minimax et l'autre +via élagage alpha-bêta. Il y a aussi une comparaison d'efficacité des IA à +différentes profondeurs de jeu. \section{Implémentation} \subsection{Othello} -\subsubsection{Mode d'emploi} -% TODO expliquer règles du jeu +\subsubsection{Règles du jeu} +L'Othello est un jeu qui se joue sur un plateau de 8x8 où deux couleurs, les noirs +et les blancs s'affrontent. Les noirs commencent la partie. Quand aucun joueur +ne peut jouer, la partie s'arrête. -\subsubsection{Exemple d'utilisation} -% TODO expliquer comment jouer +Au début d'une partie le plateau ressemble à la \autoref{fig:init}. + +\begin{figure}[h] + \centering + \includegraphics[width=0.35\textwidth]{imgs/othello_init.png} + \caption{Début d'une partie} + \label{fig:init} +\end{figure} + +\subsubsection{Exemple d'une partie} +Chaque joueur doit poser un pion de sa couleur sur une case vide de l’othellier, +il faut prendre en sandwich les pions ennemis, peu importe la direction. Une fois +posé, les pions prient en sandwich sont récupérés par le joueur qui vient de jouer. + +Dans la configuration du début, les cases pouvant être joué par les noirs sont +indiqués en rouge dans la \autoref{fig:prem}. + +\begin{figure}[h] + \centering + \includegraphics[width=0.35\textwidth]{imgs/othello_premiercoup.png} + \caption{Possibilités au premier coup} + \label{fig:prem} +\end{figure} + +Mon implémentation du jeu indique au joueur les coups possibles (c'est-à-dire les +cases rouges). Le joueur doit indiquer les coordonnées où il veut poser son jeton +et les changements se font automatiquement. Chaque joueur joue chacun son tour et +passe son tour si aucun coup lui est possible. La partie s'arrête si le plateau +est plein ou si aucun joueur ne peut jouer, cf. \autoref{fig:human}. Les jetons +blancs sont notés \texttt{B} et les jetons noirs \texttt{N}. + +\begin{figure}[h] + \centering + \includegraphics[width=0.35\textwidth]{imgs/othello_impl_player.jpg} + \caption{Demande au joueur de jouer} + \label{fig:human} +\end{figure} + +Si un coup illégale est joué, le jeu refuse le coup et demande au joueur de +choisir un autre coup. \subsubsection{Problèmes rencontrés} -% TODO avec code d'illustration +Mon enjeu numéro 1 était d'éviter tout problème de mémoire. Pour cela dans le +Makefile il y a un label \texttt{dev} qui permet d'ajouter plein de flags pour +\texttt{gcc}, notamment \texttt{fanalyzer} et \texttt{fsanitize=undefined} qui +permettent de trouver plein de problèmes relatifs à la mémoire. Aussi j'ai utilisé +\texttt{Valgrind} (avec les flags \texttt{g} et \texttt{Og} pour \texttt{gcc} et +les flags \texttt{leak-check=full} \texttt{show-leak-kinds=all} +\texttt{track-origins=yes} \texttt{s} pour \texttt{Valgrind}) me permettant +d'avoir un maximum d'avertissements et d'informations me permettant de débugger +tous les problèmes. -\subsection{Minimax} -\subsubsection{Mode d'emploi} +\subsection[Minimax]{Algorithme minimax} +\subsubsection{Algorithme} % TODO expliquer fonctionnement minimax \subsubsection{Exemple d'utilisation} @@ -57,8 +104,8 @@ Il y a aussi une comparaison d'efficacité des IAs à différentes profondeurs d \subsubsection{Problèmes rencontrés} % TODO avec code d'illustration -\subsection{Alpha-Beta} -\subsubsection{Mode d'emploi} +\subsection[Alpha-Bêta]{Élagage alpha-bêta} +\subsubsection{Algorithme} % TODO expliquer fonctionnement alphabeta \subsubsection{Exemple d'utilisation} diff --git a/report/imgs/SOURCES.md b/report/imgs/SOURCES.md new file mode 100644 index 0000000..5252cbf --- /dev/null +++ b/report/imgs/SOURCES.md @@ -0,0 +1,7 @@ +Certains fichiers (.png) ne sont pas dans le dépôt git, il faut les récupérer +via les liens suivants : + +| Fichier | Lien Excalidraw | +| ------------------: | :------------------------------------------------------------------------ | +| othello_init | https://excalidraw.com/#json=G8K82bcDU0fjclbaAS7Zj,O0OXSinCBSLMexO4Lo-V5w | +| othello_premiercoup | https://excalidraw.com/#json=foL0ohpx5orP46eKro8a8,bv_ao6n9RhB7vJP41HjaOQ | diff --git a/report/imgs/othello_impl_player.jpg b/report/imgs/othello_impl_player.jpg new file mode 100644 index 0000000..08d4754 Binary files /dev/null and b/report/imgs/othello_impl_player.jpg differ