QQQ-Learning\mathrm{Learning}Learning算法介绍

  QQQ-Learning\mathrm{Learning}Learning是强化学习的算法之一,Q\mathrm{Q}Q-Learning\mathrm{Learning}Learning的主要目的就是学习状态动作价值函数的Q(s,a)Q(s,a)Q(s,a),其中Q(s,a)Q(s,a)Q(s,a)表示的是在给定当前状态sss和采取动作aaa之后能够获得的收益期望。QQQ-Learning\mathrm{Learning}Learning利用状态sss和动作aaa张成一个QQQ表来储存QQQ值,然后根据QQQ值来选取能够获得最大收益的动作。QQQ-Learning\mathrm{Learning}Learning采用是值迭代的方法进行求解,其核心的迭代公式为Qk+1(s,a)=∑s^∈Sp(s^∣s,a)[R(s,a)+γ⋅max⁡a^∈A{Qk(s^,a^)}]Q_{k+1}(s,a)=\sum\limits_{\hat{s}\in\mathcal{S}}p(\hat{s}|s,a)\left[R(s,a)+\gamma \cdot \max\limits_{\hat{a}\in \mathcal{A}}\{Q_k(\hat{s},\hat{a})\}\right]Qk+1​(s,a)=s^∈S∑​p(s^∣s,a)[R(s,a)+γ⋅a^∈Amax​{Qk​(s^,a^)}]其中Qk+1(s,a)Q_{k+1}(s,a)Qk+1​(s,a)第k+1k+1k+1次迭代函数,sss和aaa分别表示的是当前的状态和执行的动作并且它们分别属于状态空间S\mathcal{S}S和动作空间A\mathcal{A}A,R(s,a)R(s,a)R(s,a)表示的是在状态sss执行动作aaa后的即时奖励,s^\hat{s}s^和a^\hat{a}a^表示的是下一个的状态和行为,p(s^∣s,a)p(\hat{s}|s,a)p(s^∣s,a)表示的是状态转移概率,γ\gammaγ表示的是折扣系数。
 当动作空间A\mathcal{A}A中的动作aaa划分的足够细时候,给定当前状态sss和执行的动作aaa,就能够明确确定下一个状态s^\hat{s}s^,进而则有p(s^∣s,a)=1p(\hat{s}|s,a)=1p(s^∣s,a)=1,对上迭代公式进一步化简则有Qk+1(s,a)=R(s,a)+γ⋅max⁡a^∈A{Qk(s^,a^)}Q_{k+1}(s,a)=R(s,a)+\gamma \cdot \max\limits_{\hat{a}\in \mathcal{A}}\{Q_k(\hat{s},\hat{a})\}Qk+1​(s,a)=R(s,a)+γ⋅a^∈Amax​{Qk​(s^,a^)}一般情况下QQQ-Learning\mathrm{Learning}Learning算法用到的都是以上的迭代公式。

QQQ-Learning\mathrm{Learning}Learning具体实例

 如下左半图显示,该图共有六个状态,五个房间分别是状态000,111,222,333和444,以及房间外状态555,右半图为左半图的状态转移过程的抽象示意图。现在的问题是如果有一个人在任意的一个房间里,给他支个招让他走出房间外。我们就可以通过强化学习中的QQQ-Learning\mathrm{Learning}Learning方法来解决这个问题。

 在解决这个问题之前需要先确定奖励矩阵RRR,其元素表示的是当一个给定一个状态sss,当执行某个动作aaa后,它的即时奖励R(s,a)R(s,a)R(s,a)的取值。规定当走出房间外到达状态555的动作奖励为100100100,如果没有走出房间外但在房间内可以走通的是奖励为000,如果房间内也不能走通的动作奖励为−1-1−1。奖励矩阵RRR具体取值如下所示。
