动态规划(Dynamic Programming,简称DP)是一种经过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。html
动态规划经常适用于具备以下性质的问题:web
动态规划方法所耗时间每每远少于朴素解法。app
马尔可夫决策过程MDP知足上述两个性质:框架
动态规划须要知足MDP过程是已知的(model-based)。异步
策略评估(Policy Evaluation)指的是计算给定策略的价值,解决的问题是 "How to evaluate a policy"。async
策略评估的思路:迭代使用贝尔曼指望方程(关于 MDP 的贝尔曼指望方程形式见《马尔可夫决策过程》)。ide
策略评估过程以下图所示:
函数
\[v_{k+1} = \sum_{a\in A}\pi(a|s) \Bigl( R_{s}^a + \gamma\sum_{s'\in S}P_{ss'}^a v_{k}(s') \Bigr)\]优化
使用向量形式表示:ui
\[\mathbf{v^{k+1}} = \mathbf{R^{\pi}} + \gamma \mathbf{P^{\pi}v^{k}}\]
策略迭代(Policy Iteration,简称PI)解决的问题是 "How to improve a policy"。
给定一个策略 \(\pi\):
能够证实,策略迭代不断进行老是能收敛到最优策略,即 \(\pi ' = \pi^{*}\)。
策略迭代能够使用下图来形式化的描述:
经过上述提到的策略评估咱们不难发现,策略评估是一个不断迭代的过程:
\[v_{\pi}(s) = E[R_{t+1} + \gamma R_{t+2} + ...| S_t = s]\]
那么问题来了,Does policy evaluation need to converge to \(v_{\pi}\)?
咱们是否是能够引入一个中止规则或者规定在迭代 \(k\) 次后中止策略评估?
再进一步想,咱们为何不在每次策略评估的迭代过程当中进行策略提高(等同于策略评估迭代1次后中止)?
注:这和后续要介绍的值迭代等价。
所以咱们能够把上述策略迭代的过程通常化,即广义策略迭代(Generalised Policy Iteration,简称GPI)框架:
介绍值迭代以前,咱们先介绍下最优化原理。
最优化原理(Principle of Optimality)定义:
一个过程的最优决策具备这样的性质:即不管其初始状态和初始决策如何,其从此诸策略对以第一个决策所造成的状态做为初始状态的过程而言,必须构成最优策略。
最优化原理若是用数学化一点的语言来描述的话就是:
以状态 \(s\) 为起始点,策略 \(\pi(a|s)\) 能够获得最优值 \(v_{\pi}(s) = v_*(s)\) 当且仅当:
- 任意状态 \(s'\) 对于状态 \(s\) 都可达;
- 以状态 \(s'\) 为起始点,策略 \(\pi\) 能够获得最优值 \(v_{\pi}(s') = v_*(s')\)。
根据最优化原理可知,若是咱们获得了子问题的解 $ v_*(s')$,那么以状态 \(s\) 为起始点的最优解 \(v_*(s)\) 能够经过一步回退(one-step lookahead)就能获取:
\[v_*(s) ← \max_{a\in A}\Bigl(R_s^a + \gamma \sum_{s'\in S}P_{ss'}^{a}v_*(s') \Bigr)\]
也就是说,咱们能够从最后开始向前回退从而获得最优解,值迭代就是基于上述思想进行迭代更新的。
值迭代(Value Iteration,简称VI)解决的问题也是 "Find optimal policy $\pi $"。
可是不一样于策略迭代使用贝尔曼指望方程的是,值迭代使用贝尔曼最优方程进行迭代提高。
值迭代与策略迭代不一样的地方在于:
以下图所示:
对应的向量表示为:
\[\mathbf{v}_{k+1} = \max_{a\in A}\mathbf{R}^a + \gamma \mathbf{P^av}^k\]
下图为三种方法的总结:
维度灾难:Number of states \(n = |S|\) grows exponentially with number of state variables
后续将要讨论的时序差分方法
[1] 智库百科-最优化原理
[2] Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto, 2018
[3] David Silver's Homepage