基于模型的动态规划
对于 model-based 方法而言,环境 和 是已知的,那么可以直接根据贝尔曼方程用动态规划来计算更新策略。整个过程分为策略评估(policy evaluation)和策略改进(policy improvement)两部分:
- 策略评估:评估每个状态的 值函数
- 策略改进:计算 值函数, 会按照一定的方法根据 值输出动作(如贪婪法,直接输出 值最大的动作):
然后不断迭代上述两个步骤,这叫策略迭代(policy iteration):
自举
可以看到,需要用下一个状态 的值函数来更新当前状态 的值函数。但 的值函数也是我们估算出来的,相当于要用一个估算去更新同类的估算,这种方法叫自举(bootstrapping)。
TIP
Bootstrapping 的字面意思是:拔自己的鞋带,把自己举起来(这里有一张很形象的图)
策略迭代
线性方程组的迭代解法
对于式 ,、 和 已知, 是给定的当前要评估的策略,也已知,唯一的未知数是状态值函数。那么式 可以看关于状态值函数的线性方程组。
线性方程组的数值求解包括直接法(如高斯消元) 和迭代解法,策略评估中采用了迭代解法中的高斯-赛德尔迭代法:
其中 表示第 次迭代。
雅克比迭代法
// 有空再写
高斯-赛德尔迭代法
// 有空再写
策略评估
因此用迭代法进行策略评估的流程为:
- Init
- Repeat :( 是第 个高斯-赛德尔迭代)
- for every do:(一次状态扫描)
- for every do:(一次状态扫描)
- Until
策略改进
这里把策略考虑为确定策略,即 。那么一个很自然的方法就是用贪婪法(greedy)来更新策略,即直接输出 Q 值最大的动作:
那么把策略评估和策略改进合起来:
- Init
- Repeat ( 是第 个时间步)
- 进行策略评估,得到
- for every do:
- Until
也就是有两个循环,内循环在用高斯-赛德尔迭代法进行策略评估,循环到值函数收敛为止;外循环在更新策略,循环到策略收敛为止。
最优性证明
证明更新后的 一定是更好的策略:
因此策略更新到 后, 和 在状态 的值都比更新前更高。
当更新停止后,有:
也就是对每个状态 ,采取的都是最优动作,即这时 是最优策略。
值函数迭代
策略迭代会等到 收敛后再进行策略改进,而值函数迭代(value iteration)不等 收敛,而是评估一次后就进行策略改进:
- Init
- Repeat ( 是第 个时间步)
- for every do
- for every do
- Until
- Output
可以看到值函数迭代过程中并没有一个显示的策略。