4 动态编程(Dynamic Programming, DP)

本文深入探讨动态编程(DP)在增强学习中的应用,特别是在解决马尔可夫决策过程(MDP)中的策略评估、策略改进、策略迭代、值迭代等方法。DP通过递归分解问题和利用子问题的解,有效处理优化问题。虽然在实际增强学习中由于计算复杂度不常用,但其理论基础十分重要。

【上一篇 3 有限马尔可夫决策过程(Finite Markov Decision Processes)
【下一篇 5 蒙特卡洛方法 (Monte Carlo Method)

之前介绍的知识都是基础,从这次开始才真正开始介绍增强学习的解法方法。

动态编程(Dynamic Programming, DP)这个词大家肯定都不陌生,在解决算法编程问题当中经常会用到,它的主要思想就是将一个复杂的问题分解成多个子问题,将子问题的解结合在一起就构成了原问题的解,它常常适合于解决具有如下两种属性的问题:
(1)优化的子结构:优化解常常可以分解成子问题;
(2)子问题有重叠:即子问题总是重复出现,该子问题的解可以保存下来重复利用。
  
而马尔可夫决策过程就完美的符合这两点特性:
(1)需要求解的 Bellman 方程提供了递归的分解形式;
(2)Value function 需要存储和重用之前的解。

因此可以说 DP 可以用于求解马尔可夫模型的优化策略,但是由于 DP 问题需要环境的动态模型,并且计算复杂度较高,因此在增强学习中的应用并不广泛,但是它的思想在理论上还是非常重要的,是以后学习的一个理论基础。DP 算法的主要思想就是利用 value function 来寻找好的策略。
  
这里先介绍一下后文中的符号表示(与之前的相同):

假设状态集合、行为集合和 reward 集合分别为 S \mathcal{S} S A ( s ) \mathcal{A}(s) A(s) R \mathcal{R} R,动态性用概率 p ( s ′ , r ∣ s , a ) p(s',r|s,a) p(s,rs,a) 来表示,其中 s ∈ S s\in\mathcal{S} sS a ∈ A ( s ) a\in\mathcal{A}(s) aA(s) r ∈ R r\in\mathcal{R} rR s ′ ∈ S + s'\in\mathcal{S}^+ sS+(若问题为 episodic,则 S + \mathcal{S}^+ S+ 指的是 S \mathcal{S} S 加上终止状态)。

之前介绍过,若找到了满足 Bellman 优化方程的优化值函数 v ∗ v_* v 或者 q ∗ q_* q,就可以容易的获得优化的策略, v ∗ v_* v q ∗ q_* q 的表达式如下所示:
v ∗ ( s ) = max ⁡ a E [ R t + 1 + γ v ∗ ( S t + 1 ) ∣ S t = s , A t = a ] = max ⁡ a ∑ s ’ , r p ( s ′ , r ∣ s , a ) [ r + γ v ∗ ( s ′ ) ] \begin{aligned} v_{\ast}(s) &= \max_a{\Bbb E}[R_{t+1}+\gamma v_{\ast}(S_{t+1})|S_t=s,A_t=a] \\ &= \max_a\sum_{s’,r}{p(s',r|s,a)[r+\gamma v_{\ast}(s')]} \end{aligned} v(s)=amaxE[Rt+1+γv(St+1)St=s,At=a]=amaxs,rp(s,rs,a)[r+γv(s)]

q ∗ ( s , a ) = E [ R t + 1 + γ max ⁡ a ′ q ∗ ( S t + 1 , a ′ ) ∣ S t = s , A t = a ] = ∑ s ’ , r p ( s ′ , r ∣ s , a ) [ r + γ max ⁡ a ′ q ∗ ( s ′ , a ′ ) ] \begin{aligned} q_{\ast}(s,a) &= {\Bbb E}[R_{t+1}+\gamma \max_{a'}q_{\ast}(S_{t+1},a') |S_t=s, A_t=a] \\ &= \sum_{s’,r}{p(s',r|s,a)[r+\gamma \max_{a'}q_{\ast}(s',a')]} \end{aligned} q(s,a)=E[Rt+1+γamaxq(St+1,a)St=s,At=a]=s,rp(s,rs,a)[r+γamaxq(s,a)]

