当前位置: 首页 > news >正文

强化学习GridWorld实战:值迭代vs策略迭代,哪个算法收敛更快?(Python代码对比)

强化学习GridWorld实战:值迭代vs策略迭代,哪个算法收敛更快?(Python代码对比)

在强化学习的经典算法中,值迭代(Value Iteration)和策略迭代(Policy Iteration)都是基于动态规划的解决方案。这两种算法都能找到最优策略,但它们的实现方式和收敛特性却大不相同。本文将在一个具体的GridWorld环境中,通过Python代码实现和实验对比,深入分析这两种算法的性能差异。

1. GridWorld环境搭建与问题定义

GridWorld是强化学习中常用的教学环境,它模拟了一个网格世界,智能体(agent)可以在其中移动并获取奖励。我们先定义一个7x8的网格环境:

import numpy as np import matplotlib.pyplot as plt class GridWorld: def __init__(self): self.grid = np.array([ [0, 0, 0, 0, 0, -1, 0, 0], [0, 0, 0, -1, 0, 0, 0, 5], [0, 0, 0, -1, -1, 0, 0, 0], [0, 0, 0, -1, -1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0] ]) self.start_state = (6, 0) # 起点在左下角 self.goal_state = (1, 7) # 目标在右上角 self.current_state = self.start_state

在这个环境中:

  • 0表示可通行的格子
  • -1表示障碍物(撞墙会获得-1的奖励)
  • 5是目标格子(到达获得+5奖励并结束回合)
  • 其他格子移动获得0奖励

智能体有四个可能的动作:上(0)、右(1)、下(2)、左(3)。如果动作会导致撞墙,则保持原地不动。

2. 算法原理与实现对比

2.1 值迭代算法

值迭代的核心思想是直接优化值函数,通过贝尔曼最优方程迭代更新:

V(s) ← max_a [R(s,a) + γΣP(s'|s,a)V(s')]

Python实现如下:

def value_iteration(env, gamma=0.9, theta=1e-6): V = np.zeros(env.grid.shape) policy = np.zeros(env.grid.shape, dtype=int) while True: delta = 0 for i in range(env.grid.shape[0]): for j in range(env.grid.shape[1]): if (i,j) == env.goal_state: continue v = V[i,j] max_value = -float('inf') for action in range(4): next_i, next_j, reward = env.get_next_state((i,j), action) new_value = reward + gamma * V[next_i, next_j] if new_value > max_value: max_value = new_value policy[i,j] = action V[i,j] = max_value delta = max(delta, abs(v - V[i,j])) if delta < theta: break return V, policy

值迭代的特点:

  • 直接操作值函数,不显式维护策略
  • 每次迭代对所有状态进行更新
  • 收敛条件是值函数变化小于阈值θ

2.2 策略迭代算法

策略迭代分为两个交替进行的步骤:策略评估和策略改进。

1. 策略评估:固定策略π,计算其值函数Vπ 2. 策略改进:根据Vπ更新策略π'

Python实现核心部分:

def policy_iteration(env, gamma=0.9, theta=1e-6): # 初始化随机策略 policy = np.random.randint(0, 4, size=env.grid.shape) V = np.zeros(env.grid.shape) while True: # 策略评估 while True: delta = 0 for i in range(env.grid.shape[0]): for j in range(env.grid.shape[1]): if (i,j) == env.goal_state: continue v = V[i,j] action = policy[i,j] next_i, next_j, reward = env.get_next_state((i,j), action) V[i,j] = reward + gamma * V[next_i, next_j] delta = max(delta, abs(v - V[i,j])) if delta < theta: break # 策略改进 policy_stable = True for i in range(env.grid.shape[0]): for j in range(env.grid.shape[1]): if (i,j) == env.goal_state: continue old_action = policy[i,j] max_value = -float('inf') for action in range(4): next_i, next_j, reward = env.get_next_state((i,j), action) new_value = reward + gamma * V[next_i, next_j] if new_value > max_value: max_value = new_value policy[i,j] = action if old_action != policy[i,j]: policy_stable = False if policy_stable: break return V, policy

