hnuts

No U-Turn Sampling in Haskell.
git clone git://git.jtobin.io/hnuts.git
Log | Files | Refs | README | LICENSE

commit 595e98a705f87ebb33b8d0066879fec483157149
parent f2fd3c9aa54aa2314e4a47c5a0771cdc7fde1b43
Author: Jared Tobin <jared@jtobin.ca>
Date:   Tue,  4 Aug 2015 14:34:05 -0230

Misc cleanup.

Diffstat:
M.gitignore | 1+
ASetup.hs | 2++
Mhnuts.cabal | 12+++++-------
Msrc/Numeric/MCMC/NUTS/Examples.hs | 18+++++++++---------
Astack.yaml | 5+++++
5 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -7,3 +7,4 @@ dist working cabal.sandbox.config tests +.stack-work diff --git a/Setup.hs b/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/hnuts.cabal b/hnuts.cabal @@ -14,18 +14,16 @@ cabal-version: >= 1.18 library exposed-modules: Numeric.MCMC.NUTS - , Numeric.MCMC.NUTS.Examples other-extensions: ScopedTypeVariables build-depends: - base >= 4.7 - , monad-loops >= 0.4 - , primitive >= 0.5 - , mwc-random >= 0.12 - , statistics >= 0.10 - , ad >= 3.4 + base + , monad-loops + , primitive + , mwc-random + , statistics hs-source-dirs: src diff --git a/src/Numeric/MCMC/NUTS/Examples.hs b/src/Numeric/MCMC/NUTS/Examples.hs @@ -1,4 +1,4 @@ --- Various examples, using NUTS with dual-averaging. Insert whatever trace +-- Various examples, using NUTS with dual-averaging. Insert whatever trace -- (rosenbrockTrace, bnnTrace, etc.) you want into 'main' in order to spit out -- some observations. -- @@ -20,27 +20,27 @@ logRosenbrock :: RealFloat a => [a] -> a logRosenbrock [x0, x1] = negate (5 * (x1 - x0 ^ 2) ^ 2 + 0.05 * (1 - x0) ^ 2) rosenbrockTrace :: IO [Parameters] -rosenbrockTrace = withSystemRandom . asGenST $ +rosenbrockTrace = withSystemRandom . asGenST $ nutsDualAveraging logRosenbrock (grad logRosenbrock) 10000 1000 [0.0, 0.0] logHimmelblau :: RealFloat a => [a] -> a logHimmelblau [x0, x1] = negate ((x0 ^ 2 + x1 - 11) ^ 2 + (x0 + x1 ^ 2 - 7) ^ 2) himmelblauTrace :: IO [Parameters] -himmelblauTrace = withSystemRandom . asGenST $ - nutsDualAveraging logHimmelblau (grad logHimmelblau) 10000 1000 [0.0, 0.0] +himmelblauTrace = withSystemRandom . asGenST $ + nutsDualAveraging logHimmelblau (grad logHimmelblau) 100000 10000 [0.0, 0.0] logBnn :: RealFloat a => [a] -> a logBnn [x0, x1] = -0.5 * (x0 ^ 2 * x1 ^ 2 + x0 ^ 2 + x1 ^ 2 - 8 * x0 - 8 * x1) bnnTrace :: IO [Parameters] -bnnTrace = withSystemRandom . asGenST $ +bnnTrace = withSystemRandom . asGenST $ nutsDualAveraging logBnn (grad logBnn) 10000 1000 [0.0, 0.0] logBeale :: RealFloat a => [a] -> a -logBeale [x0, x1] +logBeale [x0, x1] | and [x0 >= -4.5, x0 <= 4.5, x1 >= -4.5, x1 <= 4.5] - = negate $ + = negate $ (1.5 - x0 + x0 * x1) ^ 2 + (2.25 - x0 + x0 * x1 ^ 2) ^ 2 + (2.625 - x0 + x0 * x1 ^ 3) ^ 2 @@ -51,8 +51,8 @@ bealeTrace = withSystemRandom . asGenST $ nutsDualAveraging logBeale (grad logBeale) 10000 1000 [0.0, 0.0] printTrace :: Show a => [a] -> IO () -printTrace = mapM_ (putStrLn . filter (`notElem` "[]") . show) +printTrace = mapM_ (putStrLn . filter (`notElem` "[]") . show) main :: IO () -main = bealeTrace >>= printTrace +main = himmelblauTrace >>= printTrace diff --git a/stack.yaml b/stack.yaml @@ -0,0 +1,5 @@ +flags: {} +packages: +- '.' +extra-deps: [] +resolver: lts-2.21