贝尔曼方程描述了状态值函数之间的递归关系,可以用于求解状态值函数。对于状态值函数 (V(s)),贝尔曼方程可以写成不同形式,具体取决于是在确定性环境还是随机环境下进行建模。
在确定性环境下,贝尔曼方程可以表示为:
V ( s ) = max a [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V ( s ′ ) ] V(s) = \max_a \left[ R(s, a) + \gamma \sum_{s'} P(s' \mid s, a) V(s') \right] V(s)=amax[R(s,a)+γs′∑P(s′∣s,a)V(s′)]
其中:
- V ( s ) V(s) V(s) 是状态 (s) 的值函数。
- R ( s , a ) R(s, a) R(s,a)是在状态 (s) 执行动作 (a) 后立即获得的奖赏。
- γ \gamma γ 是折扣因子,用于权衡当前和未来奖赏的重要性。
- P ( s ′ ∣ s , a ) P(s' \mid s, a) P(s′∣s,a)是从状态 (s) 执行动作 (a) 后转移到状态 s ′ s' s′的概率。
- V ( s ′ ) V(s') V(s′) 是下一个状态 s ′ s' s′的值函数。
在随机环境下,贝尔曼方程可以写成期望的形式:
V ( s ) = E π [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V ( s ′ ) ] V(s) = \mathbb{E}_\pi \left[ R(s, a) + \gamma \sum_{s'} P(s' \mid s, a) V(s') \right] V(s)=Eπ[R(s,a)+γs′∑P(s′∣s,a)V(s′)]
这里, E π \mathbb{E}_\pi Eπ表示按照策略 π \pi π的期望值。对于每个状态 s s s,可以使用这个方程来迭代地更新其值函数 V ( s ) V(s) V(s),直到收敛为止。
通常,可以使用值迭代(Value Iteration)或策略迭代(Policy Iteration)等算法来基于贝尔曼方程求解状态值函数。值迭代通过反复迭代贝尔曼最优方程来逐步更新状态值函数,直到收敛为止。策略迭代则交替进行策略评估和策略改进来找到最优策略和状态值函数。
矩阵形式的
在马尔可夫决策过程(MDP)中,贝尔曼方程可以以矩阵形式表示。对于有限状态空间的情况,可以使用矩阵来表示状态值函数的更新。假设有 (N) 个状态,状态值函数 (V) 可以表示为一个长度为 (N) 的向量。
贝尔曼方程可以写成矩阵形式如下:
V = R + γ P V V = R + \gamma P V V=R+γPV
其中:
- (V) 是一个长度为 (N) 的状态值函数向量。
- (R) 是长度为 (N) 的奖赏向量,表示每个状态的即时奖赏。
- (P) 是一个大小为 N × N N \times N N×N的状态转移概率矩阵,表示从一个状态到另一个状态的转移概率。
- γ \gamma γ 是折扣因子。
这个方程表示当前状态值函数 (V) 等于即时奖赏 (R) 加上折扣因子 γ \gamma γ乘以状态转移概率矩阵 (P) 与状态值函数 (V) 的乘积。
通过解这个矩阵方程,可以计算出状态值函数 (V) 的值。这在值迭代算法中是一个关键的步骤,可以通过迭代求解直到状态值函数收敛为止。
矩阵形式求解
vk+1 = rπ + γPπvk;
好的,让我们考虑一个简单的例子来说明值迭代算法是如何用迭代法求解状态值函数的。
假设有一个包含 3 个状态的马尔可夫决策过程(MDP),状态分别为 (s_1)、(s_2)、(s_3)。初始时,我们随机初始化状态值函数 (V) 为 ([0, 0, 0])。
假设即时奖赏 (R) 向量为 ([0, 0, 1]),表示在状态 (s_3) 获得奖赏 1,其他状态即时奖赏为 0。
状态转移概率矩阵 (P) 为:
[ 0.5 0.5 0 0.25 0.5 0.25 0 0.5 0.5 ] \begin{bmatrix} 0.5 & 0.5 & 0 \\ 0.25 & 0.5 & 0.25 \\ 0 & 0.5 & 0.5 \\ \end{bmatrix} 0.50.2500.50.50.500.250.5
这个矩阵表示从一个状态到另一个状态的转移概率。
现在,我们可以使用值迭代算法来迭代地更新状态值函数。值迭代的更新规则是根据贝尔曼最优方程:
V ( s ) = R ( s ) + γ max a ∑ s ′ P ( s ′ ∣ s , a ) V ( s ′ ) V(s) = R(s) + \gamma \max_a \sum_{s'} P(s' \mid s, a) V(s') V(s)=R(s)+γmaxa∑s′P(s′∣s,a)V(s′)
在这个例子中,我们设定折扣因子 (\gamma = 0.9)。迭代更新状态值函数直到收敛为止。
首先,我们随机初始化状态值函数为 ([0, 0, 0])。然后进行迭代更新:
- 根据贝尔曼方程更新状态值函数:
V
(
s
1
)
=
0
+
0.9
×
max
(
0.5
×
0
+
0.5
×
0
+
0
×
V
(
s
1
)
,
0.25
×
0
+
0.5
×
0
+
0.25
×
V
(
s
2
)
,
0
×
0
+
0.5
×
0
+
0.5
×
V
(
s
3
)
)
=
0
V(s_1) = 0 + 0.9 \times \max(0.5 \times 0 + 0.5 \times 0 + 0 \times V(s_1), 0.25 \times 0 + 0.5 \times 0 + 0.25 \times V(s_2), 0 \times 0 + 0.5 \times 0 + 0.5 \times V(s_3)) = 0
V(s1)=0+0.9×max(0.5×0+0.5×0+0×V(s1),0.25×0+0.5×0+0.25×V(s2),0×0+0.5×0+0.5×V(s3))=0
V
(
s
2
)
=
0
+
0.9
×
max
(
0.5
×
0
+
0.5
×
0
+
0
×
V
(
s
1
)
,
0.25
×
0
+
0.5
×
0
+
0.25
×
V
(
s
2
)
,
0
×
0
+
0.5
×
0
+
0.5
×
V
(
s
3
)
)
=
0
V(s_2) = 0 + 0.9 \times \max(0.5 \times 0 + 0.5 \times 0 + 0 \times V(s_1), 0.25 \times 0 + 0.5 \times 0 + 0.25 \times V(s_2), 0 \times 0 + 0.5 \times 0 + 0.5 \times V(s_3)) = 0
V(s2)=0+0.9×max(0.5×0+0.5×0+0×V(s1),0.25×0+0.5×0+0.25×V(s2),0×0+0.5×0+0.5×V(s3))=0
V
(
s
3
)
=
1
+
0.9
×
max
(
0.5
×
0
+
0.5
×
0
+
0
×
V
(
s
1
)
,
0.25
×
0
+
0.5
×
0
+
0.25
×
V
(
s
2
)
,
0
×
0
+
0.5
×
0
+
0.5
×
V
(
s
3
)
)
=
1
V(s_3) = 1 + 0.9 \times \max(0.5 \times 0 + 0.5 \times 0 + 0 \times V(s_1), 0.25 \times 0 + 0.5 \times 0 + 0.25 \times V(s_2), 0 \times 0 + 0.5 \times 0 + 0.5 \times V(s_3)) = 1
V(s3)=1+0.9×max(0.5×0+0.5×0+0×V(s1),0.25×0+0.5×0+0.25×V(s2),0×0+0.5×0+0.5×V(s3))=1
2. 现在状态值函数变为
[
0
,
0
,
1
]
[0, 0, 1]
[0,0,1]。
3. 继续进行迭代,重复步骤 1 和步骤 2,直到状态值函数不再发生变化或变化非常小为止。
这就是值迭代算法的基本步骤,通过迭代更新贝尔曼最优方程,最终可以得到状态值函数的收敛值。
4
在这里,您提供了一个值迭代的更新规则,其中 (V_{k+1}) 表示第 (k+1) 次迭代后的状态值函数,(r_\pi) 是即时奖赏向量,(\gamma) 是折扣因子,(P_\pi) 是状态转移概率矩阵。
这个更新规则可以用矩阵形式表示为 (V_{k+1} = r_\pi + \gamma P_\pi V_k)。
假设初始时,状态值函数 (V_0) 是已知的,并且我们想要迭代更新求解最终的状态值函数 (V)。
让我们使用矩阵形式的值迭代来说明这一点:
假设有状态值函数 (V_0) 和其他参数:
V 0 = [ v 1 v 2 v 3 ] , r π = [ r 1 r 2 r 3 ] , P π = [ p 11 p 12 p 13 p 21 p 22 p 23 p 31 p 32 p 33 ] V_0 = \begin{bmatrix} v_1 \\ v_2 \\ v_3 \end{bmatrix}, \quad r_\pi = \begin{bmatrix} r_1 \\ r_2 \\ r_3 \end{bmatrix}, \quad P_\pi = \begin{bmatrix} p_{11} & p_{12} & p_{13} \\ p_{21} & p_{22} & p_{23} \\ p_{31} & p_{32} & p_{33} \end{bmatrix} V0= v1v2v3 ,rπ= r1r2r3 ,Pπ= p11p21p31p12p22p32p13p23p33
其中 (v_i) 表示状态 (i) 的初始值函数,(r_i) 表示状态 (i) 的即时奖赏,(p_{ij}) 表示从状态 (i) 转移到状态 (j) 的转移概率。
更新状态值函数的矩阵形式为:
V k + 1 = r π + γ P π V k V_{k+1} = r_\pi + \gamma P_\pi V_k Vk+1=rπ+γPπVk
将值代入,得到更新后的状态值函数 (V_{k+1})。
V k + 1 = [ r 1 r 2 r 3 ] + γ [ p 11 p 12 p 13 p 21 p 22 p 23 p 31 p 32 p 33 ] [ v 1 v 2 v 3 ] V_{k+1} = \begin{bmatrix} r_1 \\ r_2 \\ r_3 \end{bmatrix} + \gamma \begin{bmatrix} p_{11} & p_{12} & p_{13} \\ p_{21} & p_{22} & p_{23} \\ p_{31} & p_{32} & p_{33} \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \\ v_3 \end{bmatrix} Vk+1= r1r2r3 +γ p11p21p31p12p22p32p13p23p33 v1v2v3
将矩阵相乘和向量相加的结果计算出来,即可得到更新后的状态值函数 (V_{k+1})。按照这个更新规则反复进行迭代,直到状态值函数收敛。