2023-03-19 20:32:28 +01:00
|
|
|
\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
|
2023-04-07 15:59:12 +02:00
|
|
|
|
|
|
|
% 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")
|
|
|
|
}
|
|
|
|
}
|
2023-03-19 20:32:28 +01:00
|
|
|
|
|
|
|
\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}
|
2023-04-07 15:59:12 +02:00
|
|
|
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 $x$ fois en :
|
|
|
|
\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}
|
2023-03-19 20:32:28 +01:00
|
|
|
|
2023-04-07 15:59:12 +02:00
|
|
|
\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.
|
2023-03-19 20:32:28 +01:00
|
|
|
|
|
|
|
\end{document}
|