\documentclass{article} \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} % images \usepackage{caption} \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{\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} \maketitle \tableofcontents \clearpage \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{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. 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} 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]{Algorithme minimax} \subsubsection{Algorithme} % TODO expliquer fonctionnement minimax \subsubsection{Exemple d'utilisation} % TODO expliquer comment l'utiliser \subsubsection{Problèmes rencontrés} % TODO avec code d'illustration \subsection[Alpha-Bêta]{Élagage alpha-bêta} \subsubsection{Algorithme} % TODO expliquer fonctionnement alphabeta \subsubsection{Exemple d'utilisation} % TODO expliquer comment l'utiliser \subsubsection{Problèmes rencontrés} % TODO avec code d'illustration \section{Comparaison d'efficacité} % TODO \section{Discussion} % TODO \end{document}