R=[−1−1−1−10−1−1−1−10−1100−1−1−10−1−1−100−10−10−1−10−1100−10−1−10100]R=\left[\begin{array}{rrrrrr}-1&-1&-1&-1&0&-1\\-1&-1&-1&0&-1&100\\-1&-1&-1&0&-1&-1\\-1&0&0&-1&0&-1\\0&-1&-1&0&-1&100\\-1&0&-1&-1&0&100\end{array}\right]R=⎣⎢⎢⎢⎢⎢⎢⎡​−1−1−1−10−1​−1−1−10−10​−1−1−10−1−1​−100−10−1​0−1−10−10​−1100−1−1100100​⎦⎥⎥⎥⎥⎥⎥⎤​

  • 首先确定折扣系数γ=0.8\gamma=0.8γ=0.8,并将QQQ初始化为一个零矩阵:Q=[000000000000000000000000000000000000]Q=\left[\begin{array}{cccccc}0&0&0&0&0&0\\0&0&0&0&0&0\\0&0&0&0&0&0\\0&0&0&0&0&0\\0&0&0&0&0&0\\0&0&0&0&0&0\end{array}\right]Q=⎣⎢⎢⎢⎢⎢⎢⎡​000000​000000​000000​000000​000000​000000​⎦⎥⎥⎥⎥⎥⎥⎤​
  • 第一轮第一次迭代随机选择初始状态为房间111,然后观察矩阵RRR的第二行(对应房间111或者状态111),这一行中有两个非负值,即当前状态111的下一步行为有两种可能:转至状态333或555,此时选择随机选择转至状态555。观察矩阵RRR的第六行(对应房间555或者状态555),这一行有三个非负值,即当前状态555的下一步行为有三种可能:转至状态111,444或555。根据QQQ-Learning\mathrm{Learning}Learning值迭代公式则有Q(1,5)=R(1,5)+0.8×max⁡{Q(5,1),Q(5,4),Q(5,5)}=100+0.8×max⁡{0,0,0}=100\begin{aligned}Q(1,5)&=R(1,5)+0.8 \times \max\left\{Q(5,1),Q(5,4),Q(5,5)\right\}\\&=100+0.8 \times \max \{0,0,0\}\\&=100\end{aligned}Q(1,5)​=R(1,5)+0.8×max{Q(5,1),Q(5,4),Q(5,5)}=100+0.8×max{0,0,0}=100​则此时将矩阵Q(1,5)Q(1,5)Q(1,5)位置(即该矩阵的第二行第六列)用100100100进行数值更新。
    Q=[00000000000100000000000000000000000000]Q=\left[\begin{array}{cccccc}0&0&0&0&0&0\\0&0&0&0&0&100\\0&0&0&0&0&0\\0&0&0&0&0&0\\0&0&0&0&0&0\\0&0&0&0&0&0\end{array}\right]Q=⎣⎢⎢⎢⎢⎢⎢⎡​000000​000000​000000​000000​000000​01000000​⎦⎥⎥⎥⎥⎥⎥⎤​
  • 第一轮第二次迭代随机选择状态为房间333,然后观察矩阵RRR的第四行(对应房间333或者状态333),这一行中有三个非负值,即当前状态333的下一步行为有三种可能:转至状态111,222或444,此时随机选择转至状态111。观察矩阵RRR的第二行(对应房间111或者状态111),这一行中有两个非负值,即当前状态111的下一步行为有两种可能:转至状态333或555。根据QQQ-Learning\mathrm{Learning}Learning值迭代公式则有Q(3,1)=R(3,1)+0.8×max⁡{Q(1,3),Q(1,5)}=0+0.8×max⁡{0,100}=80\begin{aligned}Q(3,1)&=R(3,1)+0.8 \times \max\left\{Q(1,3),Q(1,5)\right\}\\&=0+0.8 \times \max \{0,100\}\\&=80\end{aligned}Q(3,1)​=R(3,1)+0.8×max{Q(1,3),Q(1,5)}=0+0.8×max{0,100}=80​则此时将矩阵Q(3,1)Q(3,1)Q(3,1)位置(即该矩阵的第二行第六列)用808080进行数值更新。
    Q=[000000000001000000000800000000000000000]Q=\left[\begin{array}{cccccc}0&0&0&0&0&0\\0&0&0&0&0&100\\0&0&0&0&0&0\\0&80&0&0&0&0\\0&0&0&0&0&0\\0&0&0&0&0&0\end{array}\right]Q=⎣⎢⎢⎢⎢⎢⎢⎡​000000​0008000​000000​000000​000000​01000000​⎦⎥⎥⎥⎥⎥⎥⎤​
  • 经过多轮迭代之后直至QQQ矩阵收敛,则此时的QQQ即为所求,最后对QQQ矩阵进行归一化。 Q=[00004000000320050000032000040025604000320003200500040000400500]⟹Q=[0000800000640100000640008051080064006401000800080100]Q=\left[\begin{array}{cccccc}0&0&0&0&400&0\\0&0&0&320&0&500\\0&0&0&320&0&0\\0&400&256&0&400&0\\320&0&0&320&0&500\\0&400&0&0&400&500\end{array}\right]\Longrightarrow Q=\left[\begin{array}{cccccc}0&0&0&0&80&0\\0&0&0&64&0&100\\0&0&0&64&0&0\\0&80&51&0&80&0\\64&0&0&64&0&100\\0&80&0&0&80&100\end{array}\right]Q=⎣⎢⎢⎢⎢⎢⎢⎡​00003200​0004000400​00025600​032032003200​400004000400​050000500500​⎦⎥⎥⎥⎥⎥⎥⎤​⟹Q=⎣⎢⎢⎢⎢⎢⎢⎡​0000640​00080080​0005100​064640640​800080080​010000100100​⎦⎥⎥⎥⎥⎥⎥⎤​

 下图表示的是经过QQQ-Learning\mathrm{Learning}Learning算法学习之后得到的最终的状态转移示意图,其中每个带有箭头的线上标明这个动作对应的即时收益。所以不管在哪个状态下,只要利用贪心策略找即时收益最大的行为就可以走出房间。

 以上实例中QQQ-Learning\mathrm{Learning}Learning算法的完整代码如下所示,代码比较简单大约50行就可以完整实现该功能

