From 7f20ceb46e098a0b4594fbd62efa7468cd19405a Mon Sep 17 00:00:00 2001 From: Mylloon Date: Thu, 1 Dec 2022 16:33:24 +0100 Subject: [PATCH] add imgs and some info in the report --- .gitignore | 2 + report/document.tex | 101 ++++++++++++++++++++-------- report/imgs/SOURCES.md | 7 ++ report/imgs/othello_impl_player.jpg | Bin 0 -> 47076 bytes 4 files changed, 83 insertions(+), 27 deletions(-) create mode 100644 report/imgs/SOURCES.md create mode 100644 report/imgs/othello_impl_player.jpg 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 0000000000000000000000000000000000000000..08d47543642062271110ce243ab06669453bac34 GIT binary patch literal 47076 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

UWJ*qBqfBf;a<10*hiwt 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