动态规划
一、策略评估
根据上节内容,我们可以得到对于任意的
s
∈
S
s \in S
s∈S有:
v
π
(
s
)
=
E
π
[
G
t
∣
S
t
=
s
]
=
E
π
[
R
t
+
1
+
γ
G
t
+
1
∣
S
t
=
s
]
=
E
π
[
R
t
+
1
+
γ
v
π
(
S
t
+
1
)
∣
S
t
=
s
]
=
E
π
[
R
t
+
1
+
γ
v
π
(
s
′
)
∣
S
t
=
s
]
=
∑
a
π
(
a
∣
s
)
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
(
s
′
)
]
\begin{aligned} v_\pi(s) & =E_\pi[G_t|S_t=s]\\ & =E_\pi[R_{t+1}+\gamma G_{t+1}|S_t=s]\\ &=E_\pi[R_{t+1}+\gamma v_\pi(S_{t+1})|S_t=s]\\ &=E_\pi[R_{t+1}+\gamma v_\pi(s')|S_t=s]\\ &=\sum_a\pi(a|s)\sum_{s',r}p(s',r|s,a)[r+\gamma v_\pi(s')] \end{aligned}
vπ(s)=Eπ[Gt∣St=s]=Eπ[Rt+1+γGt+1∣St=s]=Eπ[Rt+1+γvπ(St+1)∣St=s]=Eπ[Rt+1+γvπ(s′)∣St=s]=a∑π(a∣s)s′,r∑p(s′,r∣s,a)[r+γvπ(s′)]
通过该公式不断对策略的价值函数进行迭代直到稳定,最终收敛在策略的状态价值函数。
输入待评估的策略 π \pi π
算法参数:小阈值 θ > 0 \theta>0 θ>0,用于确定估计量的精度
对于任意 s ∈ S + s\in S^+ s∈S+,任意初始化 V ( s ) V(s) V(s),其中 V ( 终 止 状 态 ) = 0 V(终止状态)=0 V(终止状态)=0
循环:
Δ ← 0 \Delta \leftarrow 0 Δ←0
对于每个 s ∈ S s\in S s∈S循环:
v ← V ( s ) v \leftarrow V(s) v←V(s)
V ( s ) ← ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ( s ′ ) ] V(s) \leftarrow\sum_a\pi(a|s)\sum_{s',r}p(s',r|s,a)[r+\gamma V(s')] V(s)←∑aπ(a∣s)∑s′,rp(s′,r∣s,a)[r+γV(s′)]
Δ ← m a x ( Δ , ∣ v − V ( s ) ∣ ) \Delta \leftarrow max(\Delta,|v-V(s)|) Δ←max(Δ,∣v−V(s)∣)
直到 Δ < θ \Delta<\theta Δ<θ
二、策略迭代
通过对初始的策略进行不断优化最终收敛到最优策略的一种算法。算法的伪代码如下:
1、初始化
对 s ∈ S s\in S s∈S,任意设定 V ( s ) ∈ R V(s) \in R V(s)∈R 以及 π ( s ) ∈ A ( s ) \pi(s)\in A(s) π(s)∈A(s)
2、策略评估
循环:
Δ ← 0 \Delta \leftarrow 0 Δ←0
对于每个 s ∈ S s\in S s∈S循环:
v ← V ( s ) v \leftarrow V(s) v←V(s)
V ( s ) ← ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ( s ′ ) ] V(s) \leftarrow\sum_a\pi(a|s)\sum_{s',r}p(s',r|s,a)[r+\gamma V(s')] V(s)←∑aπ(a∣s)∑s′,rp(s′,r∣s,a)[r+γV(s′)]
Δ ← m a x ( Δ , ∣ v − V ( s ) ∣ ) \Delta \leftarrow max(\Delta,|v-V(s)|) Δ←max(Δ,∣v−V(s)∣)
直到 Δ < θ \Delta<\theta Δ<θ
3、策略改进
p o l i c y − s t a b l e ← t r u e policy-stable \leftarrow true policy−stable←true
对每一个 s ∈ S s \in S s∈S:
o l d − a c t i o n ← π ( s ) old-action \leftarrow \pi(s) old−action←π(s)
π ( s ) ← a r g m a x a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ( s ′ ) ] \pi(s) \leftarrow argmax_a\sum_{s',r}p(s',r|s,a)[r+\gamma V(s')] π(s)←argmaxa∑s′,rp(s′,r∣s,a)[r+γV(s′)]
如果 o l d − a c t i o n ≠ π ( s ) old-action\neq \pi(s) old−action=π(s),那么 p o l i c y − s t a b l e ← f a l s e policy-stable\leftarrow false policy−stable←false
如果policy-stable为true,那么停止并返回 V ≈ v ∗ V\approx v_* V≈v∗ ,以及 π ≈ π ∗ \pi \approx \pi_* π≈π∗,否则跳转到2
三、价值迭代
价值迭代算法伪代码如下:
算法参数:小阈值 θ > 0 \theta>0 θ>0,用于确定估计量的精度
对于任意 s ∈ S + s\in S^+ s∈S+,任意初始化 V ( s ) V(s) V(s),其中 V ( 终 止 状 态 ) = 0 V(终止状态)=0 V(终止状态)=0
循环:
Δ ← 0 \Delta \leftarrow 0 Δ←0
对于每个 s ∈ S s\in S s∈S循环:
v ← V ( s ) v \leftarrow V(s) v←V(s)
V ( s ) ← ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ( s ′ ) ] V(s) \leftarrow\sum_a\pi(a|s)\sum_{s',r}p(s',r|s,a)[r+\gamma V(s')] V(s)←∑aπ(a∣s)∑s′,rp(s′,r∣s,a)[r+γV(s′)]
Δ ← m a x ( Δ , ∣ v − V ( s ) ∣ ) \Delta \leftarrow max(\Delta,|v-V(s)|) Δ←max(Δ,∣v−V(s)∣)
直到 Δ < θ \Delta<\theta Δ<θ
输出一个确定的 π ≈ π ∗ \pi \approx \pi_* π≈π∗使得
π ( s ) = a r g m a x a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ( s ′ ) ] \pi(s)=argmax_a\sum_{s',r}p(s',r|s,a)[r+\gamma V(s')] π(s)=argmaxa∑s′,rp(s′,r∣s,a)[r+γV(s′)]