Q-Learning和Sarsa一样是基于时序差分的控制算法,那两者有什么区别呢?

这里已经必须引入新的概念

时序差分控制算法的分类:在线和离线

在线控制算法:一直使用一个策略选择动作和更新价值函数,如Sarsa

离线控制算法:两个策略,一个选择新的动作,一个更新价值函数,如Q-Learning

Q-Learning简介

在S下基于ε-贪心策略选择动作A,执行A,获得奖励R,并进入下一个状态S’,

接下来如果是Sarsa,将继续基于ε-贪心策略选择动作A’,利用Q(S',A')更新价值函数,并在下一轮执行A’,这就是在线算法,学到什么就执行什么

但是Q-Learning则不同,它将基于贪心策略选择动作A’,利用Q(S',A')更新价值函数,但是在下一轮并不执行A',而是又基于ε-贪心策略选择动作,这就是离线算法,学到什么不一定执行什么

价值更新方式  Q(S,A)=Q(S,A)+α(R+γmaxaQ(S′,a)−Q(S,A))

对比Sarsa    Q(S,A)=Q(S,A)+α(R+γQ(S′,A′)−Q(S,A))

对比MC     Q(S,A)=Q(S,A)+(1/N)(Gt−Q(S,A))

在更新q值时,选择什么就执行什么,

在选择动作时,sarsa选择什么就执行什么,Q-Learning选择什么不一定执行什么

Q-Learning算法描述

输入:{S A R γ α ε},迭代轮数T

输出:所有的状态和动作对应的价值Q

1. 随机初始化所有的状态和动作对应的价值Q. 对于终止状态其Q值初始化为0.

2. for i from 1 to T,进行迭代。

  a) 初始化S为当前状态序列的第一个状态。

  b) 用 ε-贪婪法 在当前状态S选择动作A

  c) 在状态S执行当前动作A,得到新状态S’和奖励R

  d) 更新价值函数Q(S,A)=Q(S,A)+α(R+γmaxaQ(S′,a)−Q(S,A))

  e) S=S′

  f) 如果S'是终止状态,当前轮迭代完毕,否则跳转到步骤b)

Q-Learning解决Windy GridWorld

for i in range(10000):
# 10000 轮
while True:
maxq0, r0, stat_0, action0 = choose(start) # e 贪心
if stat_0 == end:
start = [3, 0]
break maxq, r, stat_1, action = choose_max(stat_0) # 贪心
q[get_q_x(start), actions.index(action0)] += alpha * (r0 + maxq - q[get_q_x(start), actions.index(action0)])
start = stat_0

结果同Sarsa

Sarsa 与 Q-Learning 的比较

Sarsa在学习最优策略的同时还在做探索,而Q-Learning直接学习最优策略

这使得

1. Sarsa在训练时,为了保证收敛,需要设定规则,逐渐减小探索率,Q-Learning则不需要

2. Q-Learning直接学习的最优策略,而最优策略是基于当前数据的,这等于放弃了其他更好的机会,可能收敛于局部最优,Q-Learning的强化版Deep Q-Learning也有这个问题

3. Sarsa属于保守型,Q-Learning属于激进派

  // 好比传销的洗脑,骗子告诉你今天干得好能挣1000块钱,明天干得好能挣5000块钱,但是如果不好好干,可能只有100块,Sarsa听了,觉得干好了才能多挣钱,万一干不好,哎,慢慢来吧,而Q-Learning听了,一算,我今天挣1000,明天5000,发财了,于是立即成为忠实的传销分子,这就是急于求成,容易出错

  // 对应到算法上,就是Sarsa训练的模型比较平滑,而Q-Learning陡峭,可能局部最优

4. 在实际应用中,如果在模拟环境中训练模型,推荐Q-Learning,如果在真实环境中训练模型,推荐Sarsa

总结

Q-Learning和Sarsa一样,很灵活,但是不适合解决大规模问题

