python - 如何实现 Q 学习来逼近最优控制?
问题描述
我有兴趣实施 Q 学习(或某种形式的强化学习)以找到最佳协议。目前,我有一个用 Python 编写的函数,我可以在其中接受协议或“动作”和“状态”并返回一个新状态和一个“奖励”。但是,我很难找到可以在这种情况下使用的 Q-learning 的 Python 实现(即可以像黑盒子一样学习函数的东西)。我看过 OpenAI 健身房,但这需要编写一个新环境。有人知道我可以为此采用更简单的包或脚本吗?
我的代码形式如下:
def myModel (state, action, param1, param2):
...
return (state, reward)
我正在寻找的是以下形式的算法:
def QLearning (state, reward):
...
return (action)
以及保持状态之间转换的一些方法。如果有人知道在哪里可以找到这个,我会非常兴奋!
解决方案
这里提出的很多评论都要求你对强化学习有深入的了解。看来你刚刚开始学习强化学习,所以我建议从最基本的 Q 学习算法开始。
学习 RL 的最好方法是自己编写基本算法。该算法有两部分(模型、代理),它看起来像这样:
model(state, action):
...
return s2, reward, done
其中 s2 是模型在执行动作后进入的新状态,a。奖励基于在该状态下执行该操作。完成只是表示它是否是剧集的结尾。好像你已经有了这个部分。
下一部分是代理,如下所示:
states = [s1, s2, s3, ...]
actions = [a1, a2, a3, ...]
Q_matrix = np.zeros([state_size, action_size])
discount = 0.95
learning_rate = 0.1
action_list = []
def q_learning_action(s, Q_matrix):
action = index_of_max(Q_matrix[s, :])
action_list.append(action) # Record your action as requested
return action
def q_learning_updating(s, a, reward, s2, Q_matrix):
Q_matrix[s, a] = (1 - learning_rate)Q_matrix[s, a] + learning_rate*(reward + gamma*maxQ_matrix[s2, a])
s = s2
return s, Q_matrix
有了这个,您可以构建一个 RL 代理来学习许多基本知识以实现最佳控制。
基本上,Q_learning_actions 为您提供了在环境中执行所需的操作。然后使用该动作,计算模型的下一个状态和奖励。然后使用所有信息,用新知识更新你的 Q 矩阵。
如果有什么不明白的,请告诉我!
推荐阅读
- python - 在 github 操作中安装带有诗歌的包会安装依赖项,但不会安装我的项目
- php - 在 Oracle sql 语句中一一传入数组值
- html - 我怎样才能摆脱这个奇怪的空间?
- javascript - 父组件未获取子组件中 EventEmitter 值的更改
- qradar - 使用 Qualys 应用程序丰富 QRadar 中的数据
- xml - 为具有自定义 xsi:type 元素的 XML 创建 XSD 时出现命名空间错误
- python - 如何比较 Pandas 数据框中的日期值?
- azure-webjobs - 在 WebJob QueueTrigger 中接收强类型数据的最佳方式是什么?
- html - 有没有办法从公用文件夹内的 HTML 文件调用公用文件夹外的文件?
- mysql - SQL 触发器 - 有一个会搞乱新的 SQL 查询