|
6 | 6 |
|
7 | 7 | ## Design |
8 | 8 |
|
| 9 | +A typical example of `Trajectory`: |
| 10 | + |
9 | 11 | ``` |
10 | | - ┌────────────────────────────┐ |
11 | | - │(state=..., action=..., ...)│ |
12 | | - └──────────────┬─────────────┘ |
13 | | - push! │ append! |
14 | | - ┌───────────────────▼───────────────────┐ |
15 | | - │ Trajectory │ |
16 | | - │ ┌─────────────────────────────────┐ │ |
17 | | - │ │ Traces │ │ |
18 | | - │ │ ┌───────────────────┐ │ │ |
19 | | - │ │ state: │CircularArrayBuffer│ │ │ |
20 | | - │ │ └───────────────────┘ │ │ |
21 | | - │ │ ┌───────────────────┐ │ │ |
22 | | - │ │ action:│CircularArrayBuffer│ │ │ |
23 | | - │ │ └───────────────────┘ │ │ |
24 | | - │ │ ...... │ │ |
25 | | - │ └─────────────────────────────────┘ │ |
26 | | - | Sampler | |
27 | | - └───────────────────┬───────────────────┘ |
28 | | - │ batch sampling |
29 | | - ┌──────────────▼─────────────┐ |
30 | | - │(state=..., action=..., ...)│ |
31 | | - └────────────────────────────┘ |
| 12 | +╭──── Trajectory ──────────────────────────────────────────────────────────────────────────────────────────────────╮ |
| 13 | +│ ╭──── Traces ────────────────────────────────────────────────────────────────────────────────────────────────╮ │ |
| 14 | +│ │ ╭──── state: Trac... ────╮╭──── action: Tra... ────╮╭──── reward: Tra... ────╮╭──── terminal: T... ────╮ │ │ |
| 15 | +│ │ │ ╭──────────────────╮ ││ ╭──────────────────╮ ││ ╭──────────────────╮ ││ ╭──────────────────╮ │ │ │ |
| 16 | +│ │ │ │ SubArray │ ││ │ 1 │ ││ │ 1.0 │ ││ │ false │ │ │ │ |
| 17 | +│ │ │ │ (2,3) │ ││ ╰──────────────────╯ ││ ╰──────────────────╯ ││ ╰──────────────────╯ │ │ │ |
| 18 | +│ │ │ ╰──────────────────╯ ││ ╭──────────────────╮ ││ ╭──────────────────╮ ││ ╭──────────────────╮ │ │ │ |
| 19 | +│ │ │ ╭──────────────────╮ ││ │ 2 │ ││ │ 2.0 │ ││ │ false │ │ │ │ |
| 20 | +│ │ │ │ SubArray │ ││ ╰──────────────────╯ ││ ╰──────────────────╯ ││ ╰──────────────────╯ │ │ │ |
| 21 | +│ │ │ │ (2,3) │ ││ ╭──────────────────╮ ││ ╭──────────────────╮ ││ ╭──────────────────╮ │ │ │ |
| 22 | +│ │ │ ╰──────────────────╯ ││ │ ... │ ││ │ ... │ ││ │ ... │ │ │ │ |
| 23 | +│ │ │ ╭──────────────────╮ ││ ╰──────────────────╯ ││ ╰──────────────────╯ ││ ╰──────────────────╯ │ │ │ |
| 24 | +│ │ │ │ ... │ ││ ╭──────────────────╮ ││ ╭──────────────────╮ ││ ╭──────────────────╮ │ │ │ |
| 25 | +│ │ │ ╰──────────────────╯ ││ │ 3 │ ││ │ 3.0 │ ││ │ true │ │ │ │ |
| 26 | +│ │ │ ╭──────────────────╮ ││ ╰──────────────────╯ ││ ╰──────────────────╯ ││ ╰──────────────────╯ │ │ │ |
| 27 | +│ │ │ │ SubArray │ ││ ╭──────────────────╮ │╰───────── size: (4,) ───╯╰───────── size: (4,) ───╯ │ │ |
| 28 | +│ │ │ │ (2,3) │ ││ │ 3 │ │ │ │ |
| 29 | +│ │ │ ╰──────────────────╯ ││ ╰──────────────────╯ │ │ │ |
| 30 | +│ │ │ ╭──────────────────╮ │╰───────── size: (5,) ───╯ │ │ |
| 31 | +│ │ │ │ SubArray │ │ │ │ |
| 32 | +│ │ │ │ (2,3) │ │ │ │ |
| 33 | +│ │ │ ╰──────────────────╯ │ │ │ |
| 34 | +│ │ ╰──── size: (2, 3, 5) ───╯ │ │ |
| 35 | +│ ╰────────────────────────────────────────────────────────────────────────────────────── 4 traces in total ───╯ │ |
| 36 | +│ ╭──── sampler ───────────────────────────────────────────────────────╮ │ |
| 37 | +│ │ BatchSampler │ │ |
| 38 | +│ │ ━━━━━━━━━━━━━━ │ │ |
| 39 | +│ │ │ │ │ |
| 40 | +│ │ ├── transformer => identity (generic function...: identity │ │ |
| 41 | +│ │ ├── rng => Random._GLOBAL_RNG: Random._GLOBAL_RNG() │ │ |
| 42 | +│ │ └── batch_size => Int64: 5 │ │ |
| 43 | +│ ╰────────────────────────────────────────────────────────────────────╯ │ |
| 44 | +│ ╭──── controler ────────────────────────────╮ │ |
| 45 | +│ │ InsertSampleRatioControler │ │ |
| 46 | +│ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ │ |
| 47 | +│ │ │ │ │ |
| 48 | +│ │ ├── threshold => Int64: 4 │ │ |
| 49 | +│ │ ├── n_sampled => Int64: 0 │ │ |
| 50 | +│ │ ├── ratio => Float64: 0.25 │ │ |
| 51 | +│ │ └── n_inserted => Int64: 4 │ │ |
| 52 | +│ ╰───────────────────────────────────────────╯ │ |
| 53 | +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ |
32 | 54 | ``` |
33 | 55 |
|
| 56 | +Exported APIs are: |
| 57 | + |
| 58 | +```julia |
| 59 | +push!(trajectory; [trace_name=value]...) |
| 60 | +append!(trajectory; [trace_name=value]...) |
| 61 | + |
| 62 | +for sample in trajectory |
| 63 | + # consume samples from the trajectory |
| 64 | +end |
34 | 65 | ``` |
35 | | - ┌──────────────┐ ┌──────────────┐ |
36 | | - │Single Element│ │Batch Elements│ |
37 | | - └──────┬───────┘ └──────┬───────┘ |
38 | | - │ │ |
39 | | - push! └──────┐ ┌───────┘ append! |
40 | | - │ │ |
41 | | - ┌─────────────┼────┼─────────────────────────────┐ |
42 | | - │ ┌──▼────▼──┐ AsyncTrajectory │ |
43 | | - │ │Channel In│ │ |
44 | | - │ └─────┬────┘ │ |
45 | | - │ take! │ │ |
46 | | - │ ┌─────▼─────┐ push! ┌────────────┐ │ |
47 | | - │ │RateLimiter├──────────► Trajectory │ │ |
48 | | - │ └─────┬─────┘ append! └────*───────┘ │ |
49 | | - │ │ * │ |
50 | | - │ put! │********************** │ |
51 | | - │ │ batch sampling │ |
52 | | - │ ┌─────▼─────┐ │ |
53 | | - │ │Channel Out│ │ |
54 | | - │ └───────────┘ │ |
55 | | - └────────────────────────────────────────────────┘ |
56 | | -``` |
| 66 | + |
| 67 | +A wide variety of `container`s, `sampler`s, and `controler`s are provided. For the full list, please read the doc. |
57 | 68 |
|
58 | 69 | ## Acknowledgement |
59 | 70 |
|
|
0 commit comments