python - Q 矩阵维度在 Q 学习的开放式环境中应该是什么?
问题描述
我想在 OpenAI 的 Bipedal Walker v2 中实现 Q 学习,但是在寻找教程之后,它们似乎总是有限的环境,这使得 Q 矩阵和奖励矩阵易于初始化。
例如: http: //mnemstudio.org/path-finding-q-learning-tutorial.htm
我唯一的问题是,在更开放的环境(例如我想要使用的环境)中,这些矩阵的维度应该是多少?
有问题的环境:https ://gym.openai.com/envs/BipedalWalker-v2/
您得到的观察结果(请注意,有些值可能是无限的):https ://github.com/openai/gym/wiki/BipedalWalker-v2
解决方案
将 Q 值存储在矩阵(或表)中的强化学习方法称为表格 RL 方法。这些是最直接/最简单的方法,但正如您所发现的,并不总是很容易适用。
您可以尝试的一种解决方案是离散化您的状态空间,创建大量“垃圾箱”。例如,hull_angle
观察范围可以从0
到2*pi
。例如,您可以将任何状态映射0 < hull_angle <= 0.1
到第一个 bin,将状态映射0.1 < hull_angle < 0.2
到第二个 bin,等等。如果观察范围可以从-inf
到+inf
,您可以简单地决定在某处放置一个阈值并处理超出的每个值该阈值与相同的 bin 相同(例如,从映射-inf
到-10
同一 bin 的所有内容,从10
另一个+inf
bin 的所有内容,然后在较小的区域之间放置更多 bin)。
不过,您必须将每一个观察结果离散化到这样的 bin 中(或者干脆丢弃一些观察结果),并且所有 bin 索引的组合将在矩阵中形成一个索引。如果您有23
不同的观察结果,并为每个观察结果创建例如10
bin,您的最终 Q 值矩阵将包含10^23
条目,这是一个......相当大的数字,可能不适合您的记忆。
另一种解决方案是使用Function Approximation研究不同的 RL 方法。具有函数逼近的最简单的方法类使用Linear Function Approximation,这些是我建议首先针对您的问题研究的方法。线性函数逼近方法本质上是尝试学习一个线性函数(权重向量),以便通过获取权重向量和观察/特征向量之间的点积来估计您的 Q 值。
如果你熟悉 Sutton 和 Barto 的强化学习书第二版的草稿,你会在第 9-12 章中找到许多这样的方法。
另一类函数逼近方法使用(深度)神经网络作为函数逼近器,而不是线性函数。这些可能比线性函数逼近更有效,但也更难理解,并且通常需要很长时间才能运行。如果您想获得最佳结果,不妨看看它们,但如果您仍在学习并且从未见过任何非表格 RL 方法,那么研究更简单的变体(例如线性函数)可能是明智的先近似。
推荐阅读
- android - AndroidX 重构:旧的支持库仍在其他第三方库中使用
- javascript - 你把使用函数之外的东西的函数和自包含的函数称为什么?
- css - CSS animation re-played after :hover animation
- spring - Spring/Mockito Junit 测试空指针异常
- ios - IOS/Objective-C/Storyboard:防止 ViewController 模态启动
- jpeg - JPG DHT 中的值顺序
- http - 为 Pintrest 添加 HTTP 和 HTTPS 社交共享计数
- webgl - WebGL:在同一个绘图调用中绘制不同的几何图元?
- python - 用于发布的 Python 中的简单 websocket 服务器
- c# - ComboBox 的 SelectedIndexChanged 事件 - 填充控件值