\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 % Replace oe \usepackage{luacode} \begin{luacode} function fn_oe(s) s = s:gsub("oe", "\\oe{}") return s end \end{luacode} \AtBeginDocument{ \directlua{ luatexbase.add_to_callback("process_input_buffer", fn_oe, "fn_oe") } } \usepackage[a4paper, left=20mm, top=20mm]{geometry} % dimensions de la page \title{\textbf{TP2 - Breakthrough}} \author{Groupe 4\thanks{César PICHON, Florian POSEZ, Omar ANOUAR, Anri KENNEL}\\ \\Intelligence artificielle pour les jeux $\cdot$ Université Paris 8} \date{Année universitaire 2022-2023} \begin{document} \maketitle \tableofcontents \clearpage \section{Particularités} \subsection{Algorithme} L'algorithme Monte Carlo est une méthode de simulation basée sur l'évaluation de résultats aléatoires. Dans le contexte du jeu Breakthrough, l'algorithme est utilisé pour simuler plusieurs parties à partir de chaque état du jeu, afin de déterminer quelle est la meilleure action à jouer à partir de cet état. \vspace{1em} L'algorithme Monte Carlo utilise les étapes suivantes : \begin{enumerate} \item \textbf{Sélection} : on sélectionne un noeud dans l'arbre de recherche en suivant une stratégie de sélection. Dans notre implémentation, la fonction \texttt{mcts\_selection} est utilisée pour choisir un noeud. \item \textbf{Expansion} : on étend l'arbre de recherche en ajoutant des noeuds correspondant aux actions possibles à partir du noeud sélectionné. Dans notre implémentation, la fonction \texttt{mcts\_expansion} est utilisée pour ajouter les noeuds. \item \textbf{Simulation} : on simule un grand nombre de parties à partir du nouveau noeud pour estimer la qualité de l'action associée. Dans notre implémentation, la fonction \texttt{mcts\_simulation} est utilisée pour simuler les parties. \item \textbf{Rétropropagation} : on met à jour les valeurs des noeuds parents en fonction des résultats de la simulation. Dans notre implémentation, la fonction \texttt{mcts\_back\_propagation} est utilisée pour mettre à jour les noeuds parents. \end{enumerate} \subsection{Optimisation} Aucune optimisation particulière n'a été ajoutée à cette implémentation de l'algorithme Monte Carlo. \section{Implémentation} Le joueur \texttt{mcts\_player.cpp} est identique au joueur aléatoire au détail près que le joueur MCTS appelle la fonction \texttt{get\_mcts\_move}. \vspace{1em} Cette méthode de la classe \texttt{bt\_t} initialise un noeud et l'algorithme en appellant l'expansion sur ce noeud. On boucle ensuite pendant 1 seconde : \begin{enumerate} \item copiant le plateau actuel \item selectionne un noeud de l'arbre \item étend l'arbre depuis le noeud selectionné \item simule le jeu en jouant aléatoirement \item propage le résultat à travers tout l'arbre \end{enumerate} \vspace{1em} Une fois ce travail effectué, on selectionne la meilleur coup parmis les enfants du noeud racine en fonction du nombre de simulation jouée. \end{document}