0 | module Control.Monad.Bayes.Inference.SMC
2 | import Control.Monad.Bayes.Interface
3 | import public Control.Monad.Bayes.Population
4 | import public Control.Monad.Bayes.Sequential
5 | import Control.Monad.Bayes.Weighted
13 | (forall x. Population m x -> Population m x) ->
15 | (n_timesteps : Nat) ->
17 | (n_particles : Nat) ->
19 | Sequential (Population m) a ->
21 | sir resampler n_timesteps n_particles = sis resampler n_timesteps . Sequential.hoistFirst (spawn n_particles >>)
29 | (n_timesteps : Nat) ->
31 | (n_particles : Nat) ->
33 | Sequential (Population m) a ->
35 | smcMultinomial = sir resampleMultinomial
43 | (n_timesteps : Nat) ->
45 | (n_particles : Nat) ->
47 | Sequential (Population m) a ->
49 | smcSystematic = sir resampleSystematic
53 | smc : MonadSample m => (n_timesteps : Nat) -> (n_particles : Nat) -> Sequential (Population m) a -> Population m a
60 | smcMultinomialPush :
63 | (n_timesteps : Nat) ->
65 | (n_particles : Nat) ->
67 | Sequential (Population m) a ->
69 | smcMultinomialPush = sir (pushEvidence . resampleMultinomial)
78 | (n_timesteps : Nat) ->
80 | (n_particles : Nat) ->
82 | Sequential (Population m) a ->
84 | smcSystematicPush = sir (pushEvidence . resampleSystematic)