The relationship of several concepts provided in this package:
┌───────────────────────────────────┐
│ Trajectory │
│ ┌───────────────────────────────┐ │
│ │ EpisodesBuffer wrapping a | |
| | AbstractTraces │ │
│ │ ┌───────────────┐ │ │
│ │ :trace_A => │ AbstractTrace │ │ │
│ │ └───────────────┘ │ │
│ │ │ │
│ │ ┌───────────────┐ │ │
│ │ :trace_B => │ AbstractTrace │ │ │
│ │ └───────────────┘ │ │
│ │ ... ... │ │
│ └───────────────────────────────┘ │
│ ┌───────────┐ │
│ │ Sampler │ │
│ └───────────┘ │
│ ┌────────────┐ │
│ │ Controller │ │
│ └────────────┘ │
└───────────────────────────────────┘
A Trajectory contains 3 parts:
- A
containerto store data. (Usually anAbstractTraces) - A
samplerto determine how to sample a batch fromcontainer - A
controllerto decide when to sample a new batch from thecontainer
Typical usage:
julia> t = Trajectory(
container = Traces(a=Int[], b=Bool[]),
sampler = BatchSampler(3),
controller = InsertSampleRatioController(1.0, 3, 0, 0)
);
julia> push!(t, (a=1,));
julia> for i in 1:5
push!(t, (a=i, b=iseven(i)))
end
julia> for batch in t
println(batch)
end
(a = [1, 3, 1], b = Bool[1, 1, 1])
(a = [4, 1, 4], b = Bool[0, 0, 0])
(a = [1, 4, 1], b = Bool[1, 0, 0])
(a = [1, 1, 4], b = Bool[1, 0, 0])Traces
TracesMultiplexTracesCircularSARTTracesNormalizedTraces
Samplers
BatchSamplerMetaSamplerMultiBatchSamplerEpisodesSampler
Controllers
InsertSampleRatioControllerAsyncInsertSampleRatioController
Please refer tests for common usage. (TODO: generate docs and add links to above data structures)
This async version is mainly inspired by deepmind/reverb.