## 高级强化学习库
▪ 使用高级库的动机,不要从头开始重新实现一切。
▪ PTAN库以及最重要的部分,将通过代码示例进行说明。
▪ 针对CartPole上的DQN,使用PTAN库来实现。
▪ 可以考虑的其他RL库。
### 为什么使用强化学习库
RL十分灵活,并且很多现实生活中的问题都属于环境–智能体交互的类型。RL方法不会对观察和动作的细节做很多假设,所以用来解决CartPole环境的代码也适用于Atari游戏(可能需要一些小调整)。
**PTAN提供了下面的实体:**
▪ Agent:知道如何将一批观察转换成一批需要执行的动作的类。它还可以包含可选状态,当需要在一个片段中为后续动作记录一些信息的时候可以用到。(我们会在第17章用到这个方法,在深度确定性策略梯度(Deep Deterministic Policy Gradient,DDPG)中,需要在探索的时候包含奥恩斯坦–乌伦贝克随机过程)。本库提供了好几个智能体用于最常见的一些RL场景,你也完全可以编写自己的BaseAgent子类。
▪ ActionSelector:一小段与Agent协同工作的逻辑,它知道如何从网络的输出中选择动作。
▪ ExperienceSource和它的变体:Agent的实例和Gym环境对象可以提供关于片段轨迹的信息。它最简单的形式就是每次一个(a, r, s')状态转移,但其功能远不止如此。
▪ ExperienceSourceBuffer和它的变体:具有各种特性的回放缓冲区。包含一个简单的回放缓冲区和两个版本的带优先级的回放缓冲区。
▪ 各种工具类,比如TargetNet和用于时间序列预处理的包装器(用