IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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代码吧,其实很简单:

主函数:

if __name__ == "__main__":
    env = Env()
    agent = QLearningAgent(actions=list(range(env.n_actions)))
    for episode in range(1000):  #循环1000次
        state = env.reset()
        action = agent.get_action(str(state))
        while True:
            env.render()
            # agent产生动作   #str()是把数字转为字符串
            next_state, reward, done = env.step(action)
            next_action = agent.get_action(str(next_state))
            # 更新Q表
            agent.learn(str(state), action, reward, str(next_state),next_action)
            state = next_state   #状态更新
            action = next_action
            env.print_value_all(agent.q_table)
            # 当到达终点就终止游戏开始新一轮训练
            if done:
                break

这里主要是将获取当前状态的当前动作放在了while循环之外,然后在循环内有一个获得下一个动作A_的代码,并且后面的agent.learn进行了修改,原来Q-learning的agent.learn只有四个输入,现在有五个输入,看下面的对比:

agent.learn(str(state), action, reward, str(next_state))  #Q-learning

agent.learn(str(state), action, reward, str(next_state),next_action)   #SARSA

当然,这里改了的话那learn函数也相应的要改:

    def learn(self, state, action, reward, next_state, next_action):
        current_q = self.q_table[state][action]   #找到Q表中对应的坐标,分别给其加入选择状态的Reward
        # 贝尔曼方程更新
        new_q = reward + self.discount_factor * self.q_table[next_state][next_action]   #更新Q值
        self.q_table[state][action] += self.learning_rate * (new_q - current_q)

这里是前面的定义也增添了next_action,然后在计算new_q的时候主要是self.q_table这里进行了修改,下面放出对比:

new_q = reward + self.discount_factor * max(self.q_table[next_state])   #Q-learning

new_q = reward + self.discount_factor * self.q_table[next_state][next_action]   #SARSA

这里是根据Q-learning的算法和SARSA的算法来的,大家可以结合算法进行分析。

然后放上SARSA的结果图:

在这里插入图片描述
SARSA在刚开始的时候也会不断的试错,掉进三角形那里,当然也会进入圆形区域,然后主要是运行一段时间后,SARSA的agent会一直在左上角的四个白格子那里徘徊,就类似我前面说的“害怕死亡”,但因为这里我们给了10%的动作随机性,所以agent还是有可能走出那四个格子,然后大概率会进入圆形区域,也不排除进行三角形区域的可能性,不过最后训练的结果还是很成功的,而且大家可以发现右下角有两个格子是完全没有被探索过的。

最后做个说明:本人最近也是刚开始学强化学习,比较经典的算法还是要过一遍的,写这篇文章一是自己记录一下,二是也给其他跟我一样的小白看一看,如果有不懂的可以互相交流。后面的文章讲经典算法的可能比较少一些,B站的莫烦大佬已经讲的很清晰了,除非我有过自己的代码实现或者修改可能会分享给大家,谢谢!

更新一下:
绿色伪代码图中的Q-learning有点问题,橙色标出的γmax(s’,a’)这里应该有问题,这里应该是γmax(s’,a),因为Q-learning的Q值计算没有用到下一时刻的动作,所以这里应该是a不是a’。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:38:10  更:2021-07-29 11:41:28 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码