https://mathtod.online/@ips_ips_ips_ips/501771

これはいいことを教えてもらいました。さっそく 3-state Potts model で遊んでみました。

おお、サイズと温度を変えて Binder ratios をプロットしてみたら、確かに臨界点直上の1点で交わりますね!😊

プログラムは次のリンク先で公開。 たぶん、
https://juliabox.com/ で誰でも再現できると思います。

#JuliaLang #StatPhys #Potts #MonteCarlo #Wolff #Gist

https://gist.github.com/genkuroki/a16313f5ec1ebddc171e00738cf1b38b

2^11回Wolff更新をからまわりさせて(burnin)、さらに8つ飛ばしで(thin=8)、2^10個のサンプルを採取しました。たった1024個ですが、きれいに1点で交わっています。

https://mathtod.online/media/e7mc5bpjQtoPq2d5M74

#JuliaLang #StatPhys #Potts #MonteCarlo #Wolff

高温側 ($\beta$ が小さい側)でグラフが結構大きくがたついている理由はおそらくthinが足りないことです。

サンプルを採取する場合には独立性に配慮しなければいけません。高温側ではクラスターが小さくなるので、盤面全体を大きく変化させるためには、たくさんのあいだを取ってサンプルを採取しなければいけません。

私のプログラムでは thin というパラメーターがどれだけとばすかを表わしています。

臨界点のすぐそばではクラスターが十分に大きく育つのでthin=8でも害が生じてなくて、1点で交わってくれているのでしょう。

最初は thin = 2^5 = 32 で試していたのですが、時間がもったいないので仮に8まで減らしたらどうなるかを試してみました。非常にうまく行きました。

burninとthinという用語はベイズ統計でのMCMCから拝借しました。
http://mambajl.readthedocs.io/en/latest/tutorial.html#mcmc-engine

#JuliaLang #StatPhys #Potts #MonteCarlo

作業時間は、コードの変更と感じをつかむためのテスト用の計算時間も含めて、2時間程度でした。すでに書いたコードをほぼそのまま流用できる形になっていたのでとても楽。

プログラミングが得意な人なら、多分私よりも倍以上は速く作業できると思う。その場合には計算を待つ時間が最大のストレスになると思います。

物理的にもっとたくさんの情報を引き出してグラフにしようと思っていたのですが、 thin=8 で試した結果が思いがけず非常にうまく行っていたのでそこで止めることにしました。

詳しいプロットはもはや単なるルーチン。

Julia言語なので複数のシミュレーションを並列処理で同時にやらせることも比較的容易にできるのですが、そこまでがんばろうとは思いませんでした。

近い将来にはJulia言語からGPUも簡単に使えるようになっていると思います。
http://randyzwitch.com/cudanative-jl-julia/

#JuliaLang #StatPhys #Potts #MonteCarlo #Gist

Binder ratio の分子分母がひっくり返っていたのでやり直した。

せっかくなので適当に低温側の精度を落として少しスピードアップしておいた。

ついでに臨界点の近くだけを見るようにした。

https://gist.github.com/genkuroki/a16313f5ec1ebddc171e00738cf1b38b
3-state Potts modelのシミュレーション
サイズを変えてBinder ratiosをプロットすると臨界点直上の1点で交わることの数値的確認

https://mathtod.online/media/a23QQ6LJJ2GgEdSQf6Q