hiroyam / mcmc-remc

Replica Exchange Monte Carlo method (Parallel-Tempering)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

mcmc-remc

Replica Exchange Monte Carlo method (Parallel-Tempering)

Build Status


これは何?

レプリカ交換モンテカルロ法(パラレルテンパリング)のC++によるフルスクラッチです。

混合ガウス分布のように多峰性のある分布に従う乱数をMCMCで発生させたい場合、通常のランダムウォークMH法では確率分布の低い場所を渡ることができず、どこか特定の峰に囚われて脱出できなくなってしまうことがあります。レプリカ交換モンテカルロ法は、逆温度の異なる複数の系で独立にMCMCを行い、定期的に詳細釣り合いを満たすように系を交換することで、温度の高い系を経由して別の峰に移動することを可能にするアルゴリズムです。

動作サンプル

紫の分布が今回発生させたい分布です。レプリカ交換モンテカルロ法では、このように逆温度の異なる事後分布のカーネルを複数用意します。温度の低い系では**付近の事後確率が0に近いためランダムウォークでは渡ることができません。温度の高い系では一様分布に近づくため渡ることができます。正規化されていませんが、正規化定数は打ち消し合うため無視しています。

通常のランダムウォークMH法で混合ガウス分布に従う乱数を発生させた例です。多峰性のある分布の場合、通常のランダムウォークMH法ではこのように片方の峰に囚われて他の峰に辿り着けない場合があります。

レプリカ交換モンテカルロ法で混合ガウス分布に従う乱数を発生させた例です。温度の高い分布を経由して他の峰に到達することができるようになります。

通常のランダムウォーク法では同じ峰に囚われ続ける傾向があるため自己相関が高くなってしまいますが、レプリカ交換モンテカルロ法では低く抑えることができます。

About

Replica Exchange Monte Carlo method (Parallel-Tempering)


Languages

Language:C++ 86.5%Language:Shell 12.8%Language:Makefile 0.8%