Numerisches Ising-Modell - Wolff-Algorithmus und Korrelationen

Ich mache am kritischen Punkt eine numerische Monte-Carlo-Analyse des zweidimensionalen Ising-Modells. Ich habe die Metropolis 'Single Flip' Evolution anfangs mit Erfolg verwendet, obwohl sie unter kritischer Verlangsamung leidet und das Studium großer Gitter unwahrscheinlich macht. Ich schaue mir jetzt Cluster-Flip-Algorithmen an, insbesondere den Wolff-Algorithmus.

Ich habe es geschafft, es zu implementieren, und es sieht so aus, als ob es so funktioniert, wie es sollte (einen einzigartigen Dreh auf T = + , das ganze Gitter an T = 0 , stimmt mit der richtigen Energiedichte in der thermodynamischen Grenze überein ...), aber ich bekomme nicht das richtige Verhalten für die beiden Punkte < σ ich σ J > Korrelationsfunktion.

Laut CFT sollte es sich wie folgt verhalten:

< σ ich σ J > 1 | ich J | 1 4

Ich bin immer mehr davon überzeugt, dass es mit Randbedingungen zu tun hat, ich verwende nichtperiodische freie Grenzen. Die Literatur zu diesem Thema sagt dazu nicht viel aus.

Übersehe ich eine Subtilität (oder einen Beweis) in diesem Verfahren oder in der Verwendung dieses Algorithmus?

