我想在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
答案 0 :(得分:1)
将Q值存储在矩阵(或表)中的增强学习方法称为表格RL方法。这些是最直接/最简单的方法,但是正如您所发现的,并不总是那么容易应用。
您可以尝试的一种解决方案是离散化您的状态空间,创建许多“容器”。例如,hull_angle
观测值的范围可以从0
到2*pi
。例如,您可以将0 < hull_angle <= 0.1
映射到第一个容器的任何状态,将0.1 < hull_angle < 0.2
的状态映射到第二个容器,等等。如果观察值的范围从-inf
到+inf
,您可以简单地决定将某个阈值放在某个位置,并将超出该阈值的每个值都视为同一个bin(例如,从-inf
到-10
的所有内容都映射到同一个bin,从{ {1}}到10
另一个垃圾箱,然后在较小的区域中放置更多垃圾箱。
尽管如此,您必须将每个观测值离散化到这样的bin中(或简单地将一些观测值扔掉),并且所有bin索引的组合将形成矩阵中的单个索引。如果您有+inf
个不同的观测值,并为每个观测值创建了23
个bin,则最终的Q值矩阵将有10
个条目,这是一个...相当大的数字,可能内存不足。
一种不同的解决方案是使用 Function Approximation 查找不同的RL方法。函数近似的最简单方法类别是线性函数近似,这些是我建议您首先研究的方法。线性函数逼近方法实质上是尝试学习线性函数(权重向量),以便通过取权重向量与观测值/特征向量之间的点积来估算Q值。
如果您熟悉Sutton和Barto的《强化学习》第二版的草稿,则在第9-12章中会发现许多这样的方法。
另一类函数逼近方法使用(深度)神经网络作为函数逼近器,而不是线性函数。它们可能比线性函数逼近更好,但要理解起来也要复杂得多,并且通常需要很长时间才能运行。如果您想获得最佳结果,最好看一下它们,但是如果您仍在学习并且从未见过任何非表格式RL方法,那么研究诸如线性函数之类的更简单的变体可能是明智的。首先逼近。
答案 1 :(得分:0)
在连续状态空间的情况下,审慎地考虑神经网络近似而不是对数据进行合并,尤其是在您具有多个状态特征的情况下。绑定数据仍然会带来与维数相关的诅咒。如果要使用Q学习,请查看Deep Q-Networks。它是Deep RL的非常流行的版本,已被Google DeepMind普及。如果您想知道如何开始这个问题,请使用keras看一下简单的github示例,它是一个非常简单的神经网络库。