| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 强化学习(二):SARSA,附代码改写 -> 正文阅读 |
|
[人工智能]强化学习(二):SARSA,附代码改写 |
强化学习(二):SARSA,附代码改写本篇文章带来第二个经典强化学习算法:SARSA。 SARSA这个名字其实是State、Action、Reward、State_、Action_的组合,因为它在计算Q值的时候利用到了这五个值,其中State_是下一个时刻的状态,Action是下一个时刻的动作。相比于Q-learning的不同在于SARSA的Q值计算用到了下一时刻的动作,而Q-learning没有,Q-learning只用到了SARS,前四个。 SARSA与Q-learning很相似,也有不同,它们的不同之处在于SARSA是在线on-policy算法,而Q-learning是离线算法;并且我们在计算SARSA的Q值时用到了下一时刻的动作A_,这也是SARSA的一个特点,就是说agent在下一时刻一定是执行动作A_,而Q-learning不是。到后面如果大家按照我的方法去改强化学习(一)的Q-learning的代码就会发现,我们把绿色三角形比作悬崖,如果agent碰到悬崖就会死亡,那么Q-learning的agent就是不怕死的类型,它很快就能训练到收敛,可以得到“最优路径”;而SARSA的agent不同,它就比较“害怕死亡”,所以在最初的几次"死亡"后,它会避开障碍物,或者说会犹豫,这一步在运行代码的时候比较明显能看出来,所以SARSA的训练时间就本篇文章的代码而言要比Q-learning长一些。 但是从实际上来看,SARSA要比Q-learning好,因为实际生活中我们并没有像Q-learning那样那么多次试错的机会。 这里贴上两个伪代码的对比: 下面介绍一下怎么修改强化学习(一)中的Q-learning代码吧,其实很简单: 主函数:
这里主要是将获取当前状态的当前动作放在了while循环之外,然后在循环内有一个获得下一个动作A_的代码,并且后面的agent.learn进行了修改,原来Q-learning的agent.learn只有四个输入,现在有五个输入,看下面的对比:
当然,这里改了的话那learn函数也相应的要改:
这里是前面的定义也增添了next_action,然后在计算new_q的时候主要是self.q_table这里进行了修改,下面放出对比:
这里是根据Q-learning的算法和SARSA的算法来的,大家可以结合算法进行分析。 然后放上SARSA的结果图:
最后做个说明:本人最近也是刚开始学强化学习,比较经典的算法还是要过一遍的,写这篇文章一是自己记录一下,二是也给其他跟我一样的小白看一看,如果有不懂的可以互相交流。后面的文章讲经典算法的可能比较少一些,B站的莫烦大佬已经讲的很清晰了,除非我有过自己的代码实现或者修改可能会分享给大家,谢谢! 更新一下: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/22 9:54:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |