Open
Description
We need to have a deep think about what the smoothing interface should look like for this package.
The current system looks something like this:
- A smoother starts by running a forward filter using a custom callback to cache and states useful for the backward pass
- The smoother then makes repeated backward steps, smoothing up to a specific time step (default 0)
- The user can pull out the smoothed states using a callback
The smoothers we need to consider are:
- RTS/Kalman Smoother (already implemented)
- Backward algorithm (discrete models)
- Backward simulation
- Rao-Blackwellised Backward Simulation
- CPU/GPU variants of the above
For backward simulation, we should input an argument determining how many backward particles we want to use. This may be one in the case of drawing a reference trajectory.
I'm most confused about Rao-Blackwellised Backward Simulation as I don't understand how this relates to running an RTS smoother on the backward trajectories (if it does relate at all).
We also need to consider how this all relates to ancestor sampling.