• Aucun résultat trouvé

• on calcule sj(tn) = kuj

(tn)k kuj(tn−1)k ' e

λ dt

• on le remplace, en moyenne, par sj(t)α copies

Approximativement, un clone à l’instant initial a donné naissance à eαλt clones au temps t. En

effet t/dt Y n=1 sj(n dt)α= t/dt Y n=1 kuj(n dt)k α kuj((n − 1) dt)k α = k uj(t)k α kuj(0)k α = eαλt. (3.1)

Plus précisément, si la population initiale était suffisamment grande pour être représentative, la probabilité de tirer au temps t un clone dont la trajectoire est x(t0) pour t0 ∈ [0, t] est

proportionnelle à eαλtP[x, t], où P[x, t] est la probabilité que la dynamique non biaisée produise

cette même trajectoire. De plus, le rapport entre le nombre total de clones au temps t et le nombre initial de clones

Nc(t)

Nc(0) '

eαλt

≈ etµ(α). (3.2)

permet alors d’accéder à la fonction de partition et à l’énergie libre dynamiques.

Cet algorithme peut être généralisé aux k premiers exposants de Lyapunov, comme nous le verrons dans la section 3.3. Nous avons ici présenté le principe général de l’algorithme. Dans la section suivante, on va introduire quelques raffinements permettant de mettre en œuvre cet algorithme en pratique et d’améliorer la qualité de l’échantillonnage.

3.2

Ingrédients supplémentaires

3.2.1

Ajout d’un bruit

Si on étudie un système déterministe, deux fils issus d’un même clone ont nécessairement la même évolution future, et on se retrouve rapidement à simuler plusieurs fois la même trajectoire. Ceci n’améliore en rien la qualité de l’échantillonnage et n’a aucune raison de révéler des trajec- toires atypiques que la force brute raterait. Au contraire, une grande partie de la puissance de calcul est gaspillée pour calculer plusieurs fois la même trajectoire. C’est pourquoi on ajoute un petit bruit à la dynamique, pour empêcher les clones d’être dégénérés et améliorer la qualité de l’échantillonnage. Ce bruit est choisi avec des propriétés adéquates pour le système qu’on étudie : conservation de l’énergie, conservation de l’impulsion, etc.

Le bruit n’étant pas partie intégrante du problème initial, il faut prendre son amplitude ε aussi petite que possible et vérifier que la limite ε → 0 n’est pas singulière. De plus, on peut mettre ε à zéro en fin de simulation pour vérifier que les solutions obtenues sont bien solutions des équations du mouvement du problème initial.

D’un point de vue mathématique, l’ajout d’un petit bruit change la nature du système. La ques- tion de savoir si on retrouve, dans la limite de bruit nul, la mesure stationnaire de la dynamique sous-jacente remonte à Kolmogorov [82]. Cette question de la stabilité stochastique [83] est en fait une façon naturelle pour le physicien de définir la mesure stationnaire d’un système dynamique et, lorsqu’une mesure SRB existe, elle peut être retrouvée comme la limite de bruit nul d’un système dynamique stochastique (voir [83] pour une présentation rigoureuse de cette procédure).

28 Chapitre 3. Dynamique biaisée par les Lyapunov (LWD)

3.2.2

Vecteur tangent normalisé

Selon le signe de l’exposant de Lyapunov, la norme du vecteur tangent u va diverger ou au contraire tendre vers zéro. On va donc rapidement se retrouver avec un problème de précision numérique. En effet, les ordinateurs n’ont pas une précision infinie ; ils travaillent avec un nombre de décimales donné, et les erreurs d’arrondi deviennent importantes lorsqu’on travaille avec des nombres très petits ou très grands. Pour éviter cela, on va renormaliser le vecteur u régulièrement (par exemple à chaque pas de temps). Cela ne perturbe absolument pas l’évolution de l’algorithme car la dynamique de u est linéaire, et on stocke son accroissement à chaque pas de temps.

3.2.3

Population finie

Pour éviter de voir le nombre de clones exploser ou tomber à zéro, on maintient une population constante Nc au cours de l’évolution temporelle. Cela est fait en tuant les clones en surplus si le

nombre de clones devient supérieur à Nc ou en multipliant des clones existants pour repeupler

notre algorithme si le nombre de clones descend en dessous de Nc. Pour éviter d’avoir à tuer ou

à copier trop de clones pour maintenir une population constante, on modifie le taux de clonage, en utilisant les poids wj = Ncsαj/

P

js α

j au lieu de sαj. On a alors après l’opération de clonage

en moyenne Nc clones.

Lors des précédentes utilisations de cet algorithme [47], le clonage était réalisé en écrivant directe- ment dans un nouveau tableau les clones à l’instant t après clonage à partir des clones à l’instant

t avant clonage. Cela se traduisait par de nombreuses copies inutiles. En effet, lorsque l’algo-

rithme a trouvé une trajectoire adéquate, il y a peu d’évènements de clonage, et le programme passait son temps à recopier un tableau dans un autre, à quelques cases près. Pour améliorer l’efficacité de l’algorithme, nous avons modifié la phase de clonage, en réduisant le nombre de copies inutiles. Au lieu de copier les clones d’un tableau vers un autre, on ne conserve plus qu’un tableau, et on stocke au fur et à mesure les numéros des clones à tuer ou à clones. On copie ensuite les clones à créer sur les clones à tuer. Puis, on copie (ou tue suivant les cas) les clones excédentaires à la fin du tableau. Pour finir, on ajuste le nombre de clones à Nc en tuant ou

clonant des clones existants, choisis aléatoirement. Cela nous a permis d’améliorer grandement l’efficacité de l’algorithme, et d’accéder à des simulations plus longues, avec plus de clones et pour des systèmes plus grands.

Un certain nombre d’autres améliorations ont été nécessaires pour pouvoir mesurer précisément les énergies libres dynamiques. Par exemple, moyenner k simulations de Nc clones donne un

bien meilleur résultat qu’une seule simulation de k × Nc clones, car les clones d’une même

simulation ont souvent tendance à être dégénérés. Ensuite, pour effectuer une simulation avec une température α donnée, il est souvent astucieux d’utiliser une intégration thermodynamique : commencer avec dα  α, effectuer une simulation puis incrémenter dα en 2 dα, et itérer. Ceci permet de suivre de manière « quasi-statique » la solution optimale pour réaliser une grande déviation, de α ' 0 (facile à obtenir) à un α donné, pour lequel les clones ne trouveraient pas nécessairement l’optimum en partant de configurations aléatoires. En cas de transition de phase du premier ordre, il est toutefois nécessaire d’incrémenter et de décrémenter α pour vérifier qu’il n’y a pas de métastabilité (ce que nous ferons à la section 4.2.5 pour la chaîne Fermi-Pasta- Ulam-Tsingou). Toute ces petites astuces peuvent sembler superflues mais elles sont absolument nécessaires pour utiliser ce genre d’algorithmes sur des systèmes complexes comme la chaîne Fermi-Pasta-Ulam-Tsingou étudiée dans cette thèse (à la section 4.2).

Documents relatifs