From 7af72e3bf47a9a2e3629b53f5e65b7b343eccc6c Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Wed, 13 Sep 2023 22:32:43 +0000 Subject: [PATCH] build based on 4153da3 --- dev/images/state_space_model.png | Bin 0 -> 18077 bytes dev/index.html | 41 ++++++++++++++++++++++++++++++- dev/search/index.html | 2 +- dev/search_index.js | 2 +- 4 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 dev/images/state_space_model.png diff --git a/dev/images/state_space_model.png b/dev/images/state_space_model.png new file mode 100644 index 0000000000000000000000000000000000000000..02f1afb7a5ec6b0f8d1c6e62e917d80c5850cf6e GIT binary patch literal 18077 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 bG4}iaW7%${$3{`O00000NkvXXu0mjfij}=7 literal 0 HcmV?d00001 diff --git a/dev/index.html b/dev/index.html index 167ce55..a2ecaa5 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,2 +1,41 @@ -Home · SSMProblems

SSMProblems

API

SSMProblems.isdoneFunction
isdone(step, particle[, cache])

Determine whether we have reached the last time step of the Markov process. Return true if yes, otherwise return false.

source
SSMProblems.transition!!Function
transition!!(rng, step, particle[, cache])

Simulate the particle for the next time step from the forward dynamics.

source
+Home · SSMProblems

SSMProblems

Installation

In the julia REPL:

]add SSMProblems

Documentation

SSMProblems defines a generic interface for State Space Problems (SSM). The main objective is to provide a consistent interface to work with SSMs and their logdensities.

Consider a markovian model from[Murray]: state space model

The model is fully specified by the following densities:

  • Initialisation: $f_0(x)$
  • Transition: $f(x)$
  • Emission: $g(x)$

And the dynamics of the model reduces to:

\[\begin{aligned} +x_t | x_{t-1} &\sim f(x_t | x_{t-1}) \\ +y_t | x_t &\sim g(y_t | x_{t}) +\end{aligned}\]

assuming $x_0 \sim f_0(x)$.

The joint law follows:

\[p(x_{0:T}, y_{0:T}) = f_0(x_0) \prod_t g(y_t | x_t) f(x_t | x_{t-1})\]

Users can define their SSM with SSMProblems in the following way:

struct Model <: AbstractStateSpaceModel end
+
+# Define the structure of the latent space
+particleof(::Model) = Float64
+dimension(::Model) = 2
+
+function transition!!(
+    rng::Random.AbstractRNG, 
+    step, 
+    model::Model, 
+    particle::AbstractParticl{<:AbstractStateSpaceModel}
+) 
+    if step == 1
+        ... # Sample from the initial density
+    end
+    ... # Sample from the transition density
+end
+
+function emission_logdensity(step, model::Model, particle::AbstractParticle) 
+    ... # Return log density of the model at *time* `step`
+end
+
+isdone(step, model::Model, particle::AbstractParticle) = ... # Stops the state machine
+
+# Optionally, if the transition density is known, the model can also specify it
+function transition_logdensity(step, prev_particle::AbstractParticle, next_particle::AbstractParticle)
+    ... # Scores the forward transition at `x`
+end

Package users can then consume the model logdensity through calls to emission_logdensity.

For example, a bootstrap filter targeting the filtering distribution $p(x_t | y_{0:t})$ using N particles would roughly follow:

struct Particle{T<:AbstractStateSpaceModel} <: AbstractParticle{T} end 
+
+while !all(map(particle -> isdone(t, model, particles), particles)):
+    ancestors = resample(rng, logweigths)
+    particles = particles[ancestors]
+    for i in 1:N
+        particles[i] = transition!!(rng, t, model, particles[i])
+        logweights[i] += emission_logdensity(t, model, particles[i])
+    end
+end

Interface

SSMProblems.emission_logdensityFunction
emission_logdensity(model, state, observation[, timestep, cache])

Compute the log potential of the current particle. This effectively "reweight" each particle.

source
SSMProblems.transition!!Function
transition!!(rng, model[, state, timestep, cache])

Simulate the particle for the next time step from the forward dynamics.

source
SSMProblems.transition_logdensityFunction
transition_logdensity(model, prev_state, current_state[, timestep, cache])

(Optional) Computes the log-density of the forward transition if the density is available.

source
  • Murray

    Murray, Lawrence & Lee, Anthony & Jacob, Pierre. (2013). Rethinking resampling in the particle filter on graphics processing units.

diff --git a/dev/search/index.html b/dev/search/index.html index a4e5d81..ec5d170 100644 --- a/dev/search/index.html +++ b/dev/search/index.html @@ -1,2 +1,2 @@ -Search · SSMProblems

Loading search...

    +Search · SSMProblems

    Loading search...

      diff --git a/dev/search_index.js b/dev/search_index.js index e2e3048..16eb5ab 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"#SSMProblems","page":"Home","title":"SSMProblems","text":"","category":"section"},{"location":"#API","page":"Home","title":"API","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Modules = [SSMProblems]\nOrder = [:type, :function]","category":"page"},{"location":"#SSMProblems.AbstractParticle","page":"Home","title":"SSMProblems.AbstractParticle","text":"\n\n\n\n","category":"type"},{"location":"#SSMProblems.emission_logdensity","page":"Home","title":"SSMProblems.emission_logdensity","text":"emission_logdensity(step, particle[, cache])\n\nCompute the log potential of current particle. This effectively \"reweight\" each particle.\n\n\n\n\n\n","category":"function"},{"location":"#SSMProblems.isdone","page":"Home","title":"SSMProblems.isdone","text":"isdone(step, particle[, cache])\n\nDetermine whether we have reached the last time step of the Markov process. Return true if yes, otherwise return false.\n\n\n\n\n\n","category":"function"},{"location":"#SSMProblems.transition!!","page":"Home","title":"SSMProblems.transition!!","text":"transition!!(rng, step, particle[, cache])\n\nSimulate the particle for the next time step from the forward dynamics.\n\n\n\n\n\n","category":"function"},{"location":"#SSMProblems.transition_logdensity","page":"Home","title":"SSMProblems.transition_logdensity","text":"transition_logdensity(step, particle, x[, cache])\n\n(Optional) Computes the log-density of the forward transition if the density is available.\n\n\n\n\n\n","category":"function"}] +[{"location":"#SSMProblems","page":"Home","title":"SSMProblems","text":"","category":"section"},{"location":"#Installation","page":"Home","title":"Installation","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"In the julia REPL:","category":"page"},{"location":"","page":"Home","title":"Home","text":"]add SSMProblems","category":"page"},{"location":"#Documentation","page":"Home","title":"Documentation","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"SSMProblems defines a generic interface for State Space Problems (SSM). The main objective is to provide a consistent interface to work with SSMs and their logdensities.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Consider a markovian model from[Murray]: (Image: state space model)","category":"page"},{"location":"","page":"Home","title":"Home","text":"[Murray]: Murray, Lawrence & Lee, Anthony & Jacob, Pierre. (2013). Rethinking resampling in the particle filter on graphics processing units. ","category":"page"},{"location":"","page":"Home","title":"Home","text":"The model is fully specified by the following densities:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Initialisation: f_0(x)\nTransition: f(x)\nEmission: g(x)","category":"page"},{"location":"","page":"Home","title":"Home","text":"And the dynamics of the model reduces to:","category":"page"},{"location":"","page":"Home","title":"Home","text":"beginaligned\nx_t x_t-1 sim f(x_t x_t-1) \ny_t x_t sim g(y_t x_t)\nendaligned","category":"page"},{"location":"","page":"Home","title":"Home","text":"assuming x_0 sim f_0(x). ","category":"page"},{"location":"","page":"Home","title":"Home","text":"The joint law follows:","category":"page"},{"location":"","page":"Home","title":"Home","text":"p(x_0T y_0T) = f_0(x_0) prod_t g(y_t x_t) f(x_t x_t-1)","category":"page"},{"location":"","page":"Home","title":"Home","text":"Users can define their SSM with SSMProblems in the following way:","category":"page"},{"location":"","page":"Home","title":"Home","text":"struct Model <: AbstractStateSpaceModel end\n\n# Define the structure of the latent space\nparticleof(::Model) = Float64\ndimension(::Model) = 2\n\nfunction transition!!(\n rng::Random.AbstractRNG, \n step, \n model::Model, \n particle::AbstractParticl{<:AbstractStateSpaceModel}\n) \n if step == 1\n ... # Sample from the initial density\n end\n ... # Sample from the transition density\nend\n\nfunction emission_logdensity(step, model::Model, particle::AbstractParticle) \n ... # Return log density of the model at *time* `step`\nend\n\nisdone(step, model::Model, particle::AbstractParticle) = ... # Stops the state machine\n\n# Optionally, if the transition density is known, the model can also specify it\nfunction transition_logdensity(step, prev_particle::AbstractParticle, next_particle::AbstractParticle)\n ... # Scores the forward transition at `x`\nend","category":"page"},{"location":"","page":"Home","title":"Home","text":"Package users can then consume the model logdensity through calls to emission_logdensity. ","category":"page"},{"location":"","page":"Home","title":"Home","text":"For example, a bootstrap filter targeting the filtering distribution p(x_t y_0t) using N particles would roughly follow:","category":"page"},{"location":"","page":"Home","title":"Home","text":"struct Particle{T<:AbstractStateSpaceModel} <: AbstractParticle{T} end \n\nwhile !all(map(particle -> isdone(t, model, particles), particles)):\n ancestors = resample(rng, logweigths)\n particles = particles[ancestors]\n for i in 1:N\n particles[i] = transition!!(rng, t, model, particles[i])\n logweights[i] += emission_logdensity(t, model, particles[i])\n end\nend","category":"page"},{"location":"#Interface","page":"Home","title":"Interface","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Modules = [SSMProblems]\nOrder = [:type, :function]","category":"page"},{"location":"#SSMProblems.AbstractStateSpaceModel","page":"Home","title":"SSMProblems.AbstractStateSpaceModel","text":"AbstractStateSpaceModel\n\n\n\n\n\n","category":"type"},{"location":"#SSMProblems.emission_logdensity","page":"Home","title":"SSMProblems.emission_logdensity","text":"emission_logdensity(model, state, observation[, timestep, cache])\n\nCompute the log potential of the current particle. This effectively \"reweight\" each particle.\n\n\n\n\n\n","category":"function"},{"location":"#SSMProblems.transition!!","page":"Home","title":"SSMProblems.transition!!","text":"transition!!(rng, model[, state, timestep, cache])\n\nSimulate the particle for the next time step from the forward dynamics.\n\n\n\n\n\n","category":"function"},{"location":"#SSMProblems.transition_logdensity","page":"Home","title":"SSMProblems.transition_logdensity","text":"transition_logdensity(model, prev_state, current_state[, timestep, cache])\n\n(Optional) Computes the log-density of the forward transition if the density is available.\n\n\n\n\n\n","category":"function"}] }