【发布时间】:2019-02-13 21:00:26
【问题描述】:
我有兴趣实施 Q 学习(或某种形式的强化学习)以找到最佳协议。目前,我有一个用 Python 编写的函数,我可以在其中接受协议或“动作”和“状态”并返回一个新状态和一个“奖励”。但是,我很难找到可以在这种情况下使用的 Q-learning 的 Python 实现(即可以像黑匣子一样学习函数的东西)。我看过 OpenAI 健身房,但这需要编写一个新环境。有人知道我可以为此采用更简单的包或脚本吗?
我的代码是这样的:
def myModel (state, action, param1, param2):
...
return (state, reward)
我正在寻找的是以下形式的算法:
def QLearning (state, reward):
...
return (action)
还有一些方法可以保持在状态之间转换的动作。如果有人知道在哪里可以找到这个,我会非常兴奋!
【问题讨论】:
-
我知道的所有 RL 工具箱都有用于转换函数和策略的单独代码,而您的代码似乎将它们合并到
myModel中。我建议您调整您的代码以具有action = policy(state,param1,param2)和(state,reward) = step(state,action)。step函数将进入健身房环境(只需复制并适应最简单的环境之一,它比您想象的要容易)。 -
感谢您的回复!我对
action = policy(state,param1,param2)有点困惑,因为目标是学习最优策略(如果我没记错的话)? -
是的,策略是参数化的,您可以学习最佳参数。你要做的是:你从一些初始的
params_0开始,收集样本,更新参数并获得params_1,重复直到学习到最佳参数(=policy)。样本的收集是这样的:绘制初始状态,根据policy(state,params_i)绘制一个动作,将动作馈送到模拟器step(state,action)以获得下一个状态和奖励,并重复直到满足某个终止条件(通常也是收集更多这样的轨迹,直到你有足够的样本)。 -
所以
params在每次学习迭代中都会更新。通常策略包括某种探索噪声(你可以学习噪声,或者只是手动减少它)。或者,您可以自己收集样本(使用随机策略或手动添加噪声并随着时间的推移减少它),当您有足够的数据时运行学习算法而不与模拟器进一步交互并获得最佳策略“一口气”。算法效果更好取决于您要解决的问题。 OpenAI 还有一个包含第一类 RL 算法的存储库。 -
一个很好的开始使用 RL 的存储库可能是 this(还有第二个具有更多算法的存储库)。很抱歉有很多 cmets,但我认为这并不能真正回答你的问题:D
标签: python reinforcement-learning q-learning openai-gym