【强化学习教程——01_强化学习基石】第03章_动态规划与策略迭代

第 3 章:动态规划与策略迭代

本章目标:学习使用动态规划 (DP) 算法在已知环境模型的情况下求解最优策略,掌握策略迭代 (Policy Iteration) 与价值迭代 (Value Iteration) 的核心逻辑。


📖 目录 (Table of Contents)

  1. 动态规划的前提
  2. 策略评估 (Policy Evaluation)
  3. 策略改进 (Policy Improvement)
  4. 策略迭代 (Policy Iteration)
  5. 价值迭代 (Value Iteration)
  6. 广义策略迭代 (GPI)
  7. 总结与预告

1. 动态规划的前提

动态规划 (DP) 需要完整的环境模型

  • 状态转移概率 P ( s ′ ∣ s , a ) P(s'|s,a) P(s′∣s,a) 已知
  • 奖励函数 R ( s , a , s ′ ) R(s,a,s') R(s,a,s′) 已知

这意味着我们不需要去"探索"环境,而是可以直接计算最优解(Planning)。


2. 策略评估 (Policy Evaluation)

目标 :给定策略 π \pi π,计算其状态价值函数 V π V^\pi Vπ。

V k + 1 ( s ) = ∑ a π ( a ∣ s ) [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V k ( s ′ ) ] V_{k+1}(s) = \sum_a \pi(a|s) \left[ R(s,a) + \gamma \sum_{s'} P(s'|s,a) V_k(s') \right] Vk+1(s)=a∑π(a∣s)[R(s,a)+γs′∑P(s′∣s,a)Vk(s′)]

代码实现 (Policy Evaluation)

python 复制代码
def policy_evaluation(env, policy, gamma=0.99, theta=1e-6):
    """策略评估:迭代计算 V^π"""
    states = env.get_states()
    V = {s: 0.0 for s in states}

    while True:
        delta = 0
        for s in states:
            v = V[s]
            # 根据策略计算期望
            new_v = 0
            for a in env.get_actions():
                prob = policy.get((s, a), 0)
                if prob > 0:
                    s_next, r, _ = env.step(s, a)
                    new_v += prob * (r + gamma * V.get(s_next, 0))
            V[s] = new_v
            delta = max(delta, abs(v - V[s]))

        if delta < theta:
            break

    return V

3. 策略改进 (Policy Improvement)

目标 :基于当前的 V π V^\pi Vπ,修改策略以获得更大的长期回报。

贪婪策略 (Greedy Policy)
π ′ ( s ) = arg ⁡ max ⁡ a [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V π ( s ′ ) ] \pi'(s) = \arg\max_a \left[ R(s,a) + \gamma \sum_{s'} P(s'|s,a) V^\pi(s') \right] π′(s)=argamax[R(s,a)+γs′∑P(s′∣s,a)Vπ(s′)]

代码实现 (Policy Improvement)

python 复制代码
def policy_improvement(env, V, gamma=0.99):
    """策略改进:基于 V 提取贪婪策略"""
    policy = {}

    for s in env.get_states():
        action_values = {}
        for a in env.get_actions():
            s_next, r, _ = env.step(s, a)
            action_values[a] = r + gamma * V.get(s_next, 0)

        best_action = max(action_values, key=action_values.get)
        policy[s] = best_action

    return policy

4. 策略迭代 (Policy Iteration)

图解说明

  • 蓝色循环:策略评估 (Evaluation) - 计算当前策略的价值 V。
  • 红色循环:策略改进 (Improvement) - 根据价值 V 改进策略 π。
  • 收敛 :两者交替进行,直到策略不再改变,此时达到最优策略 π ∗ \pi^* π∗。

代码实现 (Policy Iteration)

python 复制代码
import numpy as np

def policy_iteration(env, gamma=0.99):
    """策略迭代:交替评估和改进"""
    # 初始化随机策略
    states = env.get_states()
    actions = env.get_actions()
    policy = {s: np.random.choice(actions) for s in states}

    while True:
        # 1. 策略评估
        V = policy_evaluation(env, policy, gamma)

        # 2. 策略改进
        new_policy = policy_improvement(env, V, gamma)

        # 检查收敛
        if new_policy == policy:
            break
        policy = new_policy

    return policy, V

5. 价值迭代 (Value Iteration)

思想:不必等待策略评估完全收敛,我们可以每更新一次 V 就贪婪地改进策略,或者直接合并这两个步骤。

V k + 1 ( s ) = max ⁡ a [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V k ( s ′ ) ] V_{k+1}(s) = \max_a \left[ R(s,a) + \gamma \sum_{s'} P(s'|s,a) V_k(s') \right] Vk+1(s)=amax[R(s,a)+γs′∑P(s′∣s,a)Vk(s′)]

代码实现 (Value Iteration)

python 复制代码
def value_iteration(env, gamma=0.99, theta=1e-6):
    """价值迭代:直接计算 V*"""
    states = env.get_states()
    V = {s: 0.0 for s in states}

    while True:
        delta = 0
        for s in states:
            v = V[s]
            # 直接取最大动作价值
            action_values = []
            for a in env.get_actions():
                s_next, r, _ = env.step(s, a)
                action_values.append(r + gamma * V.get(s_next, 0))
            V[s] = max(action_values) if action_values else 0
            delta = max(delta, abs(v - V[s]))

        if delta < theta:
            break

    # 最后提取一次最优策略
    policy = policy_improvement(env, V, gamma)
    return policy, V

6. 广义策略迭代 (GPI)

图解说明

  • 核心思想:策略评估(让价值函数逼近当前策略的真实价值)和策略改进(让策略对于当前价值函数贪婪)是两个竞争又合作的过程。
  • GPI:并不要求每次步骤都完美收敛,只要这两个过程持续进行,最终就会收敛到最优解。

7. 总结与预告

本章核心

  • 动态规划 是一种基于模型的规划方法 (Planning)。
  • 策略迭代 分离了评估和改进,比较稳健。
  • 价值迭代 融合了两者,通常收敛更快。

下一章预告

如果我们不知道环境模型(不知道 P 和 R 怎么办)?我们将进入 Model-Free 的世界,学习蒙特卡洛方法。

➡️ 下一章:第 4 章:蒙特卡洛方法

相关推荐
CoovallyAIHub1 天前
语音AI Agent编排框架!Pipecat斩获10K+ Star,60+集成开箱即用,亚秒级对话延迟接近真人反应速度!
深度学习·算法·计算机视觉
木心月转码ing1 天前
Hot100-Day14-T33搜索旋转排序数组
算法
会员源码网1 天前
内存泄漏(如未关闭流、缓存无限增长)
算法
颜酱1 天前
从0到1实现LFU缓存:思路拆解+代码落地
javascript·后端·算法
颜酱1 天前
从0到1实现LRU缓存:思路拆解+代码落地
javascript·后端·算法
CoovallyAIHub2 天前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub2 天前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github