POMDPModelTools contains a basic visualization interface consisting of the
Problem writers should implement a method of this function so that their problem can be visualized in a variety of contexts including jupyter notebooks, web browsers, or saved as images or animations.
Return a renderable representation of the step in problem
The renderable representation may be anything that has
show(io, mime, x) methods. It could be a plot, svg, Compose.jl context, Cairo context, or image.
step is a
NamedTuple that contains the states, action, etc. corresponding to one transition in a simulation. It may have the following fields:
t: the time step index
s: the state at the beginning of the step
a: the action
sp: the state at the end of the step (s')
r: the reward for the step
o: the observation
b: the belief at the
bp: the belief at the end of the step
i: info from the model when the state transition was calculated
ai: info from the policy decision
ui: info from the belief update
Keyword arguments are reserved for the problem implementer and can be used to control appearance, etc.
stepmay not contain all of the elements listed above, so
rendershould check for them and render only what is available
otypically corresponds to
sp, so it is often clearer for POMDPs to render
Sometimes it is important to have control over how the problem is rendered with different mimetypes. One way to handle this is to have render return a custom type, e.g.
struct MyProblemVisualization mdp::MyProblem step::NamedTuple end POMDPModelTools.render(mdp, step) = MyProblemVisualization(mdp, step)
and then implement custom
show methods, e.g.
show(io::IO, mime::MIME"text/html", v::MyProblemVisualization)