Wahrscheinlich sollte zu einer der Code-Sites migriert werden, aber ohne Ihre Algorithmusimplementierungen ist es unmöglich zu sagen, wo (oder ob) Sie einen Fehler gemacht haben.
Nein, das ist für eine Physikseite angemessen. Das kann nur ein Physiker beantworten.
@CarlWitthoft: Ich glaube wirklich nicht, dass es an der Implementierung liegt: Ich habe es zuerst alleine gemacht und es doppelt, dreifach usw. überprüft. dann habe ich eine Version aus dem Internet kopiert ( Physics.buffalo.edu/phy411-506-2004/Topic3/topic3-lec7.pdf ) und es funktioniert immer noch nicht (auf der Ebene guter Korrelationen).
Das führt mich auch zu der Annahme, dass dies mit dem Algorithmus selbst und den Informationen zu tun hat, die er verwendet, wenn er wirklich große Cluster zusammenstellt, wie z. B. diejenigen, die bei Kritikalität auftreten.
Für alle Feinheiten in der Ising-Modellsimulation kann ich "Monte Carlo Simulation in Statistical Physics" von Binder und Heermann empfehlen. Ansonsten haben Sie es stattdessen mit periodischen Bedingungen versucht?
@Alexander: Danke für den Hinweis, ich werde mich darum kümmern. Ansonsten, ja, seit ich diese Frage geöffnet habe, habe ich das Gitter auf einen Torus (periodische Randbedingungen in beide Richtungen) gelegt und es gibt völlig andere Ergebnisse, aber immer noch falsche. Ich ging von Δ σ = 0,4 bis 0,05, wobei das korrekte Ergebnis 0,125 ist. Das probier ich jetzt auch aus.
@suresh nein, ob nur ein Physiker darauf antworten kann, ist irrelevant, ob es hier ums Thema geht. Das relevante Kriterium ist, ob es um Physik geht .
@DavidZ Ja, es geht um Physik.
@suresh es nützt niemandem etwas einfach ohne Begründung zu sagen.
Erhalten Sie ein vernünftiges Verhalten abseits des kritischen Punkts? Spin-Spin-Korrelationen sind auch für diese Grenzen bekannt und würden schneller konvergieren und weniger anfällig für Probleme mit endlicher Größe sein.
@DavidZ Es ist schwer vorstellbar, wie gesagt werden kann, dass eine Frage zu Korrelationen im Ising-Modell nichts mit Physik zu tun hat.
@Lernen, wie groß Ihr Raster ist? Da auch die räumliche Reichweite der Korrelationen am kritischen Punkt divergiert, wirken sich die Randbedingungen stark auf das Gesamtsystem aus. Ich denke, dies kann in der Praxis etwas gemildert werden, indem man es sehr groß macht, weshalb ich neugierig auf die Größe Ihres Systems bin.
@Nathaniel Ja, aber bei dieser Frage geht es möglicherweise um die Auswirkung von Randbedingungen im Wolff-Algorithmus, und Korrelationen im Ising-Modell sind lediglich der Kontext, in dem die Frage auftauchte.
@DavidZ als Experte für statistische Mechanik ist die numerische Simulation des Ising-Modells eines der ersten Dinge, an die ich denke, wenn jemand "Physik" sagt. Das Hilfezentrum sagt, dass Fragen zu „experimentellen Entwürfen und Ergebnissen“ ein Thema sind, und während man sich philosophisch darüber streiten kann, ob Berechnungsergebnisse „empirisch“ sind, erscheint es mir absurd zu sagen, dass ein Algorithmus zum Untersuchen der Implikationen der Das Ising-Modell ist weniger themenbezogen als ein Experiment zur Messung der Korrelationen in einem realen Spinsystem. Oder einen analytischeren Ansatz für diese Angelegenheit.
Natürlich waren wir uns als Community einig, dass Softwarefragen nicht zum Thema gehören. Eine Frage zu Ergebnissen, die mit einem bestimmten Algorithmus erzielt wurden, unterscheidet sich jedoch erheblich von einer Frage zu einer bestimmten Software .
@Nathaniel Mein Verständnis ist, dass numerische Algorithmen speziell in die Kategorie der Berechnungsfragen aufgenommen werden, von denen wir uns einig waren, dass sie nicht zum Thema gehören.
@DavidZ ist das die relevante Diskussion? meta.physics.stackexchange.com/questions/43/… Aus der akzeptierten Antwort und der Frage selbst geht hervor, dass sie ausdrücklich ausgeschlossen sind .
@DavidZ Aus der Zusammenfassung in der Meta-Frage: " Wir scheinen die Position zu vertreten, dass Fragen zur Interpretation oder Begründung eines Algorithmus oder seiner Ergebnisse oder zu physikalisch motiviertem Algorithmus-Design in Ordnung sind ". Wenn jemals eine Frage in diese Kategorie fiel, dann diese.
@Nathaniel Nun, eigentlich denke ich, dass dies relevant ist, da es neuer ist, aber die Schlussfolgerung ist dieselbe. Du hast also recht. Wir sollten wahrscheinlich das Help Center entsprechend aktualisieren.
@DavidZ Als Neuling in diesem Forum bin ich mir nicht sicher, wie man beweist, dass etwas Physik ist. Muss ich meine Zeugnisse aufblitzen lassen oder Zeit damit verbringen zu erklären, dass das Ising-Modell ein klassisches Problem der statistischen Mechanik ist und seine Simulation, insbesondere im 3D-Fall, ein wichtiger Ansatz zur Lösung dieser Universalitätsklasse von Problemen ist?
@suresh Niemand bestreitet, dass das Ising-Modell Physik ist, aber bei dieser Frage geht es nicht wirklich um das Ising-Modell, sondern um das Verhalten eines bestimmten numerischen Algorithmus. Um zu „beweisen“, dass es sich bei der Frage um Physik handelt, wenden Sie sich wie Nathaniel an die entsprechenden Richtlinien, die in Meta-Beiträgen und im Hilfezentrum beschrieben sind. Wenn Sie weitere Details wünschen, pingen Sie mich im Physik-Chat an, ich würde dies gerne weiter erläutern.

Antworten (2)

Ich habe versucht, Ihr Problem mit meinem eigenen Code zu reproduzieren, aber ich konnte nicht: Ich habe den richtigen Wert für den Exponenten erhalten. Ich kann Ihnen nicht sagen, was bei Ihrer Berechnung schief gelaufen ist, aber ich kann Ihnen genau sagen, was ich getan habe!

