基于模型的动态规划

对于 model-based 方法而言,环境 是已知的,那么可以直接根据贝尔曼方程用动态规划来计算更新策略。整个过程分为策略评估(policy evaluation)和策略改进(policy improvement)两部分:

  1. 策略评估:评估每个状态的 值函数

  1. 策略改进:计算 值函数, 会按照一定的方法根据 值输出动作(如贪婪法,直接输出 值最大的动作):

然后不断迭代上述两个步骤,这叫策略迭代(policy iteration):

自举

可以看到,需要用下一个状态 的值函数来更新当前状态 的值函数。但 的值函数也是我们估算出来的,相当于要用一个估算去更新同类的估算,这种方法叫自举(bootstrapping)。

TIP

Bootstrapping 的字面意思是:拔自己的鞋带,把自己举起来(这里有一张很形象的图)

策略迭代

线性方程组的迭代解法

对于式 已知, 是给定的当前要评估的策略,也已知,唯一的未知数是状态值函数。那么式 可以看关于状态值函数的线性方程组

线性方程组的数值求解包括直接法(如高斯消元) 和迭代解法,策略评估中采用了迭代解法中的高斯-赛德尔迭代法:

其中 表示第 次迭代。

雅克比迭代法

// 有空再写

高斯-赛德尔迭代法

// 有空再写

策略评估

因此用迭代法进行策略评估的流程为:

  • Init
  • Repeat :( 是第 个高斯-赛德尔迭代)
    • for every do:(一次状态扫描)
  • Until

策略改进

这里把策略考虑为确定策略,即 。那么一个很自然的方法就是用贪婪法(greedy)来更新策略,即直接输出 Q 值最大的动作:


那么把策略评估和策略改进合起来:

  • Init
  • Repeat 是第 个时间步)
    • 进行策略评估,得到
    • for every do:
  • Until

也就是有两个循环,内循环在用高斯-赛德尔迭代法进行策略评估,循环到值函数收敛为止;外循环在更新策略,循环到策略收敛为止。

最优性证明

证明更新后的 一定是更好的策略:

因此策略更新到 后, 在状态 的值都比更新前更高。

当更新停止后,有:

也就是对每个状态 ,采取的都是最优动作,即这时 是最优策略。

值函数迭代

策略迭代会等到 收敛后再进行策略改进,而值函数迭代(value iteration)不等 收敛,而是评估一次后就进行策略改进:

  • Init
  • Repeat 是第 个时间步)
    • for every do
  • Until
  • Output

可以看到值函数迭代过程中并没有一个显示的策略。