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