本章全篇参考赵世钰老师的教材 Mathmatical-Foundation-of-Reinforcement-Learning Optimal State Values and Bellman Optimality Equation章节,请各位结合阅读,本合集只专注于数学概念的代码实现。
R = np.array([-1, 1, 1, 1]).reshape(-1, 1)
P = np.array(
[
[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 0, 0, 1],
[0, 0, 0, 1],
])
给定 γ = 0.9 \gamma=0.9 γ=0.9,利用上一节的解析解求解公式得到状态值
closed_form_solution(R, P, 0.9)
array([[ 8.],
[10.],
[10.],
[10.]])
q π ( s 1 ; a 1 ) = − 1 + γ v π ( s 1 ) = 6.2 q π ( s 1 ; a 2 ) = − 1 + γ v π ( s 2 ) = 8 q π ( s 1 ; a 3 ) = 0 + γ v π ( s 3 ) = 9 q π ( s 1 ; a 4 ) = − 1 + γ v π ( s 1 ) = 6.2 q π ( s 1 ; a 5 ) = 0 + γ v π ( s 1 ) = 7.2 \begin{align*} q_π(s_1; a_1) =& −1 + γv_π(s_1) = 6.2\\ q_π(s_1; a_2) =& −1 + γv_π(s_2) = 8\\ q_π(s_1; a_3) =& 0 + γv_π(s_3) = 9\\ q_π(s_1; a_4) =& −1 + γv_π(s_1) = 6.2\\ q_π(s_1; a_5) =& 0 + γv_π(s_1) = 7.2 \end{align*} qπ(s1;a1)=qπ(s1;a2)=qπ(s1;a3)=qπ(s1;a4)=qπ(s1;a5)=−1+γvπ(s1)=6.2−1+γvπ(s2)=80+γvπ(s3)=9−1+γvπ(s1)=6.20+γvπ(s1)=7.2
发现a3的action value是最大的,因此我们应该更新策略到s3上。
当位于状态s1的处于策略 π 1 \pi_1 π1状态值,大于策略 π 2 \pi_2 π2状态值,则策略 π 1 \pi_1 π1是更好的策略。
贝尔曼最优公式数学表达式为:
v π ( s ) = m a x π ∫ a ∈ A π ( a ∣ s ) ∫ r ∈ R r f ( r ∣ s , a ) d r d a + γ ∫ a ∈ A f ( s ′ ∣ s , a ) ∫ s ′ ∈ S v π ( s ′ ) π ( a ∣ s ) d s ′ d a v_\pi(s) = \underset {\pi}{max} \int_{a\in A}\pi(a|s)\int_{r\in R}rf(r|s,a)drda+\gamma\int_{a\in A}f(s'|s,a)\int_{s'\in S}v_\pi(s')\pi(a|s)ds'da\\ vπ(s)=πmax∫a∈Aπ(a∣s)∫r∈Rrf(r∣s,a)drda+γ∫a∈Af(s′∣s,a)∫s′∈Svπ(s′)π(a∣s)ds′da
向量形式
V = m a x π R π + γ P π V V = \underset {\pi}{max} R_\pi+\gamma P_\pi V V=πmaxRπ+γPπV
v π ( s ) = m a x π ∫ a ∈ A π ( a ∣ s ) ∫ r ∈ R r f ( r ∣ s , a ) d r d a + γ ∫ a ∈ A f ( s ′ ∣ s , a ) ∫ s ′ ∈ S v π ( s ′ ) π ( a ∣ s ) d s ′ d a = m a x π ∫ a ∈ A π ( a ∣ s ) q ( s , a ) d a \begin{align*} v_\pi(s) =& \underset {\pi}{max} \int_{a\in A}\pi(a|s)\int_{r\in R}rf(r|s,a)drda+\gamma\int_{a\in A}f(s'|s,a)\int_{s'\in S}v_\pi(s')\pi(a|s)ds'da\\ =& \underset {\pi}{max} \int_{a\in A}\pi(a|s)q(s,a)da\\ \end{align*} vπ(s)==πmax∫a∈Aπ(a∣s)∫r∈Rrf(r∣s,a)drda+γ∫a∈Af(s′∣s,a)∫s′∈Svπ(s′)π(a∣s)ds′daπmax∫a∈Aπ(a∣s)q(s,a)da
m a x π ∫ a ∈ A π ( a ∣ s ) q ( s , a ) d a = m a x π q ( s , a ) \underset {\pi}{max} \int_{a\in A}\pi(a|s)q(s,a)da=\underset{\pi}{max}\ q(s,a) πmax∫a∈Aπ(a∣s)q(s,a)da=πmax q(s,a)
BOE(Bellman optimality equation)是一个contractive function,符合Contraction mapping theorem,便可以使用该定理求解。
首先建立q-value矩阵,对于这个例子,action value的值如下所示,则q-value代表对应状态和行动下的回报期望
a1 | a2 | a3 | a4 | a5 | |
---|---|---|---|---|---|
s1 | -1+ γ v s 1 \gamma v_{s1} γvs1 | -1+ γ v s 2 \gamma v_{s2} γvs2 | 0+ γ v s 3 \gamma v_{s3} γvs3 | -1+ γ v s 1 \gamma v_{s1} γvs1 | 0+ γ v s 1 \gamma v_{s1} γvs1 |
s2 | -1+ γ v s 2 \gamma v_{s2} γvs2 | -1+ γ v s 2 \gamma v_{s2} γvs2 | 1+ γ v s 4 \gamma v_{s4} γvs4 | 0+ γ v s 1 \gamma v_{s1} γvs1 | 0+ γ v s 2 \gamma v_{s2} γvs2 |
s3 | 0+ γ v s 1 \gamma v_{s1} γvs1 | 1+ γ v s 4 \gamma v_{s4} γvs4 | -1+ γ v s 3 \gamma v_{s3} γvs3 | -1+ γ v s 3 \gamma v_{s3} γvs3 | 0+ γ v s 3 \gamma v_{s3} γvs3 |
s4 | -1+ γ v s 2 \gamma v_{s2} γvs2 | -1+ γ v s 4 \gamma v_{s4} γvs4 | -1+ γ v s 4 \gamma v_{s4} γvs4 | 0+ γ v s 3 \gamma v_{s3} γvs3 | 1+ γ v s 4 \gamma v_{s4} γvs4 |
则 q-value table 为
q_table = np.array(
[
[-1, -1, 0, -1],
[-1, -1, 1, 0],
[0, 1, -1, -1],
[-1, -1, -1, 0],
]
)
求解 最大的 v v v和 π \pi π
import numpy as np
def p_under_a_matrix(v):
v = v.reshape(-1)
v = np.array(
[
[v[0], v[1], v[2], v[0], v[0]],
[v[1], v[1], v[3], v[0], v[1]],
[v[0], v[3], v[2], v[2], v[2]],
[v[1], v[3], v[3], v[2], v[3]],
]
)
return v
def max_v_and_pi(q_table, gamma, n_iter):
# solve BOE using Contraction mapping theorem
n = q_table.shape[0]
# 初始化 v0
v = np.random.rand(n).reshape(-1, 1)
for i in range(n_iter):
q_value = q_table + gamma * p_under_a_matrix(v)
v = np.max(q_value, axis=1).reshape(-1, 1)
pi = np.argmax(q_value, axis=1).reshape(-1, 1)
return pi, np.round(v)
max_v_and_pi(q_table, 0.9, 100)
max_v_and_pi(q_table, 0.9, 100)
输出
(
# 为a1,a2,a3,a4,a5的索引
(array([[2],
[2],
[1],
[4]], dtype=int64),
array([[ 9.],
[10.],
[10.],
[10.]]))
第一个矩阵为最优策略,如表所示
a1 | a2 | a3 | a4 | a5 | |
---|---|---|---|---|---|
s1 | √ \surd √ | ||||
s2 | √ \surd √ | ||||
s3 | √ \surd √ | ||||
s4 | √ \surd √ |
第二个矩阵为最优state value。
从s1出发,根据最优策略选择,用利用上一节的解析解确认一下状态值是否正确
R = np.array([0, 1, 1, 1]).reshape(-1, 1)
P = np.array(
[
[0, 0, 1, 0],
[0, 0, 0, 1],
[0, 0, 0, 1],
[0, 0, 0, 1],
]
)
closed_form_solution(R,P,0.9)
输出
array([[ 9.],
[10.],
[10.],
[10.]])
证明在100次迭代后获得了最优策略和最优状态值。
Mathematical Foundations of Reinforcement Learning,Shiyu Zhao