# Monte Carlo Hamiltonien

En physique computationnelle et en statistiques, l' algorithme de Monte Carlo hamiltonien (également connu sous le nom de Monte Carlo hybride), est une méthode de Monte Carlo par chaîne de Markov dont l'objectif est d'obtenir une séquence d'échantillons aléatoires qui convergent selon une distribution de probabilité cible, typiquement difficile à échantillonner directement. Cette séquence peut notamment être utilisée pour estimer des intégrales par rapport à une distribution cible (calcul d'espérances mathématiques).
Le Monte Carlo hamiltonien correspond à une instance de l'algorithme de Metropolis – Hastings où les déplacements proposés dans l'espace d'états sont issus d'un processus gouverné par une dynamique hamiltonienne$^,$et simulée à l'aide d'un intégrateur numérique réversible et préservant le volume (généralement la méthode saute-mouton).
Comparé à l'utilisation d'une distribution de proposition de marche aléatoire gaussienne dans l'algorithme Metropolis – Hastings, la méthode de Monte Carlo Hamiltonien réduit la corrélation entre les états échantillonnés successivement en proposant des déplacements vers des états distants qui maintiennent une forte probabilité d'acceptation en raison des propriétés de conservation d'énergie approximatives de la dynamique hamiltonienne simulée avec de l'utilisation d'un intégrateur symplectique . La corrélation réduite signifie que moins d'échantillons de chaîne de Markov sont nécessaires pour approcher les intégrales par rapport à la distribution de probabilité cible pour une erreur de Monte Carlo donnée. L'algorithme a été proposé à l'origine par Simon Duane, Anthony Kennedy, Brian Pendleton et Duncan Roweth en 1987 pour des calculs en chromodynamique quantique sur un réseau .

## Algorithme

Supposons que la distribution cible à échantillonner soit $f(\mathbf {x} )$ et qu'une chaîne d'échantillons $\mathbf {X} _{0},\mathbf {X} _{1},\mathbf {X} _{2},\ldots$ soit requise. Les équations de la mécanique hamiltonienne se lisent
    ${\frac {{\text{d}}x_{i}}{{\text{d}}t}}={\frac {\partial H}{\partial p_{i}}}$
et
    ${\dfrac {{\text{d}}p_{i}}{{\text{d}}t}}=-{\dfrac {\partial H}{\partial x_{i}}}$
où $x_{i}$ et $p_{i}$ sont les $i$ ème composante du vecteur position et impulsion respectivement et où le hamiltonien $H$ est de la forme
    $H(\mathbf {x} ,\mathbf {p} )=U(\mathbf {x} )+{\dfrac {1}{2}}\mathbf {p} ^{\text{T}}M^{-1}\mathbf {p}$
où $U(\mathbf {x} )$ est l' énergie potentielle et $M$ est une matrice symétrique et définie positive. Dans le but d'échantilloner d'une mesure cible $f$, l'énergie potentielle est typiquement donnée par
    $U(\mathbf {x} )=-\ln f(\mathbf {x} )$
Supposons qu'après $n$ étapes, la chaîne soit dans l'état $\mathbf {X} _{n}=\mathbf {x} _{n}$et introduisons $\mathbf {x} _{n}(0)=\mathbf {x} _{n}$ . L'algorithme consiste à proposer un nouvel état $\mathbf {X} _{n+1}^{*}=\mathbf {x} _{n}(L\Delta t)$, où $\mathbf {x} _{n}$ est une approximation numérique de la dynamique hamiltonienne par la méthode saute-mouton avec $\Delta t$ comme pas de discrétisation et où $L$ est un entier positif décrivant le nombre de pas à simuler à chaque étape. Le nouvel état proposé $\mathbf {X} _{n+1}^{*}=\mathbf {x} _{n}(L\Delta t)$ est ensuite accepté ou rejeté selon la règle de l'algorithme de Metropolis – Hastings.
Plus formellement, soit $\mathbf {x} _{n}(0)=\mathbf {x} _{n}$ et soit $\mathbf {p} _{n}(0)$ tiré de la loi gaussienne ${\text{N}}\left(\mathbf {0} ,M\right)$ de moyenne $\mathbf {0}$ et de matrice de covariance $M$. La méthode saute-mouton consiste à faire évoluer les vecteurs position $\mathbf {x} _{n}$ et impulsion $\mathbf {p} _{n}$ après le temps $\Delta t$ de la façon suivante.
    $\mathbf {p} _{n}\left(t+{\dfrac {\Delta t}{2}}\right)=\mathbf {p} _{n}(t)-{\dfrac {\Delta t}{2}}\nabla \left.U(\mathbf {x} )\right|_{\mathbf {x} =\mathbf {x} _{n}(t)}$
    $\mathbf {x} _{n}(t+\Delta t)=\mathbf {x} _{n}(t)+\Delta tM^{-1}\mathbf {p} _{n}\left(t+{\dfrac {\Delta t}{2}}\right)$
    $\mathbf {p} _{n}(t+\Delta t)=\mathbf {p} _{n}\left(t+{\dfrac {\Delta t}{2}}\right)-{\dfrac {\Delta t}{2}}\nabla \left.U(\mathbf {x} )\right|_{\mathbf {x} =\mathbf {x} _{n}(t+\Delta t)}$
Ces équations doivent être appliquées à $\mathbf {x} _{n}(0)$ et $\mathbf {p} _{n}(0)$ à $L$ reprises afin d'obtenir $\mathbf {x} _{n}(L\Delta t)$ et $\mathbf {p} _{n}(L\Delta t)$ .
Comme la méthode saute-mouton est une méthode numérique et ne résout pas exactement les équations de la mécanique hamiltonienne, une étape Metropolis – Hastings est utilisée en complément. La transition de $\mathbf {X} _{n}=\mathbf {x} _{n}$ à $\mathbf {X} _{n+1}$ est donnée par
    $\mathbf {X} _{n+1}|\mathbf {X} _{n}=\mathbf {x} _{n}={\begin{cases}\mathbf {x} _{n}(L\Delta t)&{\text{with probability }}\alpha \left(\mathbf {x} _{n}(0),\mathbf {x} _{n}(L\Delta t)\right)\\\mathbf {x} _{n}(0)&{\text{otherwise}}\end{cases}}$
où
    $\alpha \left(\mathbf {x} _{n}(0)_{n},\mathbf {x} _{n}(L\Delta t)\right)={\text{min}}\left(1,{\dfrac {\exp \left[-H(\mathbf {x} _{n}(L\Delta t),\mathbf {p} _{n}(L\Delta t))\right]}{\exp \left[-H(\mathbf {x} _{n}(0),\mathbf {p} _{n}(0))\right]}}\right)$
Cette opération est ensuite répétée afin d'obtenir $\mathbf {X} _{n+1},\mathbf {X} _{n+2},\mathbf {X} _{n+3},\ldots$ .