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.