郭震 AI公众号:郭震AI

8 强化学习从零学教程系列之动态规划之值迭代算法

发布日期:

最近更新:

分类: 强化学习

预计阅读: 4 分钟

阅读次数: 0

预计阅读4 分钟
结构重点8 个
图文要点6 张
正文规模1.7k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 8 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

强化学习从零学教程系列之动态规划之值迭代算法结构图查看大图
强化学习从零学教程系列之动态规划之值迭代算法结构图

强化学习的核心是智能体在环境中试错,学习时要同时看状态、动作、奖励和策略更新。阅读时可以按「值迭代算法概述 -> 算法步骤 -> 示例:网格世界 -> 问题描述」建立结构,再回到正文里的代码、案例或指标做验证。

强化学习从零学教程系列之动态规划之值迭代算法核对图查看大图
强化学习从零学教程系列之动态规划之值迭代算法核对图

读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「值迭代算法概述」,再查「算法步骤」。

在上一篇教程中,我们探讨了动态规划的基本思想和框架,为我们后续学习强化学习打下了坚实的基础。在本篇中,我们将深入了解动态规划的一种具体实现——值迭代算法。这一算法在解决马尔可夫决策过程(MDP)中的最优策略时,提供了一种有效的计算手段。

值迭代算法概述

值迭代算法是一种在给定状态空间和动作空间的条件下,通过递归地更新状态价值,从而逐步收敛到最优值函数的动态规划方法。值迭代不仅可以用于求解最优价值函数,还能获取最优策略。

值迭代算法判断卡查看大图
值迭代算法判断卡

学习值迭代时,先看 Bellman 更新、折扣因子、收敛条件和策略提取。

算法步骤

值迭代算法的主要步骤如下:

  1. 初始化:为所有状态初始化一个任意的价值函数,通常是将所有状态的价值设为0。
  2. 更新价值函数:根据贝尔曼方程更新每个状态的价值函数: Vi+1(s)=maxaAsSP(ss,a)[R(s,a,s)+γVi(s)]V_{i+1}(s) = \max_{a \in A} \sum_{s' \in S} P(s'|s, a)[R(s, a, s') + \gamma V_i(s')] 其中,Vi(s)V_i(s) 是状态ss 在第ii次更新时的价值,P(ss,a)P(s'|s, a) 是在状态ss下采取动作aa后转移到状态ss'的概率,R(s,a,s)R(s, a, s') 是在此转移中获得的奖励,γ\gamma 是折扣因子。
  3. 收敛判断:不断迭代更新价值函数,直到价值函数的变化小于定义好的阈值(如0.01)。
  4. 获取策略:依据最终的价值函数,推导出最优策略: π(s)=argmaxaAsSP(ss,a)[R(s,a,s)+γV(s)]\pi^*(s) = \arg \max_{a \in A} \sum_{s' \in S} P(s'|s, a)[R(s, a, s') + \gamma V(s')]

示例:网格世界

为更好地理解值迭代算法,我们通过一个简化的示例——网格世界来说明。

强化学习阅读地图卡查看大图
强化学习阅读地图卡

《强化学习从零学教程系列之动态规划之值迭代算法》这类内容容易被细节带偏。先看图里的主线,再回到正文核对环境、输入、输出和判断标准。

问题描述

假设我们有一个4×44 \times 4的网格世界,智能体在每个状态(网格单元)中可以选择向上、向下、向左或向右移动。目标是使智能体尽快到达目标状态(右下角),并且每次移动都要消耗11的奖励。目标状态的奖励为00,其他状态的奖励均为1-1

设置参数

  • 状态空间SS:包含所有的1616个网格。
  • 动作空间AA:包含updownleftright
  • 折扣因子γ\gamma:取0.90.9

值迭代实现

import numpy as np

# 定义环境参数
grid_size = 4
num_actions = 4
gamma = 0.9
theta = 0.01

# 定义奖励结构
R = -np.ones((grid_size, grid_size))
R[3, 3] = 0  # 目标状态的奖励

# 定义状态转移概率(简单处理,假设概率为1)
def get_next_states(s, a):
    x, y = s
    if a == 0: # up
        return max(x-1, 0), y
    elif a == 1: # down
        return min(x+1, grid_size-1), y
    elif a == 2: # left
        return x, max(y-1, 0)
    elif a == 3: # right
        return x, min(y+1, grid_size-1)

# 值迭代函数
def value_iteration():
    V = np.zeros((grid_size, grid_size))
    while True:
        delta = 0
        for x in range(grid_size):
            for y in range(grid_size):
                v = V[x, y]
                V[x, y] = max(sum(1 * (R[get_next_states((x, y), a)] + gamma * V[get_next_states((x, y), a)]))
                               for a in range(num_actions))
                delta = max(delta, abs(v - V[x, y]))
        if delta < theta:
            break
    return V

# 运行值迭代
V = value_iteration()
print(V)

在以上代码中,我们通过一个简单的数组V来维持各状态的价值。每次我们都会更新状态价值,直到所有状态的价值收敛。最终返回的V就是每个状态对应的最优价值。

策略提取

一旦获取到最终的价值函数,我们可以根据上述策略公式,从每个状态推导出最优策略。

def extract_policy(V):
    policy = np.zeros((grid_size, grid_size), dtype=int)
    for x in range(grid_size):
        for y in range(grid_size):
            best_action = None
            best_value = float('-inf')
            for a in range(num_actions):
                next_state = get_next_states((x, y), a)
                value = R[next_state] + gamma * V[next_state]
                if value > best_value:
                    best_value = value
                    best_action = a
            policy[x, y] = best_action
    return policy

# 提取最优策略
policy = extract_policy(V)
print(policy)

在策略提取的过程中,我们遍历每个状态,选择能够带来最大价值的动作,并形成最终的policy。每个动作可以用数字表示,比如0代表up1代表down2代表left3代表right

强化学习从零学教程系列之动态规划之值迭代算法应用复盘卡查看大图
强化学习从零学教程系列之动态规划之值迭代算法应用复盘卡

读到这里,可以把《强化学习从零学教程系列之动态规划之值迭代算法》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。

强化学习从零学教程系列之动态规划之值迭代算法应用检查卡查看大图
强化学习从零学教程系列之动态规划之值迭代算法应用检查卡

读完《强化学习从零学教程系列之动态规划之值迭代算法》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。

总结

本文详细介绍了值迭代算法的工作机制,并通过实践案例展示了如何在一个简单的网格世界中实现它。值迭代是动态规划的重要组成部分,广泛应用于强化学习中。掌握了这一算法后,我们将在下一篇教程中进一步探讨动态规划的另一个经典算法——策略迭代算法。希望大家能在实践中不断探索并深化对强化学习的理解!

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

强化学习从零学教程系列之动态规划之值迭代算法适合谁读?

这是 强化学习入门 系列第 8 / 28 篇,适合正在学习强化学习入门,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇强化学习入门教程要多久?

按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...