こんにちは!
今日は「モンテカルロ法(Monte Carlo method)」という、AI・統計・物理・金融などで大活躍するテクニックを、中学生にもわかるようにやさしく説明します。
ひとことで言うと?
モンテカルロ法とは、「ランダムにたくさん試して、知りたい値を“だいたい”推測する方法」
たとえば、“計算がむずかしすぎて正確な式で出すのが大変”なときでも、サイコロや乱数を使って何度もシミュレーションすれば、答えの近くにどんどん近づくことができます。
名前の由来
「モンテカルロ」はモナコのカジノで有名な地名。
ランダム(確率) を使うアイデアが、賭け(ランダム性) を連想させることからこの名前が付きました。
モンテカルロ法の考え方
モンテカルロ法の基本はとてもシンプルです。
- ランダムに数を作る
- その数でシミュレーションをする
- たくさん繰り返して平均をとる
これだけで「だいたいの答え」がわかるのです。
繰り返す回数が増えるほど、答えは本物に近づきます。
サイコロでわかる直感
例えば、「サイコロを 2 回振って合計が 7 になる確率」は計算をすると1/6になります。
しかし、それが計算できなかったとしても、何万回もランダムに振って数えてみれば、だいたい 1/6 に近づくはず。
正確な式を知らなくても、ランダムに試行 → 割合をとるだけで近似できます。
まさに、このアプローチがモンテカルロ法なのです。
円周率を求める
また、モンテカルロ法は有名な「円周率 π を求める実験」にも使われます。
- 1辺が1の正方形を用意する
- その中に円の4分の1を描く
- 正方形の中にランダムに点を打つ
- 円の中に入った点の割合を調べる
点を無限に打つと、その割合は π / 4 に近づいていきます。
つまり、モンテカルロ法を使って「円周率π」を推定できるのです!
ちなみにこのモンテカルロ法を使って円周率を求めるアプローチは、Pythonで以下のように簡単に実装することができます。
import random
N = 100_000
hit = 0
for _ in range(N):
x = random.random() # 0~1
y = random.random()
if x*x + y*y <= 1.0:
hit += 1
pi_est = 4 * hit / N
print(pi_est)
どれくらい正確?
さて、それではモンテカルロ法はどれくらい正確なのでしょうか?
もちろん試行回数を増やせば増やすほど正確になりますが、具体的にはモンテカルロ法の誤差は、だいたい「1/√N」 のオーダーで減ります(N は試行回数)。
例えば、N=1,000 での誤差より、N=10,000 のほうが約 1/√10 ≈ 1/3.16 に誤差が小さくなります。
10倍 正確にしたかったら 100倍 試す必要があるんです。
どんなときに使うの?
- 面積や確率を求めたい(でも式で計算するのが難しい)
- 将来のリスクを知りたい(株価の変動、在庫切れの確率など)
- 複雑な仕組みを試行で理解したい(待ち行列、交通、ゲームAI など)
- 高次元の積分(次元が高いほど普通の計算が爆発的に難しくなる)