9.1. 【例題】イジング模型のモンテカルロシミュレーション(作成中)

注釈

モンテカルロシミュレーションは、本当は、pythonで実装するのはあまり適当ではありません。なぜなら、モンテカルロ計算はforループで細かい計算を繰り返すプログラムで、外部ライブラリが計算コストを占めるようなものではないからです。 ここでは、モンテカルロシミュレーションの原理を示すために、あえてpythonで実装しています。ただし、ある程度パフォーマンスを意識して、テクニカルな実装になっている部分があることはご容赦ください。

9.1.1. モンテカルロ法

【例題】イジング模型の平均場近似

誤差の見積り

ビンニング(binning)

9.1.2. 実装

ソースコード mc.py

最初に計算の流れを確認するために、モンテカルロ計算の骨格部分から見ていきます。

 1def run_mc(system: tuple, J, beta, n_mc, seed=1):
 2    n_bin, n_measure, n_warmup = n_mc
 3
 4    print("Initializing MC...")
 5    mc_data = mc_init(system, J, beta, seed)
 6
 7    print("Warming up...")
 8    for _ in range(n_warmup):
 9        sweep(mc_data)
10
11    print("Measuring...")
12    quant = []  # store physical quantities in each bin
13    for _ in range(n_bin):
14        quant_bin = []  # store measured quantities
15        for _ in range(n_measure):
16            sweep(mc_data)
17            quant_bin.append(measure(mc_data))
18        quant.append(np.array(quant_bin).mean(axis=0))
19    quant = np.array(quant)
20    print(f"  obtained data shape: {quant.shape}")
21
22    quant /= mc_data.state.size  # per site
23    quant_mean = quant.mean(axis=0)  # average over bins
24    quant_std = quant.std(axis=0)  # standard deviations
25    return quant_mean, quant_std

この関数は、モデルに関するパラメーターや逆温度、そしてモンテカルロ計算のサンプル数などを受け取って、モンテカルロ計算を実行し、物理量の平均値を返す関数です。

途中

9.1.3. 結果

Initializing MC...
Warming up...
Measuring...
obtained data shape: (10, 1)
mean: [0.00333672]
std : [0.00561192]

9.1.4. 温度変化

ソースコード mc_t.py

9.1.5. 結果&図示

ソースコード mc_plot_m.py

../_images/mc_t.png