Q-learning是RL最基础的算法,于1989年由Watkins被提出来,与同样经典的SARSA算法非常类似。
按木盏习惯,本文依旧不会大量堆公式,尽量以易理解的方式来表达Q-Learning。


1. 查表操作

查表操作”这四个字足以概括Q-Learning的精髓。大家都知道强化学习的用处就是“做决策”,翻译成计算机科学语言就是:在当前的state下选择对应的action
这一步完全可以用查表法来操作:

Q-table action: 1 action: 2 action: 3 action: 4
state: 1 17 6 7 0
state: 2 28 0 1 3
state: 3 16 -3 0 -1
state: 4 14 23 11 9

上表所示就是一张Q值表,当机器处于某个state时,它会查表来告诉自己该做什么action。它会选择Q值最大的那个action。比如AlphaGo在写围棋的时候,脑子里也有这么个东西,指导自己下一步棋该落在哪里。

Q-Learning学习的本质就是不断更新Q-table,Q-table就是Q学习学到的“智商”。

2.马尔可夫域

Q-Learning是有使用范围的。首先,你的使用场景必须能被马尔可夫域建模。
满足:1. 机器所处的状态必须有限,这就是“状态机收敛”;
2. 机器所处的状态是连通的,不然机器可能永远困在子状态机里;
概括一下就是:Q-Learning本质上也是一个马尔可夫模型,是马尔科夫链的高级用法
本科时学过两门课,数字电路和计算机网络。数字电路中时序逻辑电路的状态机就是马尔科夫链的方法,而查表的套路就和计算机网络中路由表的套路如出一辙。所以,知识还是互通的~


3. R-table

R表是reward table,即奖赏表。查寻R表给与机器足够的奖励,让机器知道从哪个方向努力。R表具有与Q表一样的结构:column由action构成,row由state构成。
R表就是我们事先要告诉机器的,可以理解为对目前环境的抽象表达。


4. 一个Q-Learning实例

引用自:http://mnemstudio.org/path-finding-q-learning-tutorial.htm

这是一个机器人出房间的例子。我们可以看到,只有到5号区域才算出门。主要信息有2个:你现处于哪个房间(即state)以及你下一步去哪个房间(即action)。
用马尔可夫模型来建模:

圆圈表示你现在所出的state,箭头表示你可以做的action。

我们把机器人放在2号房间,等它到5号区域才算完成任务。所以,我们可以根据场地建立如下模型:

只有到5号,我们才给100块作为奖赏,其他的情况都不给钱。这就是我们的实际环境,我们只需要告诉机器到哪一步才能尝到甜头,剩下的路径,需要机器自己一边学习一边规划。
还有一些不可能的case,比如,0号房间不能到2号房间,它的下一步action只能是4号房间。我们的R表会把奖赏值设为-1。
所以,这里的R表就可以是:

对照着上面的图看,应该很容易理解吧。R表就是对目前环境的抽象描述。
好,现在来开始Q-Learning:
第一步,初始化Q表,可以设置为全0:

Q表在机器学习的过程中会不断更新,而更新的法则只有一行公式:(读懂这行公式,你就完全掌握Q-Learning了)
Q(s,a)=R(s,a)+γ∗max(Q(snext,aall))Q(s,a)=R(s,a)+\gamma*max(Q(s_{next}, a_{all}))Q(s,a)=R(s,a)+γ∗max(Q(snext​,aall​))
sss表示state,aaa表示action。Q(s,a)即访问Q 表的对应位置,R(s,a)即访问R表的对应位置。
max(Q(snext,aall))max(Q(s_{next}, a_{all}))max(Q(snext​,aall​))表示选取下一个状态中,最大Q值的那个action,并且获取它的Q值。
γ\gammaγ你可以理解成学习率啦,设置0.8就可以了。
以这个更新法则,在不停地迭代之后,我们可以得到一张最终的Q表:

到这一步,Q-Learning就完成咯~
附个python代码:python2/3

import numpy as np
import randomr = np.array([[-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]])q = np.zeros([6,6],dtype=np.float32)gamma = 0.8step = 0
while step < 1000:state = random.randint(0,5)if step%100 ==0:print('step %d:' % step)print(q)if state != 5:next_state_list=[]for i in range(6):if r[state,i] != -1:next_state_list.append(i)next_state = next_state_list[random.randint(0,len(next_state_list)-1)]qval = r[state,next_state] + gamma * max(q[next_state])q[state,next_state] = qvalstep += 1for i in range(10):print("\nvalidation epoch: {}".format(i + 1))state = random.randint(0, 5)print('robot state: {}'.format(state))count = 0while state != 5:if count > 20:print('fail')breakq_max = q[state].max()q_max_action = []for action in range(6):if q[state, action] == q_max:q_max_action.append(action)next_state = q_max_action[random.randint(0, len(q_max_action) - 1)]print("the robot goes to " + str(next_state) + '.')state = next_statecount += 1

强化学习之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. 强化学习之Q学习与SARSA

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

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

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

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

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

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

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

  9. 学习笔记|强化学习(Reinforcement Learning, RL)——让AlphaGo进化得比人类更强

    文章目录 1. 题外话:人类棋手的最后赞礼 2. 强化学习概述 2.1 强化学习的目标也是要找一个Function 2.2 强化学习的三个基本步骤 2.2.1 定义一个function 2.2.2 定 ...

  10. 百度强化学习之Policy learning

    强化学习初探 1.代码 1.1.导入依赖 1.2.设置超参 1.3.搭建Model.Algorithm.Agent架构 1.4.Algorithm 1.5.Agent 1.6.Training &am ...

最新文章

  1. ionic3中使用自定义配置
  2. java javaw javaws MC_java和 javaw 以及 javaws的區別
  3. k8s operator开发脚手架kubebuilder 3.2.0安装脚本整理
  4. 审批流程展示html,Web企业在线审批流程系统
  5. linux如何过滤字符串,在linux系统如何grep过滤中,不包含某些字符串的命令
  6. WPF框架教程 | 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器
  7. 编程 mcq_MCQ | 8255 PPI(可编程外围接口)
  8. 深入浅出Zookeeper(一) Zookeeper架构及FastLeaderElection机制
  9. tomcat启动时,没有启动你所配置的项目(原因可能是Eclipse 中的工程builed 失败造成),如何解决~
  10. Leetcode 254.因子的组合
  11. 学渣的逆袭(各种暴力~)
  12. c++ 2D小球 碰撞模拟
  13. 文本聚类算法 python_文本聚类算法之K-means算法的python实现
  14. 拼多多回应漏洞:比薅羊毛更快的是“资损200亿”谣言的传播速度
  15. xctf攻防世界 CRYPTO高手进阶区 best_rsa
  16. html音乐播放心得体会,听音乐讲座心得体会范文3篇
  17. pacman 查询_pacman (简体中文)
  18. 摄像头直播视频接口视频播放器
  19. Java音乐播放器设计
  20. c语言设置单片机中断优先级,如何设置51单片机的中断优先级

热门文章

  1. 六年级4月27日——5月1日课程表
  2. 51单片机的基本数据类型简介
  3. 常见的非关系型数据库(非RDBMS)
  4. display:-webkit-flex;
  5. EPG开发《异常排查以及解决方案》
  6. zan php demo,Zan 连接池
  7. 网页查重算法Shingling和Simhash和bloom filter研究
  8. 艾默生流量计类型流量计的应用特点
  9. 2018沈阳网络赛:J kachang KD树
  10. Tensorflow-制作与使用tfrecord数据集