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 科学

Download history 13/week @ 2024-04-07 13/week @ 2024-04-14 24/week @ 2024-04-21 11/week @ 2024-04-28 18/week @ 2024-05-05 19/week @ 2024-05-12 19/week @ 2024-05-19 10/week @ 2024-05-26 22/week @ 2024-06-02 10/week @ 2024-06-09 13/week @ 2024-06-16 17/week @ 2024-06-23 3/week @ 2024-06-30 27/week @ 2024-07-07 25/week @ 2024-07-14 11/week @ 2024-07-21

66 每月下载量
7 个 包中使用

MIT/Apache 许可协议

68KB
1.5K SLoC

强化学习的核心组件。

观察和动作

[Obs] 和 [Act] 特征是环境中观察和动作的抽象。这些特征可以处理两个或更多样本,以实现向量化环境。

环境

[Env] 特征是环境的抽象。它有四个相关类型: ConfigObsActInfoObsAct 是环境观察和动作的具体类型。它们必须分别实现 [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 特质是重放缓冲区的抽象。对于处理样本,有两个关联类型:PushedItemBatchPushedItem 是表示推送到缓冲区的样本的类型。这些样本可能来自 [Step<E: Env>]。 [StepProcessorBase<E: Env>] 特质提供了将 [Step<E: Env>] 转换为 PushedItem 的接口。

Batch 是用于训练 Agent 的样本类型。用户实现 [Agent::opt()] 方法,使其处理 Batch 对象以执行优化步骤。

参考实现

SimpleReplayBuffer<O, A> 实现了 ReplayBufferBase。此类型有两个参数 OA,它们是重放缓冲区中观察和动作的表示。 OA 必须实现 SubBatch,它具有存储样本的功能,如 Vec<T>,用于观察和动作。关联类型 PushedItemBatch 是同一类型,StdBatch,表示 (o_t, r_t, a_t, o_t+1) 的集合。

SimpleStepProcessor<E, O, A> 可以与 SimpleReplayBuffer<O, A> 一起使用。它将 E::ObsE::Act 转换为各自类型的 SubBatch,并生成 StdBatch。转换过程依赖于特例限制,O: From<E::Obs>A: From<E::Act>

训练器

Trainer 管理训练循环和相关对象。通过配置 [Env]、ReplayBufferBaseStepProcessorBase 和一些训练参数来构建 Trainer 对象。然后,使用给定的 AgentRecorder 启动训练循环的 Trainer::train 方法。

依赖关系

~5–7MB
~146K SLoC