add tests to report

This commit is contained in:
Mylloon 2022-12-05 00:23:40 +01:00
parent 6302ed8b55
commit cf4c34df3a
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -145,7 +145,7 @@ spécifique à un joueur humain.
\-- utils.c \-- utils.c
\end{minted} \end{minted}
\end{minipage} \end{minipage}
\caption{Arborescence du projet sans l'implémentation des IA} \caption{Arborescence du projet sans l'implémentation des IA et tests}
\label{tree:project} \label{tree:project}
\end{figure} \end{figure}
@ -174,7 +174,7 @@ et elle jouera un coup (cf. \autoref{cod:minimax_def}).
\begin{minipage}{0.8\textwidth} \begin{minipage}{0.8\textwidth}
\begin{minted}[autogobble,linenos]{c} \begin{minted}[autogobble,linenos]{c}
/* Joue le tour d'après l'algorithme minimax */ /* Joue le tour d'après l'algorithme minimax */
void action_joueur_minimax(Jeu *jeu, const int couleur); void action_joueur_minimax(Jeu *jeu, const int couleur, const int profondeur);
\end{minted} \end{minted}
\begin{minted}[autogobble,linenos,firstnumber=last]{c} \begin{minted}[autogobble,linenos,firstnumber=last]{c}
@ -202,10 +202,10 @@ du jeu (cf. \autoref{cod:minimax_play}).
// Si le joueur peut jouer // Si le joueur peut jouer
if (tour->couleur == NOIR) { if (tour->couleur == NOIR) {
// Tour du joueur minimax // Tour du joueur minimax
action_joueur_minimax(jeu, tour->couleur); action_joueur_minimax(jeu, tour->couleur, profondeur);
} else { } else {
// Tour du joueur humain // Tour du joueur humain
action_joueur_humain(jeu, tour->couleur); action_joueur_humain(jeu, tour->couleur, profondeur);
} }
} }
@ -214,7 +214,7 @@ du jeu (cf. \autoref{cod:minimax_play}).
} }
\end{minted} \end{minted}
\end{minipage} \end{minipage}
\caption{Extrait modifié de \texttt{jeu.c}, avec minimax jouant les noirs et un humain les blancs} \caption{Extrait simplifié de \texttt{jeu.c}, avec minimax jouant les noirs et un humain les blancs}
\label{cod:minimax_play} \label{cod:minimax_play}
\end{figure} \end{figure}
@ -332,16 +332,103 @@ même technique pour bêta (cf. \autoref{cod:elagage_beta}).
\end{figure} \end{figure}
\section{Comparaison d'efficacité} \section{Comparaison d'efficacité}
TODO! Le fichier \texttt{text.h} déclare une série de fonctions qui permet de tester
minimax et alpha-bêta.
Je teste 2 facette des IA, la rapidité d'exécution et le taux de victoire des
IA (cf. \autoref{txt:tests_res}).
\label{sec:comp_eff}
\section{Discussion} La partie test de rapidité permet de montrer que l'implémentation d'alpha-bêta
fonctionne car a profondeur égale, alpha-bêta est beaucoup plus rapide que
minimax. Je n'ai d'ailleurs pas testé minimax sur d'aussi grandes profondeurs
qu'alpha-bêta car cela prenait trop de temps. Le temps total des tests dure
environ 4 minutes sur ma machine.
Cette partie montre aussi qu'il n'y a pas grande différence en temps entre
minimax et alpha-bêta pour une profondeur inférieur ou égal à 4.
La partie sur le taux de victoire permet de montrer qu'à profondeur égale,
alpha-bêta et minimax ne se démarquent pas, et que c'est bien la différence de
profondeur qui donne l'avantage.
En effet, là où minimax prend beaucoup de temps à partir d'une profondeur de 5,
alpha-bêta peut aller jusqu'à une profondeur de 8.
À noter que lors des tests, je fais jouer l'algorithme contre lui-même donc en
réalité, l'algorithme prend 2x moins de temps que le temps indiqué, vu qu'il joue
pour les 2 joueurs. En revanche ça ne veut pas dire que l'on peut doubler la
profondeur car l'augmentation n'est pas linéaire.
\section{Conclusion}
Le problème de mon implémentation est la fonction d'évaluation qui regarde juste Le problème de mon implémentation est la fonction d'évaluation qui regarde juste
le nombre de points gagnés/perdus. En ne prenant pas en compte par exemple si le le nombre de points gagnés/perdus. En ne prenant pas en compte par exemple si le
pion placé est sur un coin ou non (le coin étant une position avantageuse). pion placé est sur un coin ou non (le coin étant une position avantageuse).
Enfin, je ne teste pas la quantité de mémoire utilisés par les algorithmes.
\newpage \newpage
\appendix \appendix
\section*{Appendix} \section*{Appendix}
\listoffigures \listoffigures
\vspace{1cm}
\begin{figure}[h]
\centering
\begin{minipage}{1\textwidth}
\begin{minted}[autogobble,linenos,fontsize=\footnotesize]{text}
$ ./othello -t
\end{minted}
\begin{minted}[autogobble,linenos,fontsize=\footnotesize,firstnumber=last]{text}
Lancement des tests, on va jusqu'à une profondeur de 8 avec une moyenne de 5 répétitions.
On fait jouer alpha-bêta contre lui-même puis minimax contre lui-même.
Profondeur de 1 (moyenne de 5 tests) -> alpha-bêta = 0.001742s | minimax = 0.001829s | différence (m - a) = 0.000087s
Profondeur de 2 (moyenne de 5 tests) -> alpha-bêta = 0.007442s | minimax = 0.011332s | différence (m - a) = 0.003890s avec le précédent = 0.003803s
Profondeur de 3 (moyenne de 5 tests) -> alpha-bêta = 0.029347s | minimax = 0.073701s | différence (m - a) = 0.044354s avec le précédent = 0.040464s
Profondeur de 4 (moyenne de 5 tests) -> alpha-bêta = 0.117613s | minimax = 0.344193s | différence (m - a) = 0.226580s avec le précédent = 0.182226s
Profondeur de 5 (moyenne de 5 tests) -> alpha-bêta = 0.524146s | minimax = 4.843884s | différence (m - a) = 4.319738s avec le précédent = 4.093158s
Profondeur de 6 (moyenne de 5 tests) -> alpha-bêta = 1.507593s
Profondeur de 7 (moyenne de 5 tests) -> alpha-bêta = 23.077325s
Profondeur de 8 (moyenne de 5 tests) -> alpha-bêta = 13.677932s
\end{minted}
\begin{minted}[autogobble,linenos,fontsize=\footnotesize,firstnumber=last]{text}
Alpha-bêta a gagné (profondeur minimax = 1 vs 1 = profondeur alphabêta) en tant que blanc
Minimax a gagné (profondeur minimax = 2 vs 1 = profondeur alphabêta) en tant que noir
Minimax a gagné (profondeur minimax = 3 vs 1 = profondeur alphabêta) en tant que noir
Minimax a gagné (profondeur minimax = 4 vs 1 = profondeur alphabêta) en tant que noir
Alpha-bêta a gagné (profondeur minimax = 1 vs 2 = profondeur alphabêta) en tant que noir
Minimax a gagné (profondeur minimax = 2 vs 2 = profondeur alphabêta) en tant que blanc
Alpha-bêta a gagné (profondeur minimax = 3 vs 2 = profondeur alphabêta) en tant que noir
Minimax a gagné (profondeur minimax = 4 vs 2 = profondeur alphabêta) en tant que blanc
Alpha-bêta a gagné (profondeur minimax = 1 vs 3 = profondeur alphabêta) en tant que blanc
Minimax a gagné (profondeur minimax = 2 vs 3 = profondeur alphabêta) en tant que noir
Alpha-bêta a gagné (profondeur minimax = 3 vs 3 = profondeur alphabêta) en tant que blanc
Minimax a gagné (profondeur minimax = 4 vs 3 = profondeur alphabêta) en tant que noir
Alpha-bêta a gagné (profondeur minimax = 1 vs 4 = profondeur alphabêta) en tant que noir
Alpha-bêta a gagné (profondeur minimax = 2 vs 4 = profondeur alphabêta) en tant que noir
Alpha-bêta a gagné (profondeur minimax = 3 vs 4 = profondeur alphabêta) en tant que noir
Alpha-bêta a gagné (profondeur minimax = 4 vs 4 = profondeur alphabêta) en tant que noir
Minimax a gagné (profondeur minimax = 1 vs 5 = profondeur alphabêta) en tant que noir
Alpha-bêta a gagné (profondeur minimax = 2 vs 5 = profondeur alphabêta) en tant que blanc
Alpha-bêta a gagné (profondeur minimax = 3 vs 5 = profondeur alphabêta) en tant que blanc
Minimax a gagné (profondeur minimax = 4 vs 5 = profondeur alphabêta) en tant que noir
Alpha-bêta a gagné (profondeur minimax = 1 vs 6 = profondeur alphabêta) en tant que noir
Alpha-bêta a gagné (profondeur minimax = 2 vs 6 = profondeur alphabêta) en tant que noir
Alpha-bêta a gagné (profondeur minimax = 3 vs 6 = profondeur alphabêta) en tant que noir
Alpha-bêta a gagné (profondeur minimax = 4 vs 6 = profondeur alphabêta) en tant que noir
Nombre totale de parties : 24.
Alpha-bêta a gagné 15 fois.
Minimax a gagné 9 fois.
Il y a eu 0 égalités.
\end{minted}
\begin{minted}[autogobble,linenos,fontsize=\footnotesize,firstnumber=last]{text}
________________________________________________________
Executed in 234.85 secs fish external
usr time 234.83 secs 62.00 micros 234.83 secs
sys time 0.02 secs 105.00 micros 0.02 secs
\end{minted}
\end{minipage}
\caption{Résultat des tests, sous commande \texttt{time} (cf. \autoref{sec:comp_eff})}
\label{txt:tests_res}
\end{figure}
\end{document} \end{document}