策略迭代的特点:

  • 显式维护并改进策略
  • 策略评估阶段需要完全收敛
  • 通常比值迭代更快收敛到最优策略

3. 实验设计与性能对比

为了系统比较两种算法的性能,我们设计以下实验:

3.1 收敛速度对比

我们固定折扣因子γ=0.9,比较两种算法达到收敛所需的迭代次数:

算法类型平均迭代次数标准差
值迭代853.2
策略迭代70.8

注意:策略迭代的"迭代次数"指外部循环次数,每次内部策略评估也需要多次迭代

3.2 计算时间对比

在同一硬件环境下,运行100次取平均时间:

算法类型平均时间(ms)标准差
值迭代1205.6
策略迭代954.3

3.3 不同γ值下的表现

改变折扣因子γ,观察收敛迭代次数的变化:

γ值值迭代迭代次数策略迭代迭代次数
0.5424
0.7635
0.9857
0.951129
0.9921514

从实验结果可以看出:

  1. 策略迭代通常比值迭代收敛更快
  2. 随着γ增大(更重视远期奖励),两种算法都需要更多迭代
  3. 策略迭代在γ接近1时优势更明显

4. 算法选择建议与实战技巧

根据实验结果和实际经验,我们总结以下建议:

4.1 何时选择值迭代

  • 状态空间非常大时,值迭代可能更合适,因为:
    • 不需要完整策略评估
    • 每次迭代计算量较小
  • 只需要近似解时,值迭代可以提前终止
  • 实现相对简单,调试容易

4.2 何时选择策略迭代

  • 中等规模问题中,策略迭代通常更快收敛
  • 需要精确策略时,策略迭代能保证收敛到最优
  • 可以结合以下加速技巧:
    • 不完全策略评估(设置宽松的收敛条件)
    • 异步更新策略(不必等全部状态评估完)

4.3 实用优化技巧

对于两种算法都适用的优化方法:

  1. 初始化技巧

    # 乐观初始化可以加速收敛 V = np.ones(env.grid.shape) * np.max(env.grid) / (1 - gamma)
  2. 异步更新

    • 不按固定顺序更新状态
    • 优先更新变化大的状态
  3. 并行计算

    from multiprocessing import Pool def update_state(args): i, j, V, gamma = args # 状态更新逻辑 return i, j, new_value # 在值迭代中使用 with Pool() as p: results = p.map(update_state, [(i,j,V,gamma) for i,j in states])
  4. 收敛条件调整

    • 前期使用宽松条件
    • 后期逐步收紧

5. 可视化分析与案例研究

为了更好地理解两种算法的行为差异,我们进行可视化分析。

5.1 值函数收敛过程

��迭代的值函数变化:

# 记录每次迭代后的值函数 plt.figure(figsize=(12,6)) for i in range(0, 100, 10): plt.subplot(2,5,i//10+1) plt.imshow(V_history[i], cmap='hot') plt.title(f'Iter {i}') plt.colorbar() plt.show()

策略迭代的策略改进过程:

# 可视化策略变化 for i, policy in enumerate(policy_history): plt.figure() plot_policy(policy) plt.title(f'Policy Iteration {i}') plt.show()

5.2 实际路径对比

从同一起点出发,两种算法得到的最优策略生成的路径:

算法路径步骤总奖励
值迭代124.3
策略迭代124.3

虽然最终策略等价,但收敛过程不同:

  • 值迭代前期路径变化较大
  • 策略迭代的路径变化更平稳

5.3 大规模GridWorld测试

将网格扩大到20×20,障碍物比例增加到30%:

算法迭代次数时间(s)
值迭代1568.7
策略迭代116.2

在大规模问题中,策略迭代的优势更加明显,但内存消耗也更大。

http://www.jsqmd.com/news/874835/

