Tunny Icon
TunnyDocs

The next-gen Grasshopper optimization tool.

Box-Muller変換

概要

Box-Muller 変換は、独立な一様乱数のペアを、独立な標準正規乱数のペアに変換する手法です。 本アプリのすべてのガウスサンプリング(代表的には Robustness ウィジェットの入力ノイズ摂動)の背後にあるサンプラーです。 近似ではなく厳密であること、分岐がないこと、アプリの決定論的な ChaCha8 ベース乱数生成器の上で再現性を確保しやすいことから採用しています。


数式

独立な一様乱数 U1,U2U(0,1)U_1, U_2 \sim \mathcal{U}(0, 1) に対して:

Z0=2lnU1cos(2πU2),Z1=2lnU1sin(2πU2)Z_0 = \sqrt{-2 \ln U_1} , \cos(2\pi U_2), \qquad Z_1 = \sqrt{-2 \ln U_1} , \sin(2\pi U_2)

このとき Z0,Z1N(0,1)Z_0, Z_1 \sim \mathcal{N}(0, 1) であり、両者は独立です。

この構成は、極座標への変数変換です。 R2=2lnU1R^2 = -2\ln U_1 は半径の 2 乗に自由度 2 のカイ二乗分布(標準 2 変量正規分布における Z02+Z12Z_0^2 + Z_1^2 の分布)を与え、 Θ=2πU2\Theta = 2\pi U_2 は角度を一様に選びます。 ペア (R,Θ)(R, \Theta) を直交座標へ戻すと、独立な標準正規乱数が 2 つ得られます。

一般のガウスサンプルはスケールとシフトで得ます: X=μ+σZX = \mu + \sigma Z


特性・限界

  • 厳密:出力は(浮動小数点誤差を除き)正規分布に厳密に従います。一様乱数 12 個の和のような近似法とは異なります。
  • 定義域への配慮:$\ln U_1$ は U1>0U_1 > 0 を要求します。基盤の生成器は [0,1)[0, 1) の値を返すため、Tunny Dashboard は対数に 1U1 - U(0,1](0, 1] の範囲)を渡し、生の値がちょうど 00 でも ln0=\ln 0 = -\infty が発生しないようにしています。
  • 本アプリは余弦側( Z0Z_0)のみを使い、 Z1Z_1 は捨てています。効率は半分になりますが、状態を持たない単純な呼び出しになります。解析あたり数千サンプル程度の規模では、このコストは無視できます。
  • 再現性:シード付き ChaCha8 乱数生成器で駆動されるため、同じシードなら常に同じガウス列が得られます。ロバスト性解析の結果が設定固定で決定論的になるのは、この性質によるものです。
  • 裾の挙動は、 11 近傍での U1U_1 の分解能に制限されます。53 ビット倍精度では到達可能な最大の Z|Z| は約 8.5σ8.5\sigma であり、ここで使うサンプル数では、この制限が問題になることはほとんどありません。

アプリ内での利用箇所

  • Robustness ウィジェット:候補設計点まわりのガウス入力ノイズ摂動の生成と、("Model uncertainty" 有効時の)GP 事後分布からのドローに使われます。

参考文献