commit 25c15b9f2eaaa13dc844d6ad85a25a17944cdfa3
parent 5aebd6f773fa2bbbff1378fd634c43d82a8ce0bd
Author: Jared Tobin <jared@jtobin.ca>
Date: Tue, 15 Oct 2013 16:03:58 +1300
DA bug fix (looks reasonably correct).
Diffstat:
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/src/Numeric/MCMC/NUTS.hs b/src/Numeric/MCMC/NUTS.hs
@@ -273,7 +273,7 @@ buildTreeDualAvg lTarget glTarget g t r logu v 0 e t0 r0 = do
joint = log $ auxilliaryTarget lTarget t1 r1
n = indicate (logu <= joint)
s = indicate (logu - 1000 < joint)
- a = min 1 (acceptanceRatio lTarget t1 r1 t0 r0)
+ a = min 1 (acceptanceRatio lTarget t0 t1 r0 r1)
return (t1, r1, t1, r1, t1, n, s, a, 1)
buildTreeDualAvg lTarget glTarget g t r logu v j e t0 r0 = do
@@ -320,14 +320,13 @@ findReasonableEpsilon lTarget glTarget t0 g = do
let (t1, r1) = leapfrog glTarget (t0, r0) 1.0
a = 2 * indicate (acceptanceRatio lTarget t0 t1 r0 r1 > 0.5) - 1
- go j e t r
- | j <= 0 = e -- no infinite loops
+ go e t r
| (acceptanceRatio lTarget t0 t r0 r) ^^ a > 2 ^^ (-a) =
let (tn, rn) = leapfrog glTarget (t, r) e
- in go (pred j) (2 ^^ a * e) tn rn
+ in go (2 ^^ a * e) tn rn
| otherwise = e
- return $ go 1000 1.0 t1 r1
+ return $ go 1.0 t1 r1
-- | Simulate a single step of Hamiltonian dynamics.
leapfrog :: Gradient -> Particle -> Double -> Particle
diff --git a/tests/Test.hs b/tests/Test.hs
@@ -73,7 +73,7 @@ genMoves = replicateM 1000 genMove
main = do
test <- withSystemRandom . asGenIO $
- nutsDualAveraging lTarget glTarget 100 10 t0
+ nutsDualAveraging lTarget glTarget 5000 1500 t0
-- nuts lTarget glTarget 5000 0.1 t0
-- genMovesDa
-- genMoves