1 Introduction
动态规划slices中给的定义是:
Dynamic means the sequential or temporal component to the problem; Programming means optimising a "program", i.e. a policy。
主要步骤是:
- 将一个复杂的问题分解成多个子问题
- 解决子问题
- 合并子问题的解
当问题具有以下特性,我们常可以考虑使用动态规划来求解:
- 最优子结构(Optimal substructure)
- 适用于最优性原理
- 优化方法能够被分解到各个子问题
- 重叠子问题(Overlapping subproblems)
- 子问题能够多次出现
- 每个解能被存储和复用
MDP即满足上述的特性:Bellman方程把问题递归为求解子问题,价值函数就相当于存储了一些子问题的解,可以复用。
常用于两类问题:
-
预测:给定一个MDP 和策略 ,或者给定一个MRP ,要求输出基于当前策略π的价值函数
-
控制:给定一个MDP ,要求确定最优价值函数 和最优策略
2 Policy Evaluation
2.1 迭代法策略估计
问题:评估一个给定的策略π,也就是解决“预测”问题。
解决方案:使用Bellman期望方程迭代更新期望值函数
具体方法:同步反向迭代,即在每次迭代过程中,对于第 次迭代,所有的状态s的价值用v_k(s') 计算并更新该状态第 次迭代中使用的价值 ,其中s’是s的后继状态。
此种方法通过反复迭代最终将收敛至 。
也可以异步反向迭代,即在第k次迭代使用当次迭代的状态价值来更新状态价值。
公式为:
- 如何优化策略
即策略迭代。
3 策略迭代 Policy Iteration
对于课程中给出格子世界的例子,一次迭代即得到了最优策略,对于更复杂的问题往往需要多次迭代,即我们给出一个初始策略,估计其值函数至接近真实值,然后利用贪心算法得到改进的策略,接着对改进后的策略进行估计。
slices中给出的证明:
当然我们也可以进行调整,如:加上停止条件,值函数改变值小于\(\epsilon\),或者设定迭代次数。
4 值迭代 Value Iteration
策略迭代是基于贝尔曼期望方程和贪婪法的,而值迭代则是基于贝尔曼最优方程的。对于某一个最优决策序列而言,不论初始状态和初始决策如何,一个策略能够使得状态s获得最优价值,当且仅当:对于从状态s可以到达的任何状态s’,该策略能够使得状态s’的价值是最优价值。对于值函数使用最优性原理:
主要步骤:
注意:值迭代与策略迭代的联系区别:
- 策略迭代:先评估得到最优价值,然后贪心,向价值函数最大打方向调整策略。
- 值迭代:先求出\(s^{’}\)状态的最优价值函数,然后找到一个策略能够一步时期从\(s^{'}\rightarrow s\)的最优价值函数,接下来每一步都如此,一步一步往前推,最终就能得到最优的价值函数,对应相应的最优策略。在迭代过程中的策略不对应任何实质上的策略,只是理论上的过渡。
- 很明显值迭代迭代更快。
小结
预测问题:在给定策略下迭代计算价值函数。控制问题:策略迭代寻找最优策略问题则先在给定或随机策略下计算状态价值函数,根据状态函数贪婪更新策略,多次反复找到最优策略;单纯使用价值迭代,全程没有策略参与也可以获得最优策略,但需要知道状态转移矩阵,即状态s在行为a后到达的所有后续状态及概率。
使用状态价值函数或行为价值函数两种价值迭代的算法时间复杂度都较大,为 或 。一种改进方案是使用异步动态规划,其他的方法即放弃使用动态规划,随后的几讲中将详细讲解其他方法。
动态规划的一些扩展
异步动态规划 Asynchronous Dynamic Programming
几个可能改进的点子
原位动态规划(In-place dynamic programming):直接原地更新下一个状态的v值,而不像同步迭代那样需要额外存储新的v值。在这种情况下,按何种次序更新状态价值有时候会比较有意义。
重要状态优先更新(Priortised Sweeping):对那些重要的状态优先更新。
使用Bellman error:
来确定哪些状态是比较重要的。Bellman error 反映的是当前的状态价值与更新后的状态价值差的绝对值。Bellman error越大,越有必要优先更新。对那些Bellman error较大的状态进行备份。这种算法使用优先级队列能够较得到有效的实现。
Real-time dynamic programming:更新那些仅与个体关系密切的状态,同时使用个体的经验来知道更新状态的选择。有些状态虽然理论上存在,但在现实中几乎不会出现。利用已有现实经验。
St是实际与Agent相关或者说Agent经历的状态,可以省去关于那些仅存在理论上的状态的计算。
- 采样更新 Sample Backups
动态规划使用full-width backups。意味着使用DP算法,对于每一次状态更新,都要考虑到其所有后继状态及所有可能的行为,同时还要使用MDP中的状态转移矩阵、奖励函数(信息)。DP解决MDP问题的这一特点决定了其对中等规模(百万级别的状态数)的问题较为有效,对于更大规模的问题,会带来Bellman维度灾难。
因此在面对大规模MDP问题是,需要寻找更加实际可操作的算法,主要的思想是Sample Backups,后续会详细介绍。这类算法的优点是不需要完整掌握MDP的条件(例如奖励机制、状态转移矩阵等),通过Sampling(举样)可以打破维度灾难,反向更新状态函数的开销是常数级别的,与状态数无关。
- 近似动态规划 Approximate Dynamic Programming
使用其他技术手段(例如神经网络)建立一个参数较少,消耗计算资源较少、同时虽然不完全精确但却够用的近似价值函数: