Méthode de Monte-Carlo cinétique 1349759 30165911 2008-05-31T04:59:51Z Mathieu Perrin 209639 [[Modèle:Formule]] ; suppression section justification de l'algorithme ; trajectoire et parallélisation La '''méthode de Monte-Carlo cinétique''', ''kinetic Monte Carlo'' (KMC) en anglais, est une [[méthode de Monte-Carlo]] de [[simulation informatique]] permettant de simuler des processus se produisant à des taux connus. En cela elle permet de simuler exactement le comportement de systèmes évoluant selon une [[équation maîtresse]]. C’est une méthode peu gourmande en temps de calcul permettant d’explorer des échelles de temps et d’espace importantes. Elle permet en particulier d’étudier des phénomènes à probabilité faible. Les taux doivent être connus à l'avance, l'algorithme ne fait que les utiliser. L'algorithme Monte-Carlo cinétique porte plusieurs noms : algorithme à temps de résidence '''residence-time algorithm''', '''Bortz-Kalos-Liebowitz (BKL)''' (Bortz 1975), '''n-fold way''' algorithme, algorithme ou '''méthode de Monte-Carlo dynamique''' ou encore '''algorithme de Gillespie''' (Gillespie 1976), ... == Algorithme == === Taux de transfert indépendants du temps === [[Image:Taux de transfert.svg|thumb|240px|À chaque étape, le système dispose de plusieurs états accessibles, les taux de transferts vers chacun des états étant supposés connus.]] L'algorithme de Monte-Carlo cinétique est utilisé pour modéliser les sauts aléatoires d'un système d'un état initial vers un ensemble d'états finaux possibles, chaque saut étant modélisé par un [[processus de Poisson]]. À l'issue de chaque saut, on évalue les conséquences de la transition entre l'état initial et le nouvel état : arrêt de la simulation, nouvelle étape de simulation avec ou sans changement des taux de transfert, etc. [[Image:State decision in KMC.svg|thumb|240px|Choix de l'état final : une variable aléatoire est tirée entre 0 et {{Formule|§=Γ<sub>tot</sub>}} ; la probabilité que le système évolue vers l'état {{Formule|''i''}} est proportionnelle à {{Formule|Γ<sub>i</sub>}}.]] Pour se familiariser avec l'algorithme, on suppose dans cette section que les taux de transfert restent constants pendant l'intervalle de temps séparant deux sauts successifs, ce qui correspond à un processus de Poisson homogène. L'algorithme est donné par les étapes suivantes : # On note {{Formule|''t''<sub>0</sub>}} le temps actuel. # On forme une liste de l'ensemble des taux de transfert {{Formule|Γ<sub>''i''</sub>}} du système, {{Formule|§=''i'' = 1,..., ''N''}}, et l'on note {{Formule|§=Γ<sub>tot</sub> = <big>∑</big>&thinsp;Γ<sub>''i''</sub>}} le taux de transfert total. # Le temps {{Formule|''T''}} au bout duquel le système quitte son état initial est donné par la formule {{Formule|§=''T'' = –&thinsp;ln(''U'')/Γ<sub>tot</sub>}}, où {{Formule|''U''}} est une [[variable aléatoire]] uniformément répartie entre 0 et 1. # On choisit un deuxième nombre aléatoire {{Formule|''U'''}} uniformément réparti entre {{Formule|0}} et {{Formule|Γ<sub>tot</sub>}} qui va servir à tirer au hasard l'état final de la transition (voir la figure ci-contre). # Si {{Formule|§=''U'''}} est compris entre {{Formule|0}} et {{Formule|Γ<sub>1</sub>}}, le système transite vers l'état 1 ; entre {{Formule|Γ<sub>1</sub>}} et {{Formule|Γ<sub>1</sub>+Γ<sub>2</sub>}} le système transite vers l'état 2 ; et si {{Formule|''U' ''}}est entre {{Formule|''S''<sub>''i''-1</sub>}} et {{Formule|''S''<sub>''i''</sub>}}, où {{Formule|§=''S''<sub>0</sub> = 0}} et <math> S_i = \textstyle\sum_{j=1}^i \Gamma_j </math>, le système transite vers l'état {{Formule|§=''i''}}. # Prendre en compte cette transition en effectuant les calculs correspondants. # Changer le temps en {{Formule|§=''t''<sub>0</sub>+''T''}} et recommencer l'étape 1. ;Justification de l'étape 3 : :La variable aléatoire {{Formule|§=''T''}} représente le temps d'attente avant que le système quitte l'état initial. Sa [[Variable aléatoire#Densité de probabilité d'une variable continue|densité de probabilité]] est <math>\rho_T(t) = \Gamma_\text{tot} \exp(-\Gamma_\text{tot} t)</math> pour {{Formule|t &isin; [0, +∞[}}. La formule utilisée dans l'étape 3 correspond au changement de variable {{Formule|§=''U'' = exp( – Γ<sub>tot</sub>T)}}, ce qui donne bien la même densité de probabilité : <math>\rho_T(t) = \rho_U(u) \left|\frac{du}{dt} \right|</math> si l'on considère {{Formule|§=ρ<sub>''U''</sub>(''u'') = 1}} sur {{Formule|§=]0, 1]}}. ;Justification de l'étape 5 : :La probabilité que l'état final soit l'état {{Formule|''i''}} est {{Formule|§=''p''<sub>i</sub> = {{frac|Γ<sub>''i''</sub>|Γ<sub>tot</sub>}}}}, ce qui est égal à :<math>p_i = \frac {\Gamma_i} {\Gamma_\text{tot}} = \frac {S_i-S_{i-1}} {\Gamma_\text{tot}} = \int_{S_{i-1}}^{S_i} \frac{1}{\Gamma_\text{tot}}du' = P(S_{i-1}<U'<S_i)</math> Cet algorithme simule l'évolution du système au cours du temps et n'a pas a priori de condition d'arrêt. En pratique, on arrête la boucle lorsque le temps dépasse une certaine valeur ou lorsque le système a effectué un certain nombre de sauts ; la suite des états {{Formule|''i''}} suivis par le système au cours du temps est appelée une '''trajectoire Monte-Carlo''' ; on répète ensuite cette boucle de manière à obtenir un nombre important de trajectoires, auxquelles on peut appliquer une analyse statistique. Puisque les trajectoires sont indépendantes les unes des autres, il est facile de [[Calcul parallèle|paralléliser]] l'algorithme de Monte-Carlo cinétique. === Taux de transfert variants au cours du temps === L'algorithme est essentiellement le même si l'on suppose que les {{Formule|Γ<sub>''i''</sub>}} dépendent du temps, mais les formules reliant {{Formule|''U''}} et {{Formule|''U' ''}}à {{Formule|''T''}} et à l'état final {{Formule|''i''}} sont différentes : * {{Formule|''T''}} est donné par la formule <math> \int_{t_0}^{t_0+T} \sum_{i=1}^N \Gamma_i(t) dt = -\log u </math>, qu'il est nécessaire d'inverser pour trouver {{Formule|''T''}} ; * Les sommes {{Formule|''S''<sub>i</sub>}} sont à évaluer en {{Formule|§=''t'' = ''t''<sub>0</sub>+''T''}}. (''Note : cette dernière affirmation est à vérifier par un expert''.) == Autres algorithmes == Un algorithme très similaire est l'algorithme de première réaction ''First Reaction Method (FRM)''. Il consiste à choisir la réaction {{Formule|''i''}} arrivant la première, tout en utilisant un côté probabiliste [[stochastique]] afin de ne pas oublier les autres réactions. Pour cela on choisit {{Formule|''N''}} nombres au hasard {{Formule|''u<sub>i</sub>''}} et on choisit le temps de réaction <math> \Delta t_i </math> qui est le temps minimal parmi ceux déterminés par les {{Formule|''N''}} formules ::<math> \int_{t_0}^{t_0+\Delta t_i} \Gamma_i(t) dt = -\log u_i </math> Si les taux <math> \Gamma_i </math> sont indépendant du temps les algorithmes KMC et FRM se simplifient naturellement et un autre algorithme souvent plus rapide existe dit de sélection aléatoire ''Random Selection Method (RSM)''. Contrairement aux deux autres algorithmes il ne donne pas, à chaque pas de temps, nécessairement lieu à une réaction. Au contraire, il calcule un intervalle de temps <math> \Delta t = \min_i \, 1/\Gamma_i </math> où une seule réaction au maximum est possible. Il choisit ensuite au hasard (entre {{Formule|1}} et {{Formule|''N''}}) une réaction possible {{Formule|''i''}} et un nombre aléatoire associé {{Formule|''u''}}. Si <math> u/ \Gamma_i < \Delta t </math> la réaction est effectuée, elle ne l'est pas dans le cas contraire. Dans tous les cas on met à jour le temps. == Utilisation == L'algorithme Monte-Carlo cinétique est utilisé pour simuler les phénomènes physiques tels que la diffusion de surface, l'[[épitaxie]], l'évolution et la croissance de domaines ou la mobilité des agrégats. Évidemment cette méthode peut être utilisée de façon beaucoup plus large dès qu'un système évolue selon une équation maîtresse, c’est-à-dire si les processus d'évolution suivent une [[loi de Poisson]] et sont non corrélés ; dans ce cas, la méthode de Monte-Carlo cinétique donne le résultat exact de l'évolution du système au cours du temps. == Notes et références == <references /> * (Bortz 1975): A. B. Bortz and M. H. Kalos and J. L. Lebowitz, ''Journal of Computational Physics'' 17 (1975) 10 * (Fichthorn 1991): K. A. Fichthorn and W. H. Weinberg, ''Journal of Chemical Physics'' 95 (1991) 1090 * (Gillespie 1976): D. T. Gillespie, Journal of Computational Physics 22 (1976) 403 * (Jansen 2003): A.P.J. Jansen {{pdf}}[http://arxiv.org/pdf/cond-mat/0303028v1 An Introduction To Monte Carlo Simulations Of Surface Reactions] * (Nordlund 2006): Kai Nordlund [http://beam.acclab.helsinki.fi/~knordlun/mc/mc8nc.pdf Basics of Monte Carlo simulations (Kinetic Monte Carlo)] {{Portail|informatique|physique|chimie|mathématiques|économie}} [[Catégorie:Algorithme numérique]] [[Catégorie:Probabilités]] [[Catégorie:Hasard et aléatoire]] [[Catégorie:Physique statistique]] [[en:Kinetic Monte Carlo]]