强化学习原理python篇03——贝尔曼最优公式

强化学习原理python篇03——贝尔曼最优公式)

  • 例子
    • 求解状态值
    • 求解行动值
  • 贝尔曼最优公式(Bellman optimality equation)
    • 定义
    • 求解
      • Contraction mapping theorem
      • 步骤
      • 例子
  • Ref

本章全篇参考赵世钰老师的教材 Mathmatical-Foundation-of-Reinforcement-Learning Optimal State Values and Bellman Optimality Equation章节,请各位结合阅读,本合集只专注于数学概念的代码实现。

例子

强化学习原理python篇03——贝尔曼最优公式_第1张图片
对于网格世界这样一个例子,其贝尔曼公式中的R和P为

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.21+γvπ(s2)=80+γvπ(s3)=91+γvπ(s1)=6.20+γvπ(s1)=7.2
发现a3的action value是最大的,因此我们应该更新策略到s3上。

贝尔曼最优公式(Bellman optimality equation)

当位于状态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)=πmaxaAπ(as)rRrf(rs,a)drda+γaAf(ss,a)sSvπ(s)π(as)dsda
向量形式
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)==πmaxaAπ(as)rRrf(rs,a)drda+γaAf(ss,a)sSvπ(s)π(as)dsdaπmaxaAπ(as)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) πmaxaAπ(as)q(s,a)da=πmax q(s,a)

Contraction mapping theorem

强化学习原理python篇03——贝尔曼最优公式_第2张图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
BOE(Bellman optimality equation)是一个contractive function,符合Contraction mapping theorem,便可以使用该定理求解。

步骤

  • 1、初始化 v k ( s i ) v_k(s_i) vk(si)
  • 2、计算 q k ( s i , a ) = r π ( s i ∣ a ) + γ ∫ s j ∈ S v π ( s j ) p π ( s j ∣ s i , a ) d q_k(s_i,a)=r_π(s_i|a)+\gamma \int_{s_j\in S}v_\pi(s_j) p_\pi(s_j|s_i,a)d qk(si,a)=rπ(sia)+γsjSvπ(sj)pπ(sjsi,a)d
  • 3、计算s状态贪婪策略 π k + 1 \pi _{k+1} πk+1
    • π k + 1 ( a ∣ s ) = { 1 ,   a = a k ∗ ( s ) 0 ,   a ≠ a k ∗ ( s ) \pi_{k+1}(a|s)=\left \{\begin{matrix}1,\ a=a^*_k(s) \\0,\ a\ne a^*_k(s)\end{matrix} \right . πk+1(as)={1, a=ak(s)0, a=ak(s),where a = a r g m a x a   q k ( s , a ) a = \underset{a}{argmax} \ q_k(s,a) a=aargmax qk(s,a)
  • 4、 v k + 1 ( s ) = m a x   q k ( s , a ) v_{k+1}(s)= max\ q_k(s,a) vk+1(s)=max qk(s,a)
  • 5、迭代至收敛

例子

强化学习原理python篇03——贝尔曼最优公式_第3张图片
首先建立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次迭代后获得了最优策略和最优状态值。

Ref

Mathematical Foundations of Reinforcement Learning,Shiyu Zhao

你可能感兴趣的:(强化学习,python,机器学习,开发语言)