Ising model with Monte Carlo method
イジングモデルのモンテカルロ法による数値解法
イジングモデル
ハミルトニアン
磁性体などの微視的モデルの簡単なものとして、イジングモデルを考える。
各格子位置にスピンが存在し、スピンは上もしくは下を向くことができるとする。
隣り合ったスピン間には、スピンを揃えるような、もしくは、互いに反対方向を向くような相互作用が働くものとする。
このような状況を記述するハミルトニアンとして、以下のものを考える。
\[
H = - J \sum_{ \langle i,j \rangle } \sigma_i \sigma_j
\]
\( i, j \) は格子位置を表し、和 \( \sum_{ \langle i,j \rangle } \) は最近接の格子間の和を表す。
\( \sigma_i \) は格子位置 \( i \) におけるスピンの向きを表し、スピンが上向きのときは
\( \sigma_i = 1 \) 、下向きでは \( \sigma_i = - 1 \) の値をとるとする。
\( J > 0 \) のときには、隣り合うスピンは同じ方向を向いたほうがエネルギー的に得をする。
系のスピンが同じ方向を向き、巨視的な磁化が生じた状況が強磁性体であると解釈される。
多体状態
系の状態は、各格子におけるスピンの向きを定めること、すなわち、
\[
( \sigma_1, \sigma_2, \cdots )
\]
を定めることで指定される。
統計力学によれば、状態
\( \sigma_1, \sigma_2, \cdots \)
が実現する確率は
\[
P( \sigma_1, \sigma_2, \cdots )
= \frac{1}{Z} \exp \left( - \frac{ H(\sigma_1, \sigma_2, \cdots) }{k_B T} \right), ~~~~
Z
= \sum_{(\sigma_1, \sigma_2, \cdots)}
\exp \left( - \frac{ H(\sigma_1, \sigma_2, \cdots) }{k_B T} \right).
\]
ここで \( k_B \) はボルツマン定数、\( T \) は絶対温度。
モンテカルロ法
数値シミュレーションに乱数を用いる手法はモンテカルロ法と呼ばれています。
ここでは、系の状態をモンテカルロ法によりシミュレーションする方法のうち、
メトロポリス法と呼ばれるアルゴリズムについて説明します。
メトロポリス法
各サイトにおけるスピンの向きを乱数により生成することで初期状態を作成、
生成した状態に対するエネルギーを計算する。
- 全サイトからある1サイトを乱数により選択し、
そのサイトのスピンの向きを反転させた状態を試行状態とする。
- 試行状態におけるエネルギーと元の状態のエネルギーの差\( \Delta E \)を求める。
- 以下の判定により、試行状態を新たな状態とするか、もとの状態を維持するかを決める。
- \( \Delta E < 0 \) の場合には、試行状態を新たな状態とする。
- 一方、\( \Delta E > 0 \) の場合には、
乱数 \( a \) を \( 0 \le a \le 1 \) の範囲で生成する。
\( a < \exp \left( - \frac{\Delta E}{k_B T}\right) \) の場合には、
試行状態を新たな状態とする。そうでない場合にはもとの状態を維持する。
上記の1.〜3.のプロセスを繰り返すことで、順次状態を生成していく。
二次元イジングモデルのモンテカルロ法(メトロポリス法)によるシミュレーション
以下では、二次元平面の \( L_x \times L_y \) の大きさの正方格子上
(格子点は \( 1 \le i \le L_x, 1 \le j \le L_y \) に存在)のイジングモデルに対する
モンテカルロ・シミュレーションが実行できます。
温度、隣接スピン間の相互作用、格子の大きさ、境界条件(周期境界条件、開放端)、
モンテカルロステップの上限値、アニメーション表示のインターバルに関係するパラメータを設定して、計算を実行してみて下さい。
各モンテカルロステップ毎の系の状態を、上向きスピンを黒丸、下向きスピンを白丸で表します。
注意:数値計算は、ブラウザ表示している端末上での実行となります。
大きな系の場合には端末側に大きな負荷がかかるかもしれません。
後記
オープンキャンパスをオンラインで、という話が出て来たので、
物性理論研究室の紹介として数値計算シュミレーションが実演できると良いのではと思い、
こんなページをつくってみた。
今回のコロナウィルス対策にあって、
多くの方がこれまでに無い状況に直面し、試行錯誤していることと思います。
オンライン授業への対応などで、
振り回されるところもあるように感じることがあります。
コンピュータ・インターネット技術を用いてできることは、
なにも、これまで教室で行ってきたことを動画に載せて
インターネットで配信するだけではないよな、
などと思っていました。
オンラインで何が出来るのかなど、これまで余り考えなかったけど、
この機会に考えてみると、ここに示したようなことも出来るな、
などと思いながら作成してみました。
そういえば、先日、何気なく観た映画「スティーブ・ジョブス」(監督ダニー・ボイル)は、
アーサー・C・クラークが話す映像からはじまるものでしたが、
現在のコンピュータ・インターネット技術を予見するかのような内容で興味深かった。
現在のコロナウィルスに関する状況は、
今日のコンピュータ・インターネット技術で何が出来るのかを、
考え直すきっかけになると良いですね。
(2020/07/04 記, 07/07 追記)
ここで示したような、HTML5 の技術を用いた数値シミュレーションの実演はいいなぁと感じ入っています。
私が数値計算にガッツリ取り組むようになったのは大学院生として研究室に所属してからでした。
そこでは、
計算プログラムは数値計算用の言語( 私はもっぱら Fortran でした)で記述し、
それをスーパーコンピュータ(大型計算機センターのSXシリーズなど)や
ワークステーションといった演算速度の速い計算機で実行し、
計算結果の数値データをファイルとして出力し、
それを別ソフト( gnuplot を使ってたかな)でグラフ表示させる、
という段取りで計算結果を確認していました。
一方、初めてコンピュータに触れたのは、中学生の頃に、
店頭に並んでいた型落ち機の確か NEC PC-8801mkIIFR だった、を無理言って買ってもらったな。
そこに標準プログラミング言語として搭載されていた N88BASIC は、
グラフィック機能まで備えていたので、計算実行からグラフ化までの処理を単一ソフト内で閉じることができた。
その簡便さを当たり前のように感じていたので、
上記の様な、数値データファイル出力、グラフ化、の段階を踏んだ手続きが煩わしくも感じられました。
ドキドキしながら計算結果の数値データをスパコンから手元のマシンへダウンロードして、
結果表示の作業をして一喜一憂していたことなども思い出します(スパコンでの計算は数時間の使用で数万円単位で課金されていたので、計算パラメータを失敗して数万円を失うのは痛い!)。
HTML5 が備えている機能を使うと、
ここに示したようなシミュレーションをwebブラウザだけで閉じた形で実行できるのはいい!
多くの人が使用するコンピュータ(デスクトップPCやノートPCだけでなく、タブレットやスマホなども含めて)には、
このページを表示実行するwebブラウザは標準的に備えられていると思われますので、
身近なコンピュータ環境でも、特別なソフトウェアを導入しなくても数値計算が実行でき、
結果をリアルタイムで表示できる、というのがいいです。
まあ、もちろん、卓上機と大型計算機とでは、実行できる数値計算の規模は違いますが。
ここで示したような、それほど重い計算でなければ、
なんとなく、数値計算でどんなことが出来るのか、などの感触はつかめるよね。
(2020/07/03 記, 07/10 追記)
Copyright © Wataru Izumida, All Rights Reserved.