ランダムサンプリングでπを推定・積分計算・中心極限定理を体験。モンテカルロ法の収束をリアルタイムアニメーションで可視化。ランダムウォーク・拡散過程も含む。
単位正方形内に一様ランダムな点$(x, y)$を$N$個生成し、原点中心の単位円内に入った点の数$N_{\text{in}}$を数えることで円周率$\pi$を推定します。
$$ \pi \approx 4 \times \frac{N_{\text{in}}}{N}$$$N$: 総サンプル数(点の数), $N_{\text{in}}$: $x^2 + y^2 \le 1$ を満たす点の数。係数4は正方形の面積に対する円の面積(π/4)の逆数です。誤差は統計的に $O(1/\sqrt{N})$ で減少します。
中心極限定理は、独立な確率変数の標本平均の分布が正規分布に収束することを示します。ここでは、一様分布などからサンプリングを繰り返し、その平均値の分布をヒストグラムで確認できます。
$$ \bar{X}_n \xrightarrow{d}N\!\left(\mu,\frac{\sigma^2}{n}\right) $$$\bar{X}_n$: 標本平均, $\mu$: 母平均, $\sigma^2$: 母分散, $n$: 各標本の大きさ。$\xrightarrow{d}$は分布収束を表します。$n$が大きくなるほど、平均値の分布のばらつき(分散)が小さくなり、尖った正規分布になることがシミュレーターで観察できます。
金融工学(リスク評価):オプション価格の評価や投資ポートフォリオのリスク(VaR)計算に使われます。株価のランダムな変動を何万回もシミュレートし、損失が発生する確率を推定します。
放射線治療計画:人体内での放射線の飛跡とエネルギー付与をモンテカルロ法で詳細にシミュレーションします。これにより、腫瘍に最大の線量を、健康な組織には最小の線量を与える最適な治療計画を立てることができます。
半導体設計:微細な半導体デバイス内での電子の挙動は拡散や散乱のプロセスを含みます。ランダムウォークモデルを用いたモンテカルロシミュレーションで、電流特性や信頼性を評価します。
コンピュータグラフィックス(レンダリング):フォトリアルな画像を生成するレイトレーシングで、光の経路をランダムにサンプリングして計算します。拡散反射や間接照明など、複雑な光の挙動を現実的に再現する核心技術です。
まず、「ランダムだから何でもできる」という過信は禁物だよ。モンテカルロ法は万能ではなく、問題によっては収束が恐ろしく遅くて実用にならない。例えば、極めて稀な事象(リスク管理でいう「テールリスク」)の確率を直接推定しようとすると、ほとんど点がヒットせず、膨大な計算コストがかかってしまう。こういう時は、重点サンプリングなどの高度な手法が必要になるんだ。
次に、「疑似乱数」の質を軽視しないこと。シミュレーターで使っているのは完全な乱数ではなく、アルゴリズムで生成する「疑似乱数」だ。実務では、この周期が短かったり偏りがあったりすると、結果が歪んでしまうことがある。例えば、金融の大規模シミュレーションでは、メルセンヌ・ツイスタなどの高品質な生成器が必須だ。
最後に、収束の判断をグラフの見た目だけで行わないこと。円周率の推定で値が3.14に近づいても、それは一つの実行結果に過ぎない。本当の意味での精度を評価するには、同じ条件でシミュレーションを独立に複数回(例えば100回)実行し、推定値のばらつき(標準偏差)を見る必要がある。このツールで「N=10000」を何度もリセットして実行してみると、毎回少しずつ異なる値に収束していくのがわかる。これが統計的誤差の実体だ。
このツールの背後にある考え方は、様々な先端分野で「現実を模擬するデジタルツイン」の核心をなしているんだ。
一つは「粒子法シミュレーション」だ。流体や構造物の連続体を、無数の微小な粒子の集合としてモデル化する手法で、自動車の衝突解析や金属の鍛造プロセス設計に使われる。各粒子の運動はランダムウォークに似た確率的な要素を含み、モンテカルロ的なアプローチで巨視的な挙動を導き出す。
もう一つは「信頼性工学」や「故障予測」だ。例えば、複雑なシステム(飛行機のエンジンや工場の生産ライン)は、個々の部品の故障確率とその組み合わせで全体の信頼性が決まる。部品Aが0.1%、部品Bが0.05%の確率で故障する時、システム全体が1年以内に停止する確率は? これを各部品のランダムな故障を何万回もシミュレートして(これがモンテカルロだ!)、経験的に求めるんだ。
また、「材料インフォマティクス」という新しい分野でも活躍している。ある化学組成の新材料が、目標とする強度や熱伝導率を持つかを、原子レベルでの相互作用を確率的にシミュレーションすることで、実際に合成する前にスクリーニングする。これらは全て、このシミュレーターで体験している「ランダムな試行の積み重ねで現象を理解する」という哲学の延長線上にあるんだ。
まずは、このツールで遊んだ「体感」を、確率統計の基礎理論で裏付けよう。キーワードは「大数の法則」「中心極限定理」「チェビシェフの不等式」だ。特に、誤差が $O(1/\sqrt{N})$ で減るという感覚を、数式 $P(|\bar{X}_n - \mu| \ge \epsilon) \le \frac{\sigma^2}{n\epsilon^2}$ (チェビシェフ)から理解できると強い。
次に、「分散減少法」を学ぶのが実践への第一歩だ。同じ精度を得るのに必要な計算量を劇的に減らす技術で、例えば円周率計算なら、単位円の第一象限だけを使い、対称性を利用して4倍のサンプルがあるかのように扱う「対称性の利用」が簡単な例だ。他にも「制御変量法」「層化サンプリング」などがあり、これらを知っているかどうかが、プロのシミュレーションエンジニアの分かれ道になる。
最後に、実際のコーディングに挑戦してみよう。PythonならNumPyで乱数生成と配列演算を駆使すれば、このシミュレーターの核心部分は数十行で再現できる。そこから、より実務的な問題、例えば「ある複雑な形状の部品の体積をモンテカルロ法で推定する」とか「オプションの理論価格をブラック・ショールズモデルとシミュレーションの両方で計算し比較する」といったミニプロジェクトに進むのがオススメだ。理論と実装の往復が、最も深い理解をもたらしてくれるよ。