ハミルトニアンモンテカルロ法は提案分布q(Ucandi|Ui-1) として、Ui-1に運動量Pを与えて一定の時刻後の位置をUcandiとする
よく使われるリープフロッグ法 (Pが運動量、pが事後確率とする)
・多変量正規分布からサンプリングする P0~Nv(P0|0,I)
・U0=Ui-1として運動量を以下のように更新する
P1=P0+1/2 * ε*∇log(p(u0))
・下記の更新式をJ=1、2、3、、、L-1に関して計算する
Uj=Uj-1+εPj …Uj-1に運動量一回分を足してUjとする
Pj+1=Pj+ε*∇log(p(uj)) …運動量もUjに応じて更新する
・j=L-1のUとPを最終候補とする
最終UとPについてはMCMC法と同じく、min(1,r)>rand()で決定する
function leapflog (gradiant, P0初期値, U0初期値, L, e)
U=U0
P=P0+0.5*e*grad(U)
for i in 1:L-1
U+=eP
P+=e *grad(U)
end
U+=eP
P+=0.5*e*grad(U)
end