Tunny Icon
TunnyDocs

The next-gen Grasshopper optimization tool.

Box-Muller変換

概要

Box-Muller 変換は、一様乱数を正規乱数に変える手法です。 独立な一様乱数のペアを入力すると、独立な標準正規乱数のペアが出力されます。 本アプリのすべてのガウスサンプリング(代表的には Robustness ウィジェットの入力ノイズ摂動)は、このサンプラーの上に載っています。

採用の理由は 3 つあります。 近似ではなく厳密であること、分岐がないこと、そしてアプリの決定論的な 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 の分布)を与え、$\Theta = 2\pi U_2$ は角度を一様に選びます。 半径と角度をそれぞれ正しい分布から独立に引くことで、ペア (R,Θ)(R, \Theta) を直交座標へ戻すだけで独立な標準正規乱数が 2 つ得られます。

平均 μ\mu、標準偏差 σ\sigma の一般のガウスサンプルは、スケールとシフトで得ます: X=μ+σZX = \mu + \sigma Z。 たとえば Robustness ウィジェットの入力ノイズは、$\mu = 0$、$\sigma$ を各パラメータの宣言レンジに対する割合として与えたものです。


特性・限界

  • 厳密:出力は(浮動小数点誤差を除き)正規分布に厳密に従います。一様乱数 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)のみを使い、$Z_1$ は捨てています。効率は半分になります。ですが Z1Z_1 を次の呼び出しまで持ち越す状態を抱えずに済むため、呼び出しが単純になります。解析あたり数千サンプル程度の規模では、このコストは無視できます。
  • 再現性:シード付き ChaCha8 乱数生成器で駆動されるため、同じシードなら常に同じガウス列が得られます。ロバスト性解析の結果が設定固定で決定論的になるのは、この性質によるものです。同じ候補設計を 2 回解析しても統計量は動きません。これにより、2 つの候補の分布を並べて比較する使い方が成立します。
  • 裾の挙動は、$1$ 近傍での U1U_1 の分解能に制限されます。53 ビット倍精度では到達可能な最大の Z|Z| は約 8.5σ8.5\sigma です。ここで扱うサンプル数は最大でも 4096 なので、この制限が問題になることはほとんどありません。

アプリ内での利用箇所

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

参考文献