强化学习8-时序差分控制离线算法Q-Learning的更多相关文章

  1. 强化学习4-时序差分TD

    之前讲到强化学习在不基于模型时可以用蒙特卡罗方法求解,但是蒙特卡罗方法需要在每次采样时生产完整序列,而在现实中,我们很可能无法生成完整序列,那么又该如何解决这类强化学习问题呢? 由贝尔曼方程 vπ(s ...

  2. 强化学习中REIINFORCE算法和AC算法在算法理论和实际代码设计中的区别

    背景就不介绍了,REINFORCE算法和AC算法是强化学习中基于策略这类的基础算法,这两个算法的算法描述(伪代码)参见Sutton的reinforcement introduction(2nd). A ...

  3. 强化学习(七)时序差分离线控制算法Q-Learning

    在强化学习(六)时序差分在线控制算法SARSA中我们讨论了时序差分的在线控制算法SARSA,而另一类时序差分的离线控制算法还没有讨论,因此本文我们关注于时序差分离线控制算法,主要是经典的Q-Learn ...

  4. 【转载】 强化学习(七)时序差分离线控制算法Q-Learning

    原文地址: https://www.cnblogs.com/pinard/p/9669263.html ------------------------------------------------ ...

  5. 强化学习(五)用时序差分法(TD)求解

    在强化学习(四)用蒙特卡罗法(MC)求解中,我们讲到了使用蒙特卡罗法来求解强化学习问题的方法,虽然蒙特卡罗法很灵活,不需要环境的状态转化概率模型,但是它需要所有的采样序列都是经历完整的状态序列.如果我 ...

  6. 【转】【强化学习】Deep Q Network(DQN)算法详解

    原文地址:https://blog.csdn.net/qq_30615903/article/details/80744083 DQN(Deep Q-Learning)是将深度学习deeplearni ...

  7. 强化学习算法DQN

    1 DQN的引入 由于q_learning算法是一直更新一张q_table,在场景复杂的情况下,q_table就会大到内存处理的极限,而且在当时深度学习的火热,有人就会想到能不能将从深度学习中借鉴方法 ...

  8. 强化学习(四)用蒙特卡罗法(MC)求解

    在强化学习(三)用动态规划(DP)求解中,我们讨论了用动态规划来求解强化学习预测问题和控制问题的方法.但是由于动态规划法需要在每一次回溯更新某一个状态的价值时,回溯到该状态的所有可能的后续状态.导致对 ...

  9. 【转载】 强化学习(四)用蒙特卡罗法(MC)求解

    原文地址: https://www.cnblogs.com/pinard/p/9492980.html ------------------------------------------------ ...

随机推荐

  1. Android中SharedPerforences的简单使用示例 --Android基础

    SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedP ...

  2. 20170922xlVBA_GetCellTextFromWordDocument

    Sub GetCellTextFromWordDocument() '应用程序设置 Application.ScreenUpdating = False Application.DisplayAler ...

  3. H3C S6800交换机 BCM shell命令

    H3C S6800交换机 BCM shell命令 http://wgli978.blog.163.com/blog/static/13592877220172315858831/ <H3C> ...

  4. yii框架中获取添加数据后的id值

    Yii::$app->db->createCommand()->insert('month4_user',['openid'=>$openid,'integ'=>0])- ...

  5. windows系统文件和linux系统文件

    windows系统文件和linux系统文件 1.单用户操作系统和多用户操作系统 单用户操作系统:指一台计算机在同一时间 只能由一个用户 使用,一个用户独自享用系统的全部硬件和软件资源 Windows ...

  6. Luffy之登录认证以及JWT

    1.用户认证 在前面我们已经完成了,前端登录页面的搭建,以及路由分配,现在我们作关于登录认证部分的东西 Django提供了认证系统.认证系统包含: 用户 权限:二元(是/否)标志指示一个用户是否可以做 ...

  7. Android VideoView播放网络视频简介(转)

    最近项目中用到了很多视频播放的地方,不管是聊天发送的视频消息,还是类似内涵段子的视频列表,都会涉及这些知识,不过网上的知识都很零散,一会找缓存方法,一会找预览图片的方法,一会找视频动态修改尺寸的方法, ...

  8. 四则运算Java语言实验设计过程1

    题目要求: 像二柱子那样,花二十分钟写一个能自动生成三十道小学四则运算题目的 “软件”.要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性).题目避免重复.可定制出题的数量. 设计思路 ...

  9. 如何引用GitHub的静态资源文件 js css

    参考:引用GitHub的静态资源文件 有些人说直接用 Github Raw 浏览器不执行是因为返回的 content-type 是 text/plain,这么说不准确.实际上浏览器对 MIME 类型并 ...

  10. [转载]完全理解Python迭代对象、迭代器、生成器

    译文地址:liuzhijun 在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导 ...