結論:モンテカルロ法は「乱数で複雑な確率を解く」手法
モンテカルロ法は、乱数を大量に発生させて確率や数値を計算する手法。1940年代にロスアラモス国立研究所で核反応の確率計算のために発展しました。数式で解けない複雑な確率問題でも、シミュレーションで近似値を得られる強力な方法です。
この記事で分かること
- モンテカルロ法の基本原理
- 円周率πを乱数で求める
- ガチャ確率のシミュレーション例
- 金融・物理での応用
- Pythonでの簡単な実装
1. モンテカルロ法の名前の由来
モナコ公国のモンテカルロ・カジノにちなんでいます。1940年代、原爆開発計画の数学者スタニスワフ・ウラムが、ギャンブルの確率と核反応の確率に共通点があると気づいたのが起源。
2. 基本原理
- 確率モデルを設定する
- 乱数を大量に生成する(N回)
- 各乱数に対して結果を計算する
- 結果の平均が真の期待値の近似値となる
3. 例題1:円周率πを求める
正方形の中にランダムに点を打ち、円の中に入った割合からπを推定。
1辺2の正方形に、半径1の円を描く
円の面積 / 正方形の面積 = π × 1² / (2 × 2) = π / 4
N点を打ち、円内の点が k 個なら、k/N ≒ π/4 → π ≒ 4k/N
N = 10,000 で π ≒ 3.14 程度の精度が得られる
4. 例題2:ガチャの「100連で星5を1体以上引く確率」を検証
排出率1%のガチャを100連回すシミュレーションを10万回繰り返す
theoretical: 1 - 0.99¹⁰⁰ = 63.40%
シミュレーション結果: 100,000試行で 63,367 回当選 → 63.37%
シミュレーションでも理論値と一致
5. Pythonでのモンテカルロ実装
import random
# 100連ガチャを10万回シミュレート
def simulate(n_trials=100000, pulls=100, rate=0.01):
wins = 0
for _ in range(n_trials):
if any(random.random() < rate for _ in range(pulls)):
wins += 1
return wins / n_trials
print(simulate()) # 約 0.634
6. 金融でのモンテカルロ法
株価の将来予測やデリバティブの価格付けに使われます。ブラック・ショールズモデルのような閉形式の解がない複雑な金融商品でも、シミュレーションで価格を推定できます。
7. 物理・工学での応用
- 🔬 粒子の散乱計算(中性子輸送)
- 🧬 分子動力学シミュレーション
- 📡 通信路の誤り訂正シミュレーション
- 🌍 気候モデルの不確実性評価
8. AIにおけるモンテカルロ法
AlphaGo・AlphaZeroなどの強化学習AIはモンテカルロ木探索(MCTS)を使っています。可能性の高い手を乱数で探索する手法。
9. モンテカルロ法の利点と欠点
| 利点 | 欠点 |
|---|---|
| 複雑な問題でも近似解を得られる | 計算量が大きい |
| 並列処理に向いている | 精度は試行回数の平方根 |
| プログラムが直感的で簡単 | 乱数の質に依存 |
10. 精度と計算量の関係
モンテカルロ法の誤差は1/√N で減少。試行回数を100倍にすると精度は10倍。これは大数の法則の系。
よくある質問
Q. モンテカルロ法はどうやって学ぶ?
A. Python・JavaScriptで簡単な乱数シミュレーションから始めるのがおすすめ。円周率の計算は典型的な入門問題です。
Q. モンテカルロ法と数値解析法の違い?
A. 数値解析は決定論的、モンテカルロは確率論的。複雑な多次元積分・確率計算ではモンテカルロが有利です。
Q. どんな乱数を使えばいい?
A. プログラミング言語の標準ランダム関数で十分。研究レベルでは Mersenne Twister などの高品質擬似乱数が使われます。
Q. シミュレーション回数の目安は?
A. 経験則として10,000回以上。高精度が必要なら100万〜10億回。誤差が1/√N で減ることを覚えておきましょう。
Q. モンテカルロ法でガチャ運の悪さを証明できる?
A. 個人の数十回程度の試行では統計的有意性が出ません。少なくとも数千〜数万連のデータが必要です。
まとめ
この記事のポイント
- モンテカルロ法は乱数で複雑な確率を解く手法
- 円周率πの推定が典型的な入門問題
- 誤差は試行回数Nの平方根で減少(1/√N)
- 金融・物理・AI(MCTS)で広く応用
- Pythonで10行程度で実装可能
この記事の監修者
確率計算シミュレーター編集部
統計学・確率論の専門知識を持つ編集チームが、正確で信頼できる情報を提供します。すべての記事は数学的に検証済みで、出典を明記しています。
監修者プロフィールを見る