Linxii's Blog
RL的原理-4-值迭代与策略迭代Blur image

1.值迭代(Value Iteration)#

  值迭代是一种通过反复应用贝尔曼最优公式来计算最优状态值函数和最优策略的方法。就是在rl-3中提到的贝尔曼最优公式的求解。

  值迭代的基本思想是从一个初始的状态值函数v0v_0开始,反复应用贝尔曼最优公式,得到一系列的状态值函数v1,v2,...v_1, v_2, ...。随着迭代次数的增加,这些状态值函数将逐渐逼近最优状态值函数vv_{*}

vk+1=f(vk)=maxπ(rπ+γPπvk)v_{k+1} =f(v_k) = \max_{\pi} \left( r_{\pi} + \gamma \mathbf{P_{\pi}} v_k \right)

1.1 算法步骤(Matrix form)#

  1. 策略更新(policy update):对于当前的状态值函数vkv_k,计算对应的策略πk\pi_k
πk+1=argmaxπ(rπ+γPπvk)\pi_{k+1}= argmax_{\pi}(r_{\pi} + \gamma P_{\pi} v_k)
  1. 值更新(value update):使用贝尔曼最优公式更新状态值函数vk+1v_{k+1}
vk+1=rπk+1+γPπk+1vkv_{k+1} = r_{\pi_{k+1}} + \gamma \mathbf{P_{\pi_{k+1}}} v_k

1.2 算法步骤(Element-wise form)#

  1. 策略更新(policy update)
πk+1(s)=argmaxaπ(as)(rp(rs,a)r+γsp(ss,a)vk(s)),sS\pi_{k+1}(s) = argmax_{a} \sum \pi(a|s) (\sum_{r} p(r | s, a)r+ \gamma \sum_{s'} p(s' | s, a) v_k(s')), \forall s \in S

  然后最大的动作就是当前状态下的最优动作,这是一个贪心的过程。

πk+1(s)=argmaxaqk(a,s),sS\pi_{k+1}(s) = argmax_{a} q_{k}(a, s), \forall s \in S πk+1(as)={1a=ak(s)0aak(s)\pi_{k+1}(a|s)= \begin{cases} 1 & a=a^*_{k}(s) \\ 0 & a \ne a^*_{k}(s) \end{cases}
  1. 值更新(value update)
vk+1(s)=aπk+1(as)(rp(rs,a)r+γsp(ss,a)vk(s)),sSv_{k+1}(s) = \sum_{a} \pi_{k+1}(a|s) (\sum_{r} p(r | s, a)r+ \gamma \sum_{s'} p(s' | s, a) v_k(s')), \forall s \in S vk+1(s)=maxaqk(a,s)v_{k+1}(s) = \max_{a} q_{k}(a,s)

1.3例子#

  我们会有一个q-value的表格,然后通过上面的步骤不断更新q-value表格,直到收敛为止。

q-valuea1a_{1}a2a_{2}a3a_{3}
S1S_{1}1+γv(s1)-1+\gamma v({s1})0+γv(s3)0+\gamma v({s3})0+γv(s1)0+\gamma v({s1})
S2S_{2}
S3S_{3}

  通过之前的式子知道vk+1(s)=maxaqk(a,s)v_{k+1}(s) = \max_{a} q_{k}(a,s),所以每次更新v-value的时候,就是取q-value表格中每一行的最大值。这里的每次更新是所有状态都会进行更新。

  在执行的时候让vk=0v_{k}=0,设定个初值上面的表格就是具体的数了,然后就可以不断迭代,直到收敛为止。

2.策略迭代(Policy Iteration)#

  最开始有一个策略π0\pi_0,任意的就行,然后通过策略评估计算出对应的状态值函数vπ0v_{\pi_0},然后进行策略迭代。

2.1 算法步骤(Matrix form)#

  1. 策略评估(Policy Evaluation):对于当前的策略πk\pi_k,计算对应的状态值函数vπkv_{\pi_k}
vπk=rπk+γPπkvπkv_{\pi_k} = r_{\pi_k} + \gamma \mathbf{P_{\pi_k}} v_{\pi_k}
  1. 策略改进(Policy Improvement):使用贝尔曼最优公式更新策略πk+1\pi_{k+1}
πk+1=argmaxπ(rπ+γPπvπk)\pi_{k+1}= argmax_{\pi}(r_{\pi} + \gamma P_{\pi} v_{\pi_k})

2.2 算法步骤(Element-wise form)#

  在这里每次迭代都是更新所有状态选择的策略。

  1. 策略评估(Policy Evaluation)

  这里也是迭代的过程,通过不断迭代计算出对应的状态值函数vπkv_{\pi_k}

vπk(j+1)(s)=aπk(as)(rp(rs,a)r+γsp(ss,a)vπk(j)(s)),sSv_{\pi_k}^{(j+1)}(s) = \sum_{a} \pi_k(a|s) (\sum_{r} p(r | s, a)r+ \gamma \sum_{s'} p(s' | s, a) v_{\pi_k}^{(j)}(s')), \forall s \in S
  1. 策略改进(Policy Improvement)
πk+1(s)=argmaxaπ(as)(rp(rs,a)r+γsp(ss,a)vπk(s)),sS\pi_{k+1}(s) = argmax_{a} \sum \pi(a|s) (\sum_{r} p(r | s, a)r+ \gamma \sum_{s'} p(s' | s, a) v_{\pi_k}(s')), \forall s \in S

3.截断迭代(Truncated Iteration)#

  当j=1j=1时,就会变成值迭代(Value Iteration),所以值迭代可以看作是策略迭代的一种特殊情况,而在实际中,策略迭代中的策略评估过程不可能进行无限次的策略评估,所以实际应用时也是截断的。

RL的原理-4-值迭代与策略迭代
https://linxii.top/blog/rl-learning-4-vpit
Author 林夕夕
Published at January 22, 2026
Comment seems to stuck. Try to refresh?✨