私はVEGAS(元の出版物(LKlevinからのプレプリント)と実装ノート)のモンテカルロ統合のリビニングアルゴリズムを理解しようとしています。私が最初に理解したと思うことを説明してから、質問をします。
簡単にするために、区間全体で正である1次元関数があると仮定します。この間隔は、たとえばビンに分けられます。これらのビンは、最初は同じサイズです。ビンサイズは確率密度を定義します、[ 0 、1 ] N Δは、xはIを
適切に正規化するには、ビンのサイズを合計して間隔の長さにする必要があります。
分布からランダムに選択した数値を使用して VEGAS は積分の近似を計算します:{ x i } ρ (x )S (1 )
これまでは、可変サイズのグリッドを使用した重要度サンプリング(私は層別サンプリングには興味がありません)にすぎません。VEGASの興味深い部分は、リビニングアルゴリズムです。つまり、前の反復で累積された関数値に応じてビンサイズを再計算するアルゴリズムです。
- 各ビンについて、2乗された関数値(?)が合計されます(元の出版物では絶対値が合計されています)。
- また、「急速で不安定な変更を回避する」ために、各値に適用されるダンプニング関数もあります。
- その後、各値は隣接するビンで平滑化されます。これにより、特定の関数のリビニングアルゴリズムにもある程度の安定性が追加されると思います(ただし、その理由は説明できません)。最終的な値をとしましょう。
- ビンのサイズは、すべての新しいビンにほぼ平均が含まれるように設定されました。
このアルゴリズムにより、ビンは関数が「小さい」場合は大きくなり、関数が「大きい」場合は小さくなります。小と大は互いに関連して理解されます。たとえば、関数の最大値は「大」と見なされ、それ以外はすべて「小」と見なされます。ポイントが任意のビンに到達する確率は等しい(VEGASはこの動作を示すように記述されている)ため、関数は最も大きい場所で最も多くサンプリングされ、それによってエラーが減少します。
なぜそのように書かれているのですか?たとえば、平均化およびビニングされた関数を次の反復の確率密度として使用するなどして、問題に直接対処しないのはなぜですか?