From cf4c34df3afebc9502450203b29cbca73064a134 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Mon, 5 Dec 2022 00:23:40 +0100 Subject: [PATCH] add tests to report --- report/document.tex | 101 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 94 insertions(+), 7 deletions(-) diff --git a/report/document.tex b/report/document.tex index e563ab4..35b0388 100644 --- a/report/document.tex +++ b/report/document.tex @@ -145,7 +145,7 @@ spécifique à un joueur humain. \-- utils.c \end{minted} \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} \end{figure} @@ -174,7 +174,7 @@ et elle jouera un coup (cf. \autoref{cod:minimax_def}). \begin{minipage}{0.8\textwidth} \begin{minted}[autogobble,linenos]{c} /* 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} \begin{minted}[autogobble,linenos,firstnumber=last]{c} @@ -202,10 +202,10 @@ du jeu (cf. \autoref{cod:minimax_play}). // Si le joueur peut jouer if (tour->couleur == NOIR) { // Tour du joueur minimax - action_joueur_minimax(jeu, tour->couleur); + action_joueur_minimax(jeu, tour->couleur, profondeur); } else { // 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{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} \end{figure} @@ -332,16 +332,103 @@ même technique pour bêta (cf. \autoref{cod:elagage_beta}). \end{figure} \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 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). +Enfin, je ne teste pas la quantité de mémoire utilisés par les algorithmes. + \newpage \appendix \section*{Appendix} \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}