强化学习【Truncated Policy Iteration Algorithm】

          截断策略迭代算法(Truncated Policy Iteration Algorithm)是强化学习中一种结合策略迭代(Policy Iteration)和值迭代(Value Iteration)思想的优化算法,通过截断策略评估步骤在计算效率与收敛性之间取得平衡。

     

目录:

  1.     value iteration& policy iteration
  2.     Truncated Policy Iteration算法原理
  3.    Truncated Policy Iteration 优缺点分析
  4.     三种算法比较 Python 例子


一 value iteration& policy iteration 

    1.1 Policy iteration

      给定一个初始的policy \pi_{0}

     step1: PE( Policy evaluation) :

       固定策略,进行max_iterations次迭代 验证对应策略下面的state  value 

     step2:  PI(Policy improvement)

      

  1.2 Value iteration:

        这是一种迭代算法解Bellman公式

        给定一个初始的状态值 v_0

值迭代过程中
每次更新 Vk+1​(s) 时,

step1: PU(Policy update)

      实际代码实现中这一步是并没有,策略在每次价值函数更新时已被间接确定,无需显式存储或输出。

         

step2:  Value update

     代码是通过后面q(s,a)得到的

                  


二  Truncated Policy Iteration 算法

策略迭代包含两个交替步骤:

  1. 策略评估(Policy Evaluation):计算当前策略下的状态价值函数 Vπ(s),通常需多次迭代直至收敛。
  2. 策略改进(Policy Improvement):基于当前价值函数,通过贪心策略更新策略 π(s)=argmaxa​Qπ(s,a)。

截断策略迭代的核心思想:在策略评估阶段不进行完整迭代,而是仅执行有限次(如 k 次)更新后即进入策略改进。这减少了计算量,同时保留了收敛性保证。

 


三   Truncated Policy Iteration 优缺点分析

优点 缺点
计算效率高:通过截断策略评估减少单次迭代时间,尤其适用于大规模状态空间。 收敛速度可能较慢:截断可能导致价值函数估计不精确,需更多迭代达到收敛。
灵活性:可通过调整 k 平衡计算量与精度,适应不同场景需求。 参数选择敏感:k 的选择需权衡效率与精度,缺乏通用最优值。
理论保证:在有限马尔可夫决策过程(MDP)中,仍能收敛到最优策略。 实现复杂度略高:需显式管理截断次数和终止条件。

四 三种算法比较python 例子(西瓜书)

6.1 值迭代 (ValueIterationSolver) ✅

  • 每次迭代对所有状态进行价值更新:new_values[state] = max(q_values)

  • 使用贝尔曼最优方程进行更新

  • 最后提取最优策略:self.policy = self.extract_policy()

  • 收敛条件:价值函数变化小于阈值theta

6.2  策略迭代 (PolicyIterationSolver) ✅

  • 策略评估阶段:在固定策略下评估价值函数 self.evaluate_policy()

  • 策略改进阶段:提取贪婪策略 self.extract_policy()

  • 收敛条件:策略不再变化

截断策略迭代 (TruncatedPolicyIterationSolver) ✅

  • 策略评估阶段只进行有限次迭代 (truncation_limit)

  • 其他逻辑与完整策略迭代相同

以下面为例

 

# -*- coding: utf-8 -*-
"""
MDP求解器增强版:包含值迭代、策略迭代和截断策略迭代
比较三种算法的收敛性能

Created on Fri Sep 12 15:36:54 2025
@author: chengxf2
"""

import locale
import sys
from dataclasses import dataclass, field
from enum import Enum
from typing import Dict, List, Tuple

import matplotlib as mpl
import matplotlib.font_manager as fm
import matplotlib.pyplot as plt
import numpy as np


class State(Enum):
    """状态枚举"""
    DEHYDRATED = 0  # 缺水
    HEALTHY = 1     # 健康
    WATERLOGGED = 2  # 溢水
    WITHERED = 3    # 凋亡


class Action(Enum):
    """动作枚举"""
    DO_NOT_WATER = 0  # 不浇水
    WATER = 1         # 浇水


class Config:
    """配置常量类"""
    OUTPUT_DIR = "results/"
    GAMMA = 0.9
    THETA = 1e-6
    MAX_ITERATIONS = 300
    TRUNCATION_LIMIT = 3
    FONT_CONFIG = {
        "preferred_fonts": ["DejaVu Sans", "Arial", "Helvetica", "Liberation Sans", "sans-serif"],
        "m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值