策略迭代和值迭代
策略迭代
1.初始化: 状态值函数$V(s)$和策略$\pi (s)$
2.状态值函数更新: $V(s)=\sum_{s’,r}{p(s’,r|s,\pi (s))[r+\gamma V(s’)]}$
在计算状态值函数时, 需要对每个状态进行遍历, 在该状态下根据策略选择相应的动作, 从而求得状态值函数. 状态值函数趋于稳定时, 跳转到Policy Improvement阶段.
3.策略更新:$\pi(s)=argmax_a\sum_{s’,r}{p(s’,r|s,a)[r+\gamma V(s’)]}$
当在对策略更新时, 需要对所有状态的所有动作进行遍历, 从而得到每个状态的最优执行动作, 也就是得到最优的策略.
策略更新完成后重新对新的策略进行更新, 直至策略稳定, 输出策略.
值迭代
1.初始化: 状态值函数$V(s)$
2.状态值函数更新: $V(s)=max_a\sum_{s’,r}{p(s’,r|s,a)[r+\gamma V(s’)]}$
在遍历计算状态值函数的过程中, 其计算对每个状态的所有动作的状态值函数$V(s,a)$,从中选取最优的对$V(s)$进行赋值, 当状态值函数趋于稳定, 则跳转至策略输出阶段.
3.策略找寻(本人翻译):$\pi(s)=argmax_a\sum_{s’,r}{p(s’,r|s,a)[r+\gamma V(s’)]}$
根据稳定的状态值函数, 遍历所有状态和所有动作, 求得任意一个状态下的最优动作, 从而得到最优策略.
对比
通过对这两种算法进行观察, 我们可以得到其区别
策略迭代需要对策略进行初始化, 值迭代不需要.
状态值函数更新时, 策略迭代只需计算确定策略下的状态值函数, 值迭代需要计算所有动作的状态值函数, 并选取最大的进行赋值.
一个叫策略更新, 一个叫策略找寻(本人翻译), 从字面上就可以看出两者之间的区别, 策略更新需要对策略进行重新赋值, 策略找寻则是根据状态值函数找到对应的策略.
以策略迭代为代表的算法有策略梯度(Policy Gradient), 以值迭代为代表的算法有Q-learning. 其中, 当算法用于连续动作控制时, 优先使用策略迭代算法, 这是因为在使用策略迭代时可以利用Function Approximation来解决动作的连续化问题. 如果使用Q-learning算法, 那么Q Value在面对连续动作时将无可奈何, 只能选择将其离散化, 然后再进行计算.