add imgs and some info in the report
This commit is contained in:
parent
ef015aea80
commit
7f20ceb46e
4 changed files with 83 additions and 27 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -3,3 +3,5 @@ othello
|
|||
|
||||
report/*
|
||||
!report/*.tex
|
||||
!report/imgs
|
||||
report/imgs/*.png
|
||||
|
|
|
@ -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}
|
||||
|
|
7
report/imgs/SOURCES.md
Normal file
7
report/imgs/SOURCES.md
Normal file
|
@ -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 |
|
BIN
report/imgs/othello_impl_player.jpg
Normal file
BIN
report/imgs/othello_impl_player.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
Reference in a new issue