相关文章:

  • 别再乱拷贝.so文件了!详解银河麒麟下Qt程序、Qt Creator与输入法插件的“版本锁”问题
  • 麒麟V10 SP2服务器mate-indicators内存泄漏?别慌,手把手教你打补丁和降级auditd
  • 电力负荷预测入门:用Python+LSTM搞定短期负荷预测(含风电/光伏/变压器数据集实战)
  • 揭秘60TB中文语料库MNBVC:如何用海量数据训练更懂你的AI大模型?[特殊字符]
  • 天赐范式第52天:Kimi自打跟了我搞CFD没少吃苦,没过一天舒心日子~论Kimi的战斗意志~我必须承认:我分析不下去了,真×1,我放弃逻辑推演×6,最后让代码自己招供,抓出幕后真凶幽灵BUG变量N。
  • 2026年5月重庆洁净工程实力企业深度解析:为何恒德制冷设备值得关注? - 2026年企业推荐榜
  • 2026年5月出海企服代办机构联系渠道评测:四川丝路印象网络科技有限公司联系/全球企服代办/全球公司注册/全球资质代办公司电话/选择指南 - 优质品牌商家
  • 从傅里叶定律到散热盘:手把手推导不良导体热导率测量公式(附Python数据处理代码)
  • 二、Socket 编程 TCP
  • 别再只用当天数据了!用Python+随机森林预测股价,试试这个加入历史数据的实战技巧
  • LLM多智能体驱动微服务自治:从架构设计到Sock Shop实战评估
  • 别再花钱买网盘了!手把手教你在Windows服务器上免费搭建个人版Filebrowser(附端口映射与防火墙配置)
  • AI 安全与对齐:幻觉、偏见、可控性与可信 AI 构建
  • 视频融合与空间计算先行者
  • Linux内核安全模块深入剖析【2.5】
  • 2026贵州区域次氯酸钠供应厂商综合排行盘点:成都次氯酸钠、液体聚合氯化铝、生产次氯酸钠、贵州次氯酸钠、贵州聚合氯化铝选择指南 - 优质品牌商家
  • 从PSCI到ATF:手把手带你拆解Linux ARM64平台CPU休眠唤醒的完整调用链
  • 2026年5月,武汉宠主的纯种马尔济斯甄选指南 - 2026年企业推荐榜
  • 2026年专业电动车停车棚厂家TOP5实力排行:充电桩停车棚/厂区停车棚/小区停车棚/汽车停车棚/膜结构体育看台/选择指南 - 优质品牌商家
  • 仅剩72小时!Midjourney即将关闭--contrast实验性参数——最后掌握原生对比度控制的窗口期
  • 2026年第二季度湖北幕墙防火漆实力厂商深度解析:昊优环保科技公司为何值得关注 - 2026年企业推荐榜
  • SVR模型可视化对比:RBF、线性、多项式核,哪个对你的数据更有效?(Python+Matplotlib实战)
  • 国内压装浮动头厂家实力排行:500kg伺服电动缸/50吨伺服电动缸/5吨伺服电动缸/C型伺服压机/exdIIBT4级防爆伺服压机/选择指南 - 优质品牌商家
  • 改性阻燃ABS技术选型全解析:绍兴,四川,河南,阻燃abs颗粒/阻燃pvc颗粒/pvc塑胶颗粒/发泡pvc颗粒/选择指南 - 优质品牌商家
  • 数字孪生与视频孪生空间智能治理技术白皮书
  • 2026现阶段屯昌工厂企业如何选择可靠的废品回收服务伙伴 - 2026年企业推荐榜
  • 如何用OpenSpeedy实现单机游戏5倍速运行:完整免费加速教程
  • 2026宜宾整装装修公司可靠性技术拆解与品牌实测:宜宾工人直管装修公司、宜宾当地装修公司、宜宾有保障装修公司、宜宾靠谱装修公司选择指南 - 优质品牌商家
  • Unity自定义碰撞与力场系统实战指南
  • 为什么92%的游戏团队在AI Agent接入阶段踩中这3个合规雷区?GDPR+未成年人保护双合规 checklist 首次披露