import numpy as np
import os
import randomdef random_action(V):index_list = []for index, s in enumerate(list(V)):if s >= 0:index_list.append(index)return random.choice(index_list)def reward_setting(state_num, action_num):R = -1 * np.ones((state_num , action_num))R[0,4] = 0R[1,3] = 0R[1,5] = 100R[2,3] = 0R[3,1] = 0R[3,2] = 0R[3,4] = 0R[4,0] = 0 R[4,3] = 0R[4,5] = 100R[5,1] = 0R[5,4] = 0R[5,5] = 100return R if __name__ == '__main__':action_num = 6state_num = 6gamma = 0.8epoch_number = 200condition_stop = 5Q = np.zeros((state_num , action_num))R = reward_setting(state_num , action_num)for epoch in range(epoch_number):for s in range(state_num):loop = Truewhile loop:# Obtain random action aa = random_action(R[s,:])# Calculate maximum Q valueq_max = np.max(Q[a,:]) # Bellman optimal iteration equationQ[s,a] = R[s,a] + gamma * q_maxs = aif s == condition_stop:loop = FalseQ = (Q / 5).astype(int)print(Q)

实验结果如下所示,大约训练200轮之后QQQ矩阵就可以收敛到理论值,并且理论推导与实验结果一致。

强化学习之Q-Learning(附代码)相关推荐

  1. RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(复杂迷宫)的宝藏位置

    RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(复杂迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...

  2. RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(简单迷宫)的宝藏位置

    RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(简单迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...

  3. mdp框架_强化学习中q learning和MDP的区别是什么?

    MDP通常是指一种用转移概率描述连续不确定概率过程的数学框架,是强化学习中最基础的概念,很多强化学习的算法都是在把问题抽象为一个MDP之后再想办法求解的. 而q-learning是求解强化学习问题的算 ...

  4. Q学习(Q learning) 强化学习

    Q学习(Q learning) 强化学习的简单例子 Matlab实现 可视化_Morty 的挖坑记录-CSDN博客 强化学习(MATLAB) - 叮叮当当sunny - 博客园

  5. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

  6. 强化学习之Q学习与SARSA

    ** Q学习路径规划与SARSA法路径规划 ** Q学习与SARSA学习简介 强化学习的历史可以用两条各自独立但丰富多彩的主线来追溯..一条主线聚焦 于研究最优化控制,以及使用价值函数动态规划等算法来 ...

  7. 第七章 深度强化学习-深度Q网络系列1(Deep Q-Networks,DQN)

    获取更多资讯,赶快关注上面的公众号吧! 文章目录 第七章 深度强化学习-深度Q网络 7.1 学习目标 7.2 深度学习和强化学习的区别 7.3 DQN原理 7.4 DQN算法 7.4.1 预处理 7. ...

  8. 强化学习(Reinforcement learning)综述

    文章目录 Reinforcement learning 综述 强化学习的分类 环境(Model-free,Model-based) Based(Policy-Based RL & Value- ...

  9. 强化学习(Reinforcement Learning)是什么?强化学习(Reinforcement Learning)和常规的监督学习以及无监督学习有哪些不同?

    强化学习(Reinforcement Learning)是什么?强化学习(Reinforcement Learning)和常规的监督学习以及无监督学习有哪些不同? 目录

  10. MIT科学家Dimitri P. Bertsekas最新2019出版《强化学习与最优控制》(附书稿PDF讲义)...

    来源:专知 摘要:MIT科学家Dimitri P. Bertsekas今日发布了一份2019即将出版的<强化学习与最优控制>书稿及讲义,该专著目的在于探索这人工智能与最优控制的共同边界,形 ...

最新文章

  1. 马莉 - 人神共愤的处女座
  2. 架构之路--实战项目记录(二) 忘记数据库 开始抽象
  3. c语言实现天气预报步骤,天气预报是怎么预测天气的?天气预报制定需要哪些步骤...
  4. centos6.5环境下zookeeper-3.4.6集群环境部署及单机部署详解
  5. html中两个冒号,css中双冒号和单冒号区别
  6. python高级编程技巧
  7. leetcode 寻找两个有序数组的中位数
  8. 计算机视觉农作物检测,基于计算机视觉的农作物病害检测系统的研究
  9. 利用哈夫曼树编码与译码
  10. NOIP2011题目简析
  11. 深入浅出python中文版pdf-深入浅出Python 巴里著 中文 PDF版 [37M]
  12. 计算机一级仿宋gb2312,Word怎么设置仿宋体显示为仿宋GB2312字体?
  13. [乡土民间故事_徐苟三传奇]第廿九回_蠢财主落水知上当
  14. PCB设计中地的分类及含义
  15. git 提交修改备注
  16. SpringBoot 中新建一个Controller类,提示从未使用过的解决方法
  17. KannalaBrandt8鱼眼相机模型
  18. P1879 [USACO06NOV]Corn Fields G
  19. 验证身份证号码是否合法以及信息提取
  20. 数字图像处理(2)正交变换

热门文章

  1. p5.js 入门教程
  2. 8uftp,如何实现8uftp使用
  3. NSSM - 将任何exe应用封装成windows服务的神器
  4. python如何更新pip_[Python] 如何更新 PIP 到最新版本?
  5. 百度首页制作 (仿百度首页)
  6. 2022年度成都市工程系列专业技术高级职称申报评审工作内容及所需材料
  7. 安川机器人报错_安川机器人伺服驱动器常见的报警代码
  8. ImageJ 中文教程(细胞计数)
  9. Office在线预览,PPT在线预览,word在线预览,Excel在线预览,PDF在线预览
  10. Windows美化方案,个性不光是壁纸!