4 个版本
0.0.6 | 2023年9月19日 |
---|---|
0.0.5 | 2022年1月22日 |
0.0.4 | 2021年7月18日 |
0.0.3 | 2021年5月30日 |
#1028 in 科学
66 每月下载量
在 7 个 包中使用
68KB
1.5K SLoC
强化学习的核心组件。
观察和动作
[Obs
] 和 [Act
] 特征是环境中观察和动作的抽象。这些特征可以处理两个或更多样本,以实现向量化环境。
环境
[Env
] 特征是环境的抽象。它有四个相关类型: Config
,Obs
,Act
和 Info
。 Obs
和 Act
是环境观察和动作的具体类型。它们必须分别实现 [Obs
] 和 [Act
] 特征。实现 [Env
] 的环境在每次与环境交互的步骤中通过 [Env::step()
] 方法生成 [Step<E: Env>
] 对象。
Info
在智能体和环境每次交互的步骤中存储一些信息。它可以是一个空的(零大小的结构体)。Config
表示环境的配置,并用于构建。
策略
[Policy<E: Env>
] 代表一个策略,从该策略中为环境 E
抽样动作。 [Policy::sample()
] 接收 E::Obs
并输出 E::Act
。它可以是概率性的或确定性的。
智能体
在本软件包中, [Agent<E: Env, R: ReplayBufferBase>
] 被定义为可训练的 [Policy<E: Env>
]. 它处于训练模式或评估模式之一。在训练模式下,代理的策略可能是概率性的,用于探索,而在评估模式下,策略可能是确定性的。
[Agent::opt()
] 方法执行单个优化步骤。优化步骤的定义取决于每个代理。它可能是一个优化步骤中的多个随机梯度步骤。用于训练的样本来自 R: ReplayBufferBase
。
此特质还具有保存/加载给定目录中训练策略的方法。
重放缓冲区
ReplayBufferBase
特质是重放缓冲区的抽象。对于处理样本,有两个关联类型:PushedItem
和 Batch
。PushedItem
是表示推送到缓冲区的样本的类型。这些样本可能来自 [Step<E: Env>
]。 [StepProcessorBase<E: Env>
] 特质提供了将 [Step<E: Env>
] 转换为 PushedItem
的接口。
Batch
是用于训练 Agent
的样本类型。用户实现 [Agent::opt()
] 方法,使其处理 Batch
对象以执行优化步骤。
参考实现
SimpleReplayBuffer<O, A>
实现了 ReplayBufferBase
。此类型有两个参数 O
和 A
,它们是重放缓冲区中观察和动作的表示。 O
和 A
必须实现 SubBatch
,它具有存储样本的功能,如 Vec<T>
,用于观察和动作。关联类型 PushedItem
和 Batch
是同一类型,StdBatch
,表示 (o_t, r_t, a_t, o_t+1)
的集合。
SimpleStepProcessor<E, O, A>
可以与 SimpleReplayBuffer<O, A>
一起使用。它将 E::Obs
和 E::Act
转换为各自类型的 SubBatch
,并生成 StdBatch
。转换过程依赖于特例限制,O: From<E::Obs>
和 A: From<E::Act>
。
训练器
Trainer
管理训练循环和相关对象。通过配置 [Env
]、ReplayBufferBase
、StepProcessorBase
和一些训练参数来构建 Trainer
对象。然后,使用给定的 Agent
和 Recorder
启动训练循环的 Trainer::train
方法。
依赖关系
~5–7MB
~146K SLoC