Sie können meinen Code auf GitHub einsehen . Es war das erste, was ich je in C++ geschrieben habe, und heute würde ich viele Dinge anders machen, also beurteilen Sie den Code bitte nicht zu streng. Es gibt eine Readme-Datei im Repository, die so ziemlich alles darüber erklärt.

Ich habe mein Runscript hochgeladen, den relevanten Teil der entsprechenden Ergebnisse und das kleine Pyxplot- Skript, das die Passform in diesem GitHub Gist erledigt . Mein Wert für den Exponenten ist:

β = 0,243 ± 0,001
Sie können die Anpassung zusammen mit den Monte-Carlo-Daten in der Datei sscorr_fit.pdf sehen .

Hier ist eine Liste von Dingen, die meiner Meinung nach relevant sein könnten.

  • Das wissen Sie sicher, aber nur zur Erinnerung: In der Gleichung in der Frage soll man nicht den absoluten Wert der Differenz der Indizes nehmen ich Und J der beiden Standorte. Die Indizes, die Sie den Sites zuweisen, sind völlig willkürlich. Was zählt, ist die Entfernung zwischen den beiden Standorten, also würde ich es lieber so schreiben:

    S ich S J 1 | R J R ich | 1 4

  • Ich habe die Korrelation nur entlang der Richtung der Gittervektoren gemessen und nicht entlang irgendeiner Diagonalen. Das sollte aber egal sein, da es einen Beweis dafür gibt, dass die Spin-Spin-Korrelation am kritischen Punkt rotationssymmetrisch ist.

  • Ich habe nur dein Formular in den Bereich eingebaut 1 | R J R ich | 50 für ein 512x512-Modell. Ich denke, wenn Sie darüber hinausgehen, erhalten Sie zu viel Einfluss auf die periodischen Randbedingungen. Sie können definitiv nicht das Ganze passen 1 | R J R ich | 256 Bereich, da die Korrelation ein Minimum bei haben muss | R J R ich | = 256 .

  • Die Korrelationsfunktion ändert sich ziemlich schnell mit der Temperatur um den kritischen Punkt, also stellen Sie sicher, dass Sie die richtige Temperatur haben und alles ausgeglichen ist. Meiner Erfahrung nach ist es am besten, den Wolff-Algorithmus mit einem Modell zu starten, bei dem alle Spins in die gleiche Richtung zeigen. Wenn Sie zufällige Drehungen machen und sich dann abkühlen T = Zu T C Der Wolff-Algorithmus ist am Anfang äußerst ineffizient, da er in diesem Rauschen zufälliger Spins keine großen Cluster bilden kann.

Hoffentlich hilft das!