1 Policy Evaluation

在DP中,Policy Evaluation 指的是对任意规则 π \pi π 计算 state-value 函数 v π v_{\pi} vπ,也可以将这个称作是 预测问题(Prediction Problem)。在上一节的内容中提到 s ∈ S s\in\mathcal{S} sS 都有

v π ( s ) ≐ E π [ R t + 1 + γ R t + 2 + γ 2 R t + 3 + ⋯ ∣ S t = s ] = E π [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ] = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] \begin{aligned} v_{\pi}(s) &\doteq {\Bbb E}_{\pi}[R_{t+1}+\gamma R_{t+2}+\gamma ^2 R_{t+3}+\cdots | S_t=s] \\ &= {\Bbb E}_{\pi}[R_{t+1}+\gamma v_{\pi}(S_{t+1})| S_t=s] \\ &=\sum_a{\pi(a|s)}\sum_{s',r}{p(s',r|s,a)[r+\gamma v_{\pi}(s')]} \end{aligned} vπ(s)Eπ[Rt+1+γRt+2+γ2Rt+3+St=s]=Eπ[Rt+1+γvπ(St+1)St=s]=aπ(as)s,rp(s,rs,a)[r+γvπ(s)]

从最后一个式子中可以看出, v π ( s ) v_{\pi}(s) vπ(s) 的计算还要依赖于 v π ( s ′ ) v_{\pi}(s') vπ(s),对于这种情况,最常用的方法采用迭代的形式,不断地更新和逼近真实值。这里可以考虑一个近似的值函数序列 v 0 , v 1 , v 2 , ⋯ v_0,v_1,v_2,\cdots v0,v1,v2,,其中每个值函数都是从 S + \mathcal{S}^+ S+ R {\Bbb R} R 的映射,其中初始的近似值 v 0 v_0 v0 是任意选择的(终止状态的值为 0),之后的计算都是利用 v π v_{\pi} vπ 的 Bellman 方程来进行更新的:

v k + 1 ( s ) ≐ E π [ R t + 1 + γ v k ( S t + 1 ) ∣ S t = s ] = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v k ( s ′ ) ] \begin{aligned} v_{k+1}(s) &\doteq {\Bbb E}_{\pi}[R_{t+1}+\gamma v_{k}(S_{t+1})| S_t=s] \\ &=\sum_a{\pi(a|s)}\sum_{s',r}{p(s',r|s,a)[r+\gamma v_{k}(s')]} \end{aligned} vk+1(s)Eπ[Rt+1+γvk(St+1)St=s]=aπ(as)s,rp(s,rs,a)[r+γvk(s)]

k → ∞ k \rightarrow \infty k 时,序列 { v k } \{v_k\} {vk} 会收敛于 v π v_{\pi} vπ,这个算法就称为是 Iterative Policy Evaluation。整个过程可以描述为:

v 0 → v 1 → v 2 → ⋯ → v π v_0 \rightarrow v_1 \rightarrow v_2 \rightarrow \cdots \rightarrow v_{\pi} v0v1v2vπ

为了从 v k v_k vk 得到近似的 v k + 1 v_{k+1} vk+1,iterative policy evaluation 需要对每一个状态 s s s 做同样的操作:将 s s s 旧的 value 值换成计算得到的新的 value 值,将这种操作可以称为是 Full Backup,迭代策略评估的每一次迭代过程都需要把每个状态的 value 备份起来。

迭代算法常用的停止准则是检测最大的状态变化量,整个过程的伪代码如下:

2 Policy Improvement

第一节中是计算每个 policy 的 value function,它的目的当然是为了找到更好的 policies,假设我们已经有了某个 π \pi π 的值函数 v π v_{\pi} vπ,那我们肯定想知道是否可以通过对规则 π \pi π 改进来得到更好的规则,改进的方式就是在改变在某个状态时的行为选择概率,即 a = π ( s ) a=\pi(s) a=π(s),我们肯定会想,在状态 s s s 时,我们依据当前的 v π ( s ) v_{\pi}(s) vπ(s) 到底是好还是不好呢?是否可以改进呢?那我们可以采用比较 q π ( s , a ) q_{\pi}(s,a) qπ(s,a) v π ( s ) v_{\pi}(s) vπ(s) 的方法,若 q π ( s , a ) q_{\pi}(s,a) qπ(s,a) v π ( s ) v_{\pi}(s) vπ(s) 大,那么采用 “在状态 s s s 时选择行为 a a a,之后还遵从规则 π \pi π ” 就要比 “无论什么状态下都遵从规则 π \pi π” 要好。
  
通常将这种理论称为是 Policy Improvement Theorem,假设一对任意的规则 π \pi π π ′ \pi' π,若对所有的 s ∈ S s\in\mathcal{S} sS 都有:

q π ( s , π ′ ( s ) ) ≥ v π ( s ) q_{\pi}(s,\pi'(s)) \geq v_{\pi}(s) qπ(s,π(s))vπ(s)

那么规则 π ′ \pi' π 一定比规则 π \pi π 更好或者相当,也就是说,对所有的状态 s ∈ S s\in\mathcal{S} sS 它的期望返回值都要高或者相当:

v π ′ ( s ) ≥ v π ( s ) v_{\pi'}(s) \geq v_{\pi}(s) vπ(s)vπ(s)

回到我们之前的问题,我们如何对规则 π \pi π 进行改进呢?这里假设规则 π \pi π 是原始的规则,规则 π ′ \pi ' π 是改进后的规则,这两个规则只有在 π ′ ( s ) = a ≠ π ( s ) \pi'(s)=a \neq \pi(s) π(s)=a=π(s) 不同,其他地方完全相同,若我们知道 q π ( s , a ) > v π ( s ) q_{\pi}(s,a)> v_{\pi}(s) qπ(s,a)>vπ(s),那我们就可以知道规则 π \pi π 比规则 π \pi π 要好,它的证明过程如下:

从中可以看出,只要改善一个状态的行为就可以对规则进行改进,自然而然地肯定会想,如果把所有的状态都改成可能的最好行为,那得到的规则会很好,也就是这样的一个 greedy 规则 π \pi π

π ′ ( s ) ≐ a r g max ⁡ a q π ( s , a ) = a r g max ⁡ a E [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s , A t = a ]         ( 1 ) = a r g max ⁡ a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] \begin{aligned} {\pi}'(s) &\doteq arg\max_a{q_{\pi}(s,a)} \\ &= arg\max_a {\Bbb E} [R_{t+1}+\gamma v_{\pi}(S_{t+1})| S_t=s,A_t=a] \ \ \ \ \ \ \ (1)\\ &= arg\max_a \sum_{s',r}p(s',r|s,a)[r+\gamma v_{\pi}(s')] \end{aligned} π(s)argamaxqπ(s,a)=argamaxE[Rt+1+γvπ(St+1)St=s,At=a]       (1)=argamaxs,rp(s,rs,a)[r+γvπ(s)]

其中 a r g max ⁡ a arg\max_a argmaxa 指的是选择使后面式子最大的行为 a a a

这种贪婪的规则依据 v π v_{\pi} vπ 选择短期内最好的行为,从结构上看,这种贪婪的规则满足 policy improvement theorem,因此比原始的规则要好,因此将这个过程就称为是 Policy Improvement

假设这个贪婪的规则 π ′ \pi' π 并不比规则 π \pi π 好,而是两者相当,则 v π = v π ′ v_{\pi}= v_{\pi'} vπ=vπ,则根据公式(1)有:

v π ′ ( s ) = max ⁡ a E [ R t + 1 + γ v π ′ ( S t + 1 ) ∣ S t = s , A t = a ] = max ⁡ a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ′ ( s ’ ) ] \begin{aligned} v_{\pi'}(s) &= \max_a {\Bbb E} [R_{t+1}+\gamma v_{\pi'}(S_{t+1})| S_t=s,A_t=a] \\ &= \max_a \sum_{s',r}p(s',r|s,a)[r+\gamma v_{\pi'}(s’)] \end{aligned} vπ(s)=amaxE[Rt+1+γvπ(St+1)St=s,At=a]=amaxs,rp(s,rs,a)[r+γvπ(s)]

这个方程与 Bellman 优化方程相同,因此 v π ′ ( s ) v_{\pi'}(s) vπ(s) 一定是 v ∗ v_{\ast} v,因此规则 π ′ \pi' π 与规则 π \pi π 一定都是 optimal policies。因此,除非该规则已经是 optimal policies,否则 policy improvement 过程一定会给出一个严格更好的规则。

3 Policy Iteration

第一节介绍的是规则评价,第二节是规则改善,这里要将前两节结合到一起,从而得到下面的过程:

π 0 → E v π 0 → I π 1 → E v π 1 → I π 2 → E ⋯ → I π ∗ → E v π ∗ \pi_0 \xrightarrow{E} v_{\pi_0} \xrightarrow{I} \pi_1 \xrightarrow{E} v_{\pi_1} \xrightarrow{I} \pi_2 \xrightarrow{E} \cdots \xrightarrow{I} \pi_{\ast} \xrightarrow{E} v_{\pi_{\ast}} π0E vπ0I π1E vπ1I π2E I πE vπ

其中, → E \xrightarrow{E} E 代表的是 policy evaluation, → I \xrightarrow{I} I 代表的是 policy improvement,并且该 improvement 保证是严格的提升。因为有限 MDP 只含有有限的规则,因此该过程最终一定会收敛到 optimal policy。这种查询过程就称为是 Policy Iteration,完整的伪代码如下所示:

4 Value Iteration

Policy iteration 的一个缺点是在每次迭代中都要进行 policy evaluation,这个过程是非常耗时的,事实上该过程是可以缩短的,并且不会影响收敛,其中一种重要的方法就是 Value Iteration,它可以写作是一个结合了 policy improvement 和删减的 policy evaluation 步骤的简单备份操作:
  
v k + 1 ( s ) ≐ max ⁡ a E [ R t + 1 + γ v k ( S t + 1 ) ∣ S t = s , A t = a ] = max ⁡ a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v k ( s ′ ) ] \begin{aligned} v_{k+1}(s) &\doteq \max_a {\Bbb E} [R_{t+1}+\gamma v_{k}(S_{t+1})| S_t=s,A_t=a] \\ &= \max_a \sum_{s',r}p(s',r|s,a)[r+\gamma v_{k}(s')] \end{aligned} vk+1(s)amaxE[Rt+1+γvk(St+1)St=s,At=a]=amaxs,rp(s,rs,a)[r+γvk(s)]

对任意的 v 0 v_0 v0,序列 { v k } \{v_k\} {vk} 最终都可以收敛到 v ∗ v_{\ast} v
  
算法的伪代码如下:

所有的 truncated policy iteration 算法都可以视为是 sweep 序列,其中一些使用的是 policy evaluation backups,另一些使用的是 value iteration backups。

5 Asynchronous Dynamic Programming 异步的动态编程

DP方法的一个主要缺点就是在于它需要遍历 MDP 过程的整个状态集合,即需要对 state set 进行 sweep,当状态集合很大时,一次 sweep 就需要耗费巨大。

Asynchronous DP 方法替代了 iterative DP 算法,不是对状态集的系统地 sweep,这些方法会以任何顺序备份状态的 values,一些状态的 values 还有可能在其他状态第一次备份之前就备份了很多次。但为了正确收敛,异步算法必须继续备份所有的 values,异步 DP 在选择状态方面提供了很大的自由度。

6 Generalized Policy Iteration

广义的 policy iteration 可以用下图来表示:

Policy iteration 其实就是由两个连续的交互过程构成的:policy evaluation 和 policy improvement,在异步 DP 方法中,这两个过程是交错的。

这里用 Generalized Policy Iteration (GPI) 来代表这种一般化的思想,几乎所有的增强学习方法都可以描述为 GPI。在 GPI 中,policy evaluation 和 policy improvement 既是竞争的也是合作的。
  
  
  
参考文献
[1] Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto
[2] UCL Course on RL

内容概要:本文提出了一种基于改进扩散模型的高海拔地区新能源高波动出力场景生成方法,并提供了完整的Python代码实现。该方法针对高海拔地区风能、光伏等新能源出力波动剧烈、不确定性高的特点,通过优化扩散模型的结构与训练策略,有效捕捉历史数据的概率分布特征与时序相关性,从而生成高质量、多样化的出力场景。文中详细阐述了模型的数学推导、网络架构设计、损失函数优化及采样算法改进,并通过实验证明其在拟合精度、场景多样性与稳定性方面优于传统生成模型,为电力系统在高比例新能源接入下的规划、调度与风险评估提供了可靠的场景输入支持。; 适合人群:具备一定Python编程能力和机器学习基础,从事新能源发电预测、电力系统分析、智能优化、场景生成等方向研究的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①用于高海拔地区风电、光伏出力的不确定性建模与多场景生成;②支撑含高渗透率新能源的电力系统随机优化调度、鲁棒决策与风险评估;③为相关学术研究、论文复现与算法改进提供可运行的技术方案与代码基础; 阅读建议:建议读者结合所提供的完整资源(代码、数据集、说明文档)进行实践操作,重点关注扩散模型的前向加噪与反向去噪过程的设计细节,以及如何将其适配于新能源时序数据的生成任务,通过参数调优与对比实验深入理解模型的生成机制与性能边界。
内容概要:本文围绕基于静态约束法的配电网电动汽车接入容量评估展开研究,提出了一种在新型电力系统背景下评估主动配电网对电动汽车承载能力的方法。研究通过构建数学模型,结合潮流计算与关键约束条件(如电压越限、线路过载等),量化分析配电网可承受的最大电动汽车充电负荷容量,旨在识别规模化电动汽车接入带来的潜在运行风险,并为电网规划与运行提供科学依据。文中配套提供了完整的Matlab代码实现,便于仿真验证与结果复现。此外,该研究与分布式光伏承载力评估、电动汽车可调能力分析等方向形成技术联动,展现了多主题协同的研究体系。; 适合人群:具备电力系统分析基础理论知识及Matlab编程能力的高校研究生、科研机构研究人员,以及从事新能源并网、智能配电网规划与运行等相关领域的工程技术人员。; 使用场景及目标:①用于学术研究中的模型复现与论文撰写支撑;②评估实际配电网中电动汽车大规模接入的可行性与安全边界,指导充电基础设施布局;③作为高校教学案例,帮助学生深入理解电网承载力评估的核心原理、建模方法与仿真技术; 阅读建议:建议结合文中提及的相关研究方向(如二阶锥规划、多面体聚合方法等)进行对比学习,充分利用所提供的Matlab代码与网盘资料开展仿真实验,重点关注约束条件的设定逻辑与潮流计算模块的实现细节,以深化对评估模型机理与工程应用价值的理解。
内容概要:本文围绕“考虑隐私保护的分布式联邦学习电力负荷预测研究”展开,提出了一种基于Python实现的联邦学习框架,旨在解决居民或行业电力负荷预测中用户电表数据隐私泄露的风险。该研究通过构建分布式机器学习模型,使各参与方在不共享原始数据的前提下协同训练全局模型,有效实现了数据“可用不可见”。文中详细阐述了联邦学习的整体架构设计、本地模型训练流程、参数加密传输与安全聚合机制,并结合差分隐私等技术进一步增强系统的隐私保护能力。同时,研究利用真实电力负荷数据集进行了实验验证,展示了方法在预测精度与隐私保障之间的良好平衡,并提供了完整的代码实例与复现指南,便于后续研究与应用拓展。; 适合人群:具备一定机器学习基础和电力系统背景知识,从事智慧能源、隐私计算或人工智能相关方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 实现跨区域、跨主体的电力负荷协同预测,打破数据孤岛;② 在确保用户用电数据隐私安全的前提下提升负荷预测准确性;③ 推动联邦学习在智能电网、需求响应、虚拟电厂等场景中的实际部署与应用。; 阅读建议:建议结合文中提供的Python代码与网盘资料进行动手实践,重点关注联邦学习的通信轮次设计、模型聚合算法(如FedAvg)的实现细节以及差分隐私噪声添加策略,深入理解其对模型性能与隐私强度的影响,为进一步优化与创新奠定基础。
VDA_Band_19.1_3rd edition_2026 English Inspection of Technical Cleanliness 内容概要:本文档为德国汽车工业协会(VDA)发布的第三版《技术清洁度检验:功能相关汽车部件的颗粒污染检测》(VDA 19.1),系统规范了汽车行业中零部件技术清洁度的检测方法与流程。文件涵盖从取样、提取、过滤到分析的全流程标准化操作,重点更新了干法提取(如 Stamp Test 和刷吸法)、小于50µm颗粒的检测、光学子系统和SEM/EDX标准分析方法,并引入统一材料分类体系以提升结果可比性。同时明确了“标准分析”与“自由检验”的区别,前者用于高兼容性检测,后者允许客户与供应商协商定制参数。文档还强化了对非可测组件的技术清洁保障、测量不确定度评估及方法验证的要求,并提供了多个实际案例支持应用落地。; 适合人群:适用于汽车制造业中从事质量控制、工艺开发、供应商管理及相关检测实验室的技术人员和管理人员,尤其适合具备一定质量管理或洁净度检测基础的专业人员。; 使用场景及目标:①用于制定和执行零部件清洁度检测标准;②指导 incoming/outgoing 检验及生产过程监控;③支持失效分析与质量改进项目;④作为企业内部审核和技术交流的依据; 阅读建议:建议结合VDA 19.2及其他相关标准配套使用,重点关注各章节中的起始参数设定、方法选择逻辑及附录中的检查表示例,在实际操作中同步开展方法验证与人员培训,确保检测结果的有效性和可追溯性。
内容概要:本研究聚焦于电动汽车(EV)作为灵活可调资源的能力评估,提出了一种基于多面体聚合与闵可夫斯基和的数学建模方法,用以精确刻画大规模电动汽车集群的可调能力范围。通过将单辆电动汽车的充放电行为抽象为几何空间中的多面体可行域,并利用闵可夫斯基和实现对群体可行域的高效聚合,从而构建出能够反映整体调节潜力的统一数学表达。该方法在Matlab平台上实现了完整的仿真代码,支持对不同场景下电动汽车集群的上、下调能力进行量化评估,为电网调度、需求响应及电力市场机制设计提供了理论依据与工具支撑。; 适合人群:具备电力系统分析、优化理论及Matlab编程基础的研究生、科研人员及从事新能源、智能电网相关工作的工程师。; 使用场景及目标:①用于评估大规模电动汽车接入背景下系统的灵活性资源潜力;②支撑含高比例可再生能源的电力系统调度与规划决策;③为需求响应项目中EV聚合商参与电力市场提供能力申报的技术手段;④作为教学案例帮助理解集合运算在电力系统中的应用。; 阅读建议:学习者应结合Matlab代码深入理解多面体建模与闵可夫斯基和的实现细节,建议从单车模型入手逐步过渡到集群聚合,并尝试调整参数(如数量、SOC分布、功率限制)观察聚合结果的变化,以增强对模型特性的掌握。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值