9.1. 【例題】イジング模型のモンテカルロシミュレーション(作成中)¶
注釈
モンテカルロシミュレーションは、本当は、pythonで実装するのはあまり適当ではありません。なぜなら、モンテカルロ計算はforループで細かい計算を繰り返すプログラムで、外部ライブラリが計算コストを占めるようなものではないからです。 ここでは、モンテカルロシミュレーションの原理を示すために、あえてpythonで実装しています。ただし、ある程度パフォーマンスを意識して、テクニカルな実装になっている部分があることはご容赦ください。
9.1.1. モンテカルロ法¶
誤差の見積り¶
ビンニング(binning)
9.1.2. 実装¶
最初に計算の流れを確認するために、モンテカルロ計算の骨格部分から見ていきます。
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. 温度変化¶
9.1.5. 結果&図示¶