Vielen Dank für die Eingabe, ich werde mir Ihren Code genauer ansehen. Darf ich Sie fragen, wie viele Systeme Sie simuliert haben (dh über welchen Mittelwert Sie verfügen)? Ich habe es auch in meinem Fall geschafft, einen guten Koeffizienten abzuleiten (sehr nahe an 0,249 ), aber meine Daten waren verrauschter, wahrscheinlich hat die Summe, die zum Anpassen verwendet wurde (linear in der Log-Log-Skala), den größten Teil des Rauschens aufgehoben. Wie viele Wolff-Evolutionsschritte führen Sie aus, um ausgehend von geordneten T = 0-Konfigurationen zu thermalisieren? Vielen Dank nochmal ;)
@Learningisamess: Lassen Sie mich wiederholen, was ich als Kommentar zur anderen Antwort gesagt habe. Sie können das Problem der Bestimmung der Anzahl der für die Thermalisierung erforderlichen Schritte vollständig vermeiden: Verwenden Sie einfach einen perfekten Simulationsalgorithmus ; Wenn letzterer aufhört, haben Sie garantiert , dass das System thermalisiert ist! Ein solcher (Cluster-)Algorithmus wird in diesem Artikel beschrieben: M. Huber, abounding chain for Swendsen-Wang , Random Structures & Algorithms, 22(1) :43–59, 2003. Er ist schwieriger zu implementieren als der Standardalgorithmus, aber es ist sehr effizient und Sie erhalten alle Vorteile einer perfekten Simulation.
Alles, was ich gepostet habe, stammt von einer einzigen Simulation, deren Runscript Teil des Git-Repos ist, das ich verlinkt habe. Also habe ich keine Mittelung über die Mittelung innerhalb der Markov-Kette selbst hinaus durchgeführt. Ich habe ein paar Simulationen bei leicht unterschiedlichen Temperaturen durchgeführt, aber ich habe ihre Ergebnisse nicht in das aufgenommen, was ich oben gepostet habe.
Zur Äquilibrierung habe ich 100 Monte-Carlo-Schritte (MCS) verwendet. Ein MCS soll ungefähr eine Anzahl von Spins umdrehen, die der Anzahl von Gitterplätzen entspricht. Wie viele Wolff-Cluster dafür benötigt werden, wird zur Laufzeit ermittelt, indem die durchschnittliche Größe der letzten Cluster gemessen wird. Der Sinn all dieser Dinge besteht darin, die MCS von der Anzahl der Gitterplätze unabhängig zu machen, so dass die in der MCS gemessene Autokorrelationszeit nur eine konstante Zahl ist, die nicht von der Systemgröße abhängt. Überprüfen Sie die Einstellungen im Runscript anhand der SSMC-Readme-Datei, um zu sehen, was ich genau getan habe.
Interessant, ich habe einen anderen Weg, um das Gleichgewicht zu erreichen. Ich würde zuerst den Wert der mittleren Energie pro Spin (für jede Konfiguration) überwachen und von dort ablesen, wie viele Schritte ich für jede Systemgröße benötige (ich bleibe normalerweise auch bei 3,4-Größen ). Ich habe überprüft, ob das Starten von einer vollständig geordneten Konfiguration schneller ist als eine vollständig ungeordnete, und amüsanterweise hängt es von den Randbedingungen ab: Bei festen Grenzen ist ungeordnet sehr, sehr vorteilhaft (der Grund dafür ist, dass der Wolff-Algorithmus mit fest modifiziert werden muss Grenzen mit Akzeptanzfaktor 'à la Metropolis'
abhängig von der Energieverschiebung vom Brechen der Verbindungen zur Grenze und bei festen Grenzen tritt viel Zurückweisung auf), aber bei freien Grenzen ist ein niedriger T-Startpunkt ungefähr viermal schneller.
  1. Nur genau bei der kritischen Temperatur funktioniert dieses CFT-Ergebnis. Sie haben nicht erwähnt, ob Sie beim Monte-Carlo die kritische Temperatur verwendet haben.

  2. Am/nahe dem kritischen Punkt wird die Autokorrelationszeit enorm. (Wenn ich mich nicht irre, muss die Autokorrelationszeit genau bei der kritischen Temperatur explodieren, wird jedoch aufgrund der Endlichkeit des Systems abgeschnitten). Daher ist es am besten, die Messungen alle 3-5 Autokorrelationszeiten einmal aufzuzeichnen. Beachten Sie, dass Autokorrelationseffekte für einen bestimmten Zufallsstartwert einen systematischen Fehler ergeben können, während statistische Fehler aufgrund des Autokorrelationseffekts durch Verwendung verschiedener Zufallsstartwerte geschätzt werden können. Schauen Sie in dieses Buch: http://www.amazon.com/Monte-Carlo-Methods-Statistical-Physics/dp/0198517971

  3. Meine Vermutung ist, dass Sie keine Grenzeffekte sehen werden, solange Sie 10-20 Spins von der Grenze entfernt sind, wenn Sie die Messung von Spin-Spin-Korr. durchführen. Dies ist nur eine Vermutung. Warum setzen Sie nicht periodische Randbedingungen ein und sehen? Der Nachbar von i,j ist (i+1)%L, (j+1)%L und 3 weitere davon.

