郭震 AI公众号:郭震AI

9 动态规划之策略迭代算法

发布日期:

最近更新:

分类: 强化学习

预计阅读: 3 分钟

阅读次数: 0

预计阅读3 分钟
结构重点7 个
图文要点6 张
正文规模1.3k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

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

阅读路线

先按这条路线读

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

图文要点

先看本文图文节点

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

动态规划之策略迭代算法结构图查看大图
动态规划之策略迭代算法结构图

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

动态规划之策略迭代算法核对图查看大图
动态规划之策略迭代算法核对图

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

在本篇中,我们将深入探讨强化学习中的策略迭代算法,这是动态规划的一种重要方法。在上一篇中,我们介绍了值迭代算法,并了解了如何通过计算状态值来优化策略。而在这一篇中,我们将重点关注如何通过“策略迭代”来直接改善策略。

策略与价值

在强化学习中,策略(Policy)是智能体在每个状态下所采取的行动的概率分布。策略可以是“确定性”的,即在某一状态下采取唯一的行动,也可以是“随机”的,即在某一状态下以一定概率随机选择行动。在策略迭代中,我们将交替进行策略评估和策略改进。

  1. 策略评估:给定一个策略,计算其在当前策略下每个状态的值。
  2. 策略改进:在评估基础上,通过选择最优的动作来改进该策略。

算法步骤

策略迭代算法的基本步骤如下:

  1. 初始化策略:随机选择一个初始策略。
  2. 策略评估:计算当前策略下每个状态的价值函数Vπ(s)V^\pi(s),直到收敛。
  3. 策略改进:通过选择使得价值函数最大的行动来改进策略,即 πnew(s)=argmaxaQ(s,a)\pi_{\text{new}}(s) = \arg\max_a Q(s, a) 其中 Q(s,a)Q(s, a) 为动作价值函数。
  4. 重复步骤 2 和 3,直到策略不再改变。

案例:格子世界

假设我们有一个简单的格子世界,智能体在一个 4×44 \times 4 的方格中行动。智能体的目标是从起始点(左上角)到达终点(右下角),在过程中获得奖励。我们设定在每个动作上都有一个ss的奖励和一个小的惩罚。

环境设定

  • 状态 SS: 四个位置的格子(共16个状态)
  • 动作 AA: 上、下、左、右(4个动作)
  • 奖励: 到达终点的奖励 +1,其它状态-0.01
策略迭代算法判断卡查看大图
策略迭代算法判断卡

学习策略迭代时,先看策略评估、策略改进、收敛条件和与值迭代的区别。

算法实现

下面是策略迭代算法的简单代码实现:

import numpy as np

# 状态和动作定义
grid_size = 4
n_states = grid_size * grid_size
n_actions = 4  # 上、下、左、右

# 奖励设定
rewards = np.full((grid_size, grid_size), -0.01)
rewards[3, 3] = 1  # 终点奖励

# 初始化策略和价值函数
policy = np.zeros((grid_size, grid_size), dtype=int)  # 随机初始化策略
V = np.zeros((grid_size, grid_size))  # 状态值初始化

def get_next_state(state, action):
    row, col = divmod(state, grid_size)
    if action == 0:  # 上
        row = max(0, row - 1)
    elif action == 1:  # 下
        row = min(grid_size - 1, row + 1)
    elif action == 2:  # 左
        col = max(0, col - 1)
    elif action == 3:  # 右
        col = min(grid_size - 1, col + 1)
    return row * grid_size + col

# 策略评估
def policy_evaluation(policy):
    while True:
        delta = 0
        for state in range(n_states):
            v = V[state // grid_size, state % grid_size]
            action = policy[state // grid_size, state % grid_size]
            V[state // grid_size, state % grid_size] = rewards[state // grid_size, state % grid_size] + \
                V[get_next_state(state, action) // grid_size, get_next_state(state, action) % grid_size]
            delta = max(delta, abs(v - V[state // grid_size, state % grid_size]))
        if delta < 1e-4:  # 收敛条件
            break

# 策略改进
def policy_improvement():
    policy_stable = True
    for state in range(n_states):
        old_action = policy[state // grid_size, state % grid_size]
        action_values = np.zeros(n_actions)
        for action in range(n_actions):
            next_state = get_next_state(state, action)
            action_values[action] = rewards[state // grid_size, state % grid_size] + \
                V[next_state // grid_size, next_state % grid_size]
        policy[state // grid_size, state % grid_size] = np.argmax(action_values)
        if old_action != policy[state // grid_size, state % grid_size]:
            policy_stable = False
    return policy_stable

# 主循环
while True:
    policy_evaluation(policy)
    if policy_improvement():
        break

print("最终策略:")
print(policy)
print("状态值:")
print(V)

结果分析

运行上述代码后,我们可以得到智能体的最终策略和对应的状态值。智能体将会通过策略迭代找到从起始点到达终点的最佳路径。

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

学《动态规划之策略迭代算法》时,可以先找一个自己能复现的小场景,再看相关概念和练习步骤,读完后用自己的例子复述一遍。

动态规划之策略迭代算法应用复盘卡查看大图
动态规划之策略迭代算法应用复盘卡

复习《动态规划之策略迭代算法》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

动态规划之策略迭代算法应用检查卡查看大图
动态规划之策略迭代算法应用检查卡

练习《动态规划之策略迭代算法》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

总结

策略迭代算法通过交替进行策略评估和策略改进,可以有效地找到最优策略。相较于值迭代,策略迭代在许多情况下收敛更快,因为它在每一步都在不断优化 “所有状态”的策略。

在接下来的章节中,我们将继续探讨蒙特卡罗方法的基本原理,进一步丰富我们的强化学习知识体系。通过不同方法的对比与结合,帮助我们更深入地理解强化学习的核心思想。

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

动态规划之策略迭代算法适合谁读?

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

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

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

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

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

分享文章

转发到常用平台

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

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

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

最多 800 字

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

0/800

留言列表

0
正在加载留言...