【Python强化学习】时序差分法Sarsa算法和Qlearning算法在冰湖问题中实战(附源码)

简介: 【Python强化学习】时序差分法Sarsa算法和Qlearning算法在冰湖问题中实战(附源码)

需要源码请点赞关注收藏后评论区留言私信~~~

时序差分算法

时序差分法在一步采样之后就更新动作值函数Q(s,a),而不是等轨迹的采样全部完成后再更新动作值函数。

在时序差分法中,对轨迹中的当前步的(s,a)的累积折扣回报G,用立即回报和下一步的(s^′,a^′)的折扣动作值函数之和r+γQ(s^′,a^′)来计算,即:

G=r+γQ(s^′,a^′)

在递增计算动作值函数时,用一个[0,1]之间的步长α来代替1/N(s,a)。动作值函数Q(s,a)的递增计算式为:

Sarsa算法与Qlearning算法

在蒙特卡罗法中,当前状态s下,对动作的采样是完全依据Q(s,a)来进行的,选中a的概率与对应的Q(s,a)的大小成正比。在时序差分法中,对动作的采样采用ε-贪心策略,Q(s,a)最大的动作被选择的概率为ε/|A|+1−ε,其他动作被选择的概率为ε/|A|,|A|是动作空间的大小。

Sarsa算法的采样和改进都采用了ε-贪心策略,是同策略的算法。

Qlearning算法对动作的采样采用的是ε-贪心策略,而对动作值函数Q(s,a)的更新采用的是贪心策略,因此,它是异策略的算法:

算法流程图如下

算法在冰湖问题中求解结果如下

要注意的是,时序差分法也存在方差大,不稳定的问题,每次实验的得分可能会相差较大

部分代码如下

# 基于贪心策略,根据当前状态s的所有动作值函数,采样输出动作值
def greedy_sample(Q_s):
    # Q_s:状态s的所有动作值函数,一维数组
    max_Q = np.max( Q_s )
    action_list = np.where( max_Q == Q_s )[0]  # 最大动作值函数可能有多个action对应
    a = np.random.choice( action_list )      
    return a
# 基于e-gredy贪心策略,根据当前状态s的所有动作值函数,采样输出动作值
def epsilon_greedy_sample(Q_s, n_actions, epsilon):
    # Q_s:状态s的所有动作值函数,一维数组
    # <时表示利用,否则为探索
    if np.random.uniform(0,1) <= 1-epsilon:
        a = greedy_sample(Q_s)
    else:
        a = np.random.choice(n_actions)
    return a
# 时序差分算法
def TD(env, gamma=1.0, alpha=0.01, epsilon=0.1, n_episodes=10000, algorithm="Qlearning"):
    Q = np.zeros([env.observation_space.n, env.action_space.n]) # 用数组来存储动作值函数
    n_actions = env.action_space.n
    for i in range(n_episodes): 
        # 开始一次尝试
        sum_rewards = 0
        steps = 0
        s = env.reset() # 获取初始s
        a = epsilon_greedy_sample(Q[s], n_actions, epsilon)
        # 逐步推进
        while(True):
            next_s, r, done, _ = env.step(a) # 执行动作a
            # e-gredy贪心策略得到下一动作a'
            next_a = epsilon_greedy_sample( Q[next_s], n_actions, epsilon )
            # 更新动作值函数
            if(done):
                Q[s, a] = Q[s, a] + alpha * ( r - Q[s, a] )
            else:
                if algorithm == "Qlearning":
                    Q[s, a] = Q[s, a] + alpha * ( r + gamma * np.max(Q[next_s]) - Q[s, a] )
                else:
                    Q[s, a] = Q[s, a] + alpha * ( r + gamma*Q[next_s, next_a] - Q[s, a] )
            # 更新当前s,a
            s = next_s
            a = next_a
            sum_rewards += r * gamma**steps
            steps += 1
            if(done):
                break
        #print('尝试次:%s: 共运行步数:%s, 本次累积折扣回报:%.1f' % (i+1, steps, sum_rewards))
    pi = []
    for s in range(env.observation_space.n):
        a = greedy_sample( Q[s] )
        pi.append(a)
    return pi

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
3月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
4月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
234 26
|
4月前
|
机器学习/深度学习 算法 调度
基于多动作深度强化学习的柔性车间调度研究(Python代码实现)
基于多动作深度强化学习的柔性车间调度研究(Python代码实现)
262 1
|
3月前
|
算法 数据可视化 测试技术
HNSW算法实战:用分层图索引替换k-NN暴力搜索
HNSW是一种高效向量检索算法,通过分层图结构实现近似最近邻的对数时间搜索,显著降低查询延迟。相比暴力搜索,它在保持高召回率的同时,将性能提升数十倍,广泛应用于大规模RAG系统。
353 10
HNSW算法实战:用分层图索引替换k-NN暴力搜索
|
4月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
578 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
3月前
|
机器学习/深度学习 缓存 算法
微店关键词搜索接口核心突破:动态权重算法与语义引擎的实战落地
本文详解微店搜索接口从基础匹配到智能推荐的技术进阶路径,涵盖动态权重、语义理解与行为闭环三大创新,助力商家提升搜索转化率、商品曝光与用户留存,实现技术驱动的业绩增长。
|
3月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
4月前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
粒子群算法模型深度解析与实战应用
|
4月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
4月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
284 0

热门文章

最新文章

推荐镜像

更多