Ist es einfach, die gewünschte Temperatur einzustellen? T C ?
Für ising kennen wir den genauen Wert (2,27...). Im Allgemeinen wird die kritische Temperatur für Übergänge 2. Ordnung am besten abgeschätzt, indem die magnetische Kumulante 4. Ordnung aufgetragen und der Kreuzungspunkt notiert wird.
Zunächst danke für den Beitrag, Srivatsan. Um Ihre Fragen zu beantworten: 1. Ja, die Temperatur ist auf den kritischen Wert eingestellt: Ich beginne mit einem völlig zufälligen Gitter (also T = ) und dann kühle ich es ab, indem ich die Entwicklung des Wolff-Algorithmus mit der Wahrscheinlichkeit verwende, den Nachbarzustand von hinzuzufügen 1 e 2 K C wo Kc Wert nahe genug ist 1 T C für die Korrelationslänge bei Kritikalität, die größer ist als meine Systemgröße (ich verwende Gitter zwischen 512 x 512 bis 4096 x 4096, also 6-7 Stellen Genauigkeit in der Kopplung).
2. Danke für den Hinweis, eigentlich hatte ich dieses Buch schon studiert. In der Tat zeigen sie, wie die Autokorrelationszeit am kritischen Punkt drastisch ansteigt, besonders bei Single-Spin-Flip (dh Metropolis) "Dynamik". Deshalb würde ich es gerne mit dem Wolff-Algorithmus zum Laufen bringen, es ist mir gelungen, das richtige Gewicht mit dem Metropolis-Algorithmus (und freien Randbedingungen) zu berechnen, aber es hat viel Rechenzeit gekostet und eine effektivere Methode wird sich als sehr nützlich herausstellen die nächsten Schritte meines Projektes.
3. Seit meinem ersten Beitrag habe ich das System auf periodische Randbedingungen gestellt und einen neuen Wert für das konforme Gewicht des Spin-Operators gefunden: 0.05 . Es ist immer noch nicht das Richtige (0,125), aber es liegt auf der "anderen Seite", da feste Randbedingungen mir 0,4 gegeben hatten. Zumindest sagt es mir, dass die Randbedingungen diese Ableitung beeinflussen, sodass wir möglicherweise auf dem richtigen Weg sind, aber ich bin mir dieser Berechnung auch nicht so sicher, da sie nur über 5000 Proben durchgeführt wurde. Ich werde das prüfen und mich vielleicht später noch einmal bei Ihnen melden. Auch hier freue ich mich über Ihren Beitrag ;)
Ich schaue mir gerade deine Kommentare an. Ich muss sagen, dass die von Ihnen angegebenen Daten (Beta = 0,05 mit pbc und Beta = 0,4 mit offenem bc) als numerische Artefakte angesehen würden. Ich würde vermuten, dass dies auf die sehr großen Systemgrößen zurückzuführen ist, die Sie verwenden, und daher möglicherweise überhaupt keine Äquilibrierung stattgefunden hat. Ich würde vorschlagen, dass Sie Größen wie 64x64 verwenden.
Ein Kommentar zu den letzten beiden Punkten: Der Wolff-Algorithmus leidet überhaupt nicht unter kritischer Verlangsamung. Definiert man einen Monte-Carlo-Schritt als eine Anzahl von Cluster-Flips, die im Durchschnitt jeden Spin einmal umdreht, dann schafft es Wolff, unabhängig von der Systemgröße innerhalb weniger Monte-Carlo-Schritte zu dekorrelieren. Um den Einfluss der Grenzen gering zu halten, würde ich daher dazu raten, das größte System zu wählen, das numerisch machbar ist.
Warum nicht einen perfekten Simulationsalgorithmus implementieren ? Dann ist sichergestellt, dass jede Stichprobe ohne statistische Fehler aus der Gibbs-Verteilung gezogen wird. Dies ist auch mit dem Cluster-Algorithmus möglich. Die, die ich (vor Jahren, um Illustrationen für einen Kurs zu machen, den ich gab) implementiert habe, basierte auf diesem Papier: M. Huber. Eine Begrenzungskette für Swendsen-Wang. Random Structures Algorithms, 22(1):43–59, 2003. Es ist ein bisschen schwierig, es richtig zu implementieren, aber sehr effizient, und Sie erhalten alle Vorteile einer perfekten Simulation.