Mímisbrunnr知恵の泉

← シミュレーション 一覧

🎓 レベル:基礎 | 重要度:B(推奨)

📎 前提:モンテカルロ積分の原理 | 関連:制御変量法

要点(BLUF)

1. ヒット・アンド・ミス法とは

求めたい面積(積分)を、既知の面積の矩形で覆い、その矩形に一様に点を打って「求めたい領域に入った点の割合」を数えます。割合は面積比に収束するので、

(求めたい面積)=(矩形の面積)×(当たった点数)(全点数)(\text{求めたい面積}) = (\text{矩形の面積}) \times \frac{(\text{当たった点数})}{(\text{全点数})}

円周率の推定がまさにこれでした。1×11\times1 の正方形に点を打ち、四分円(面積 π/4\pi/4)に入った割合を4倍して π\pi を得ます。各点は「入った(1)/外れた(0)」のベルヌーイ変数で、その平均が当たり確率 p=π/4p = \pi/4 の推定です。

import numpy as np

# 乱数シードを固定
rng = np.random.default_rng(23)

n = 1_000_000
points = rng.random((n, 2))
inside = (points[:,0]**2 + points[:,1]**2) <= 1.0   # 当たり判定(0/1)
p = inside.mean()
pi_est = 4 * p
se_pi = 4 * np.sqrt(p*(1-p)/n)                       # 比率の標準誤差

print(f"ヒット・アンド・ミス pi = {pi_est:.5f} +/- {1.96*se_pi:.5f}")

出力:

ヒット・アンド・ミス pi = 3.14118 +/- 0.00322

出力の意味:100万点で π\pi を 3.14118、95%区間幅 ±0.0032 で推定。当たり判定はベルヌーイ試行なので、標準誤差は二項分布の p(1p)/n\sqrt{p(1-p)/n} から計算できます。直観は明快ですが、ここに非効率が潜んでいます。

2. 平均値法と比べると分散が大きい

同じπを、当たり判定ではなく関数値の平均で求められます。四分円の面積は 011x2dx=π/4\int_0^1 \sqrt{1-x^2}\,dx = \pi/4 なので、g(x)=41x2g(x) = 4\sqrt{1-x^2} の一様平均がπの推定になります(平均値法)。両者の推定量の分散を比べます。

import numpy as np

# 乱数シードを固定
rng = np.random.default_rng(24)
n = 1_000_000

# 平均値法:g(x)=4 sqrt(1-x^2) の平均
x = rng.random(n)
g = 4 * np.sqrt(1 - x**2)
print(f"平均値法 pi = {g.mean():.5f}")

# 1サンプルあたりの推定量分散を比較
p = np.pi/4
var_hit = 4**2 * p*(1-p)     # ヒット・アンド・ミス(ベルヌーイ x4)の分散
var_avg = g.var()            # 平均値法の分散
print(f"ヒット・アンド・ミス 1標本あたり分散 = {var_hit:.4f}")
print(f"平均値法 1標本あたり分散           = {var_avg:.4f}")

出力:

平均値法 pi = 3.14048
ヒット・アンド・ミス 1標本あたり分散 = 2.6977
平均値法 1標本あたり分散           = 0.7975

出力の意味:同じπを求めるのに、ヒット・アンド・ミスの1標本あたり分散は 2.70、平均値法は 0.80。約3.4倍の差です。つまり同じ精度を出すのに、ヒット・アンド・ミスは平均値法の3.4倍のサンプルが要る。理由は次節。

3. なぜヒット・アンド・ミスは非効率か

ヒット・アンド・ミスは関数値を「入った/外れた」の0/1に丸めています。点が四分円の奥深くにあっても境界ギリギリでも、同じ「1」。この情報の損失が分散を増やします。

平均値法は 41x24\sqrt{1-x^2} という連続な高さをそのまま使うので、各サンプルがより多くの情報を持ち、ばらつきが小さい。一般に「関数値を直接平均できるなら、当たり判定に丸めるべきではない」——これがモンテカルロ積分の基本姿勢です。ヒット・アンド・ミスが正当化されるのは、領域内かどうかしか判定できない(高さが測れない)場合に限られます。

数式の直観的意味

ベルヌーイ変数の分散は p(1p)p(1-p) で、pp が0や1に近いほど小さく、p=0.5p=0.5 で最大。πの場合 p=π/40.785p = \pi/4 \approx 0.785 で分散 p(1p)0.169p(1-p) \approx 0.169、これを4倍スケールの二乗(16倍)して 2.70。一方 41x24\sqrt{1-x^2}xx とともに 4 から 0 まで滑らかに動き、その分散は 0.80。「0/1への丸めは、中間の高さ情報を捨てる代わりに、より大きなジャンプ(0か4×何か)を生む」——このジャンプの大きさが分散に効きます。ヒット・アンド・ミスは平均値法の特殊ケース(被積分関数が指示関数)であり、指示関数は最も分散が大きい表現の一つ、と理解すると位置づけが明確になります。

⚠️ よくある誤解・落とし穴

対応シミュレーション参照

本文のπ推定(ヒット・アンド・ミス default_rng(23)/平均値法と分散比較 default_rng(24))。

関連ノート