我有兴趣实现Q学习(或某种形式的强化学习)来找到最佳协议 . 目前,我有一个用Python编写的函数,我可以在其中接受协议或“动作”和“状态”并返回一个新状态和一个“奖励” . 但是,我很难找到可以在这种情况下使用的Q-learning的Python实现(即可以学习该功能的东西,就好像它是一个黑盒子) . 我看过OpenAI健身房,但这需要编写一个新的环境 . 有人会知道我可以采用的更简单的包或脚本吗?
我的代码形式如下:
def myModel (state, action, param1, param2):
...
return (state, reward)
我正在寻找的是一种形式的算法:
def QLearning (state, reward):
...
return (action)
还有一些方法可以保持状态之间的转换 . 如果有人知道在哪里寻找这个,我会非常兴奋!
2 回答
这里提出的很多评论都要求您对强化学习有深入的了解 . 您似乎刚刚开始强化学习,所以我建议从最基本的Q学习算法开始 .
学习RL的最佳方法是为自己编写基本算法代码 . 该算法有两个部分(模型,代理),它看起来像这样:
其中s2是模型在执行动作后输入的新状态,a . 奖励基于在该州执行该操作 . 完成只是表示它是否是剧集的结束 . 好像你已经有了这个部分 .
下一部分是代理,看起来像这样:
有了这个,您可以构建一个RL代理来学习许多基本的东西以实现最佳控制 .
基本上,Q_learning_actions为您提供了在环境中执行所需的操作 . 然后使用该动作,计算模型的下一个状态和奖励 . 然后使用所有信息,使用新知识更新Q矩阵 .
如果有什么事情没有意义,请告诉我!
我还建议你从标准的Q学习算法开始 . 虽然如果你真的想尝试一种近似的Q学习算法,你可以从openAI获取任何Atari游戏并尝试解决控制问题
首先,您需要设计神经网络策略 .
这是非常简单的网络,但它会工作 . 同时避免使用像sigmoid和tanh这样的非线性:代理的观察结果没有标准化,因此sigmoids可能会从init饱和 .
然后我们用epsilon-greedy政策来采取行动
然后我们需要训练代理的Q函数以最小化TD损失
在进行梯度下降时,我们不会通过它传播渐变来使训练更加稳定
最后实现要最小化的均方误差
剩下的部分是生成会话 - 使用近似q学习代理播放env并同时训练它 .