马尔科夫决策过程


1、马尔科夫过程(Markov Process)

1)随机过程(Stochastic Process)

随机过程的研究对象是随时间演变的随机现象

随机过程中,随机现象在某时刻 t t t 的取值被称为 S t S_t St ,所有可能的状态组成状态集合 S S S,随机现象研究的便是状态的变化过程。

在某时刻 t t t 的状态 S t S_t St 通常取决于 t t t 时刻之前的状态,将已知历史信息 S 1 , . . . , S 2 S_1,...,S_2 S1,...,S2 时下一个时刻状态 S t + 1 S_{t+1} St+1 的概率表示为 P ( S t + 1 ∣ S 1 , . . . , S t ) P(S_{t+1} | S_1,...,S_t) P(St+1S1,...,St)

2)马尔科夫性质(Markov Property)

当且仅当某时刻的状态只取决于上一时刻的状态,则称这个随机过程具有马尔科夫性质。公式: P ( S t + 1 ∣ S t ) = P ( S t + 1 ∣ S 1 , . . . , S t ) P(S_{t+1} | S_t) = P(S_{t+1} | S_1,...,S_t) P(St+1St)=P(St+1S1,...,St)

3)马尔科夫过程(Markov Process)或被称为马尔科夫链(Markov Chain)

通常使用元组 < S , P > <S,P> <S,P> 描述一个马尔科夫过程,其中 S S S 表示有限数量的状态合集, P P P 是状态转移矩阵(State Transition Matrix)

假设有 n 个状态 S = { s 1 , s 2 , . . . , S n } S = \{s_1,s_2,...,S_n\} S={s1,s2,...,Sn},状态转移矩阵 P P P 定义了所有状态对之间的转移概率:
在这里插入图片描述
矩阵 P P P 中第 i 行第 j 列的元素 p ( s j ∣ s i ) = P ( S t + 1 = s j ∣ S t = s i ) p(s_j | s_i) = P(S_{t+1} = s_j | S_t = s_i ) p(sjsi)=P(St+1=sjSt=si)表示从状态 s i s_i si转移到状态 s j s_j sj概率,称 p ( s ′ ∣ s ) p(s^{'} | s) p(ss) 为状态转移函数。

从某个状态出发,到达其他状态的概率和必须为1,即状态转移矩阵P的每一行和为1

简单例子:
在这里插入图片描述
从上图可以得到马尔科夫过程的状态转移矩阵 P P P
在这里插入图片描述
给定一个马尔科夫过程,就可以从某个状态出发,根据它的状态转移矩阵生成一个序列(episode),这个步骤也被叫做采样(sample)

2、马尔科夫奖励过程(Markov Reward Process)

在上述马尔科夫过程中加入奖励函数(r)和折扣因子( γ \gamma γ)就是马尔科夫奖励过程

马尔科夫奖励过程是一个四元组: < S , P , r , γ > <S,P,r,\gamma> <S,P,r,γ>

1)回报(Return)

从某一状态 S t S_t St 开始直到终止状态时所有奖励的衰减之和称为回报 G t G_t Gt
在这里插入图片描述

在上面的例子中加入奖励,就得到了一个马尔科夫奖励过程,比如进入状态 S 2 S_2 S2得到 -2 分,进入 S 6 S_6 S6表示终止
在这里插入图片描述

选取 s 1 s_1 s1 为起始状态,设置 γ = 0.5 \gamma = 0.5 γ=0.5,采样到一条状态序列为: s 1 − s 2 − s 3 − s 6 s_1 - s_2 - s_3 - s_6 s1s2s3s6,于是: G 1 = − 1 + 0.5 × ( − 2 ) + ( 0.5 ) 2 × ( − 2 ) + ( 0.5 ) 3 × 0 = − 2.5 G_1 = -1 + 0.5 \times (-2) + (0.5)^2 \times (-2) + (0.5)^3 \times 0=-2.5 G1=1+0.5×(2)+(0.5)2×(2)+(0.5)3×0=2.5

Python代码实现:

# 马尔科夫奖励过程
import numpy as np
np.random.seed(0)

# 状态转移概率矩阵 P
P = [
    [0.9, 0.1, 0.0, 0.0, 0.0, 0.0],
    [0.5, 0.0, 0.5, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.6, 0.0, 0.4],
    [0.0, 0.0, 0.0, 0.0, 0.3, 0.7],
    [0.0, 0.2, 0.3, 0.5, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
]

P = np.array(P)
# print('状态转移概率矩阵 P.shape = {}'.format(P.shape))

# 定义奖励
rewards = [-1,-2,-2,10,1,0]
# 定义折扣因子
gamma = 0.5

# 给定一条序列,计算从某个某个索引开始到序列最后得到的回报
def compute_return(start_index,chain,gamma=0.5):
    G = 0
    for i in reversed(range(start_index,len(chain))):
        G = gamma * G + rewards[chain[i] - 1]
    return G

给定一个序列,调用函数

# 一个状态序列:s1 - s2 - s3 - s6
chain = [1,2,3,6]
start_index = 0
G = compute_return(start_index,chain)
G

2)价值函数(Value Function)

一个状态的期望回报被称为这个状态的价值(value),所有状态的价值组成为价值函数,价值函数的输入为某个状态,输出为这个状态的价值

价值函数: V ( s ) = E [ G t ∣ S t = s ] V(s) = E[G_t | S_t = s] V(s)=E[GtSt=s]
在这里插入图片描述
对于上式:
在这里插入图片描述
于是,可以得到贝尔曼方程(Bellman Equation)
在这里插入图片描述
矩阵形式表示:
在这里插入图片描述
在这里插入图片描述

python实现:

# 利用贝尔曼方程矩阵形式计算解析解,states_num是MRP的状态数
def compute(P,rewards,states_num,gamma=0.5,):
    # rewards写成列向量形式
    rewards = np.array(rewards).reshape((-1,1))
    value = np.dot(np.linalg.inv(np.eye(states_num,states_num)-gamma*P),rewards)
    return value

V = compute(P,rewards,6)
print("MRP中每个状态价值分别为:\n",V)
-------------------------------------------------
MRP中每个状态价值分别为:
 [[-2.01950168]
 [-2.21451846]
 [ 1.16142785]
 [10.53809283]
 [ 3.58728554]
 [ 0.        ]]

3、马尔科夫决策过程(Markov Decision Process)

在马尔科夫奖励过程中加入动作,就是马尔科夫决策过程,实质上是一个五元组: < S , A , p , r , γ > <S,A,p,r,\gamma> <S,A,p,r,γ>

  • S S S 是状态的集合
  • A A A 是动作的集合
  • γ \gamma γ 是折扣因子
  • r ( s , a ) r(s,a) r(s,a) 是奖励函数,此时奖励同时取决于 s 和 a
  • p ( s ′ ∣ s , a ) p(s'|s,a) p(ss,a) 是状态转移函数,表示在状态 s 执行动作 a 之后到达状态 s’ 的概率

在这里插入图片描述
智能体根据当前状态 S t S_t St选择动作 A t A_t At;对于状态 S t S_t St和动作 A t A_t At,MDP根据奖励函数和状态转移函数得到 S t + 1 S_{t+1} St+1 R t R_t Rt并反馈给智能体

智能体的目标是最大化得到的累计奖励,智能体根据当前状态从动作集合 A 中选择一个动作的函数,称为策略

1)策略(Policy)

策略通常用字母 π \pi π 表示。

策略 π ( s ∣ a ) = p ( A t = a ∣ S t = s ) \pi(s|a) = p(A_t = a | S_t = s) π(sa)=p(At=aSt=s)是一个函数,表示在输入状态s情况下采取动作a的概率。

  • 确定性策略:它在每个状态时只输出一个确定的动作,即只有该动作的概率为1,其他动作的概率为0
  • 随机性策略:它在每个状态时输出的是关于动作的分布,然后根据该分布进行采样就可以得到一个动作

2)状态价值函数(State-value Function)

使用 V π ( s ) V^{\pi}(s) Vπ(s) 表示在MDP中基于策略 π \pi π 的状态价值函数,定义为从状态 s 出发遵循策略 π \pi π 能获得的期望回报。
在这里插入图片描述

3)动作价值函数(Action-value Function)

使用 Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a) 表示在MDP遵循策略 π \pi π时,对当前状态 s 执行动作 a 得到的期望回报
在这里插入图片描述

状态价值函数与动作价值函数之间的关系:

在使用策略 π \pi π 中,状态 s 的价值等于在该状态下基于策略 π \pi π 采取所有动作价值与相应概率相乘再求和的结果:
在这里插入图片描述
在使用策略 π \pi π 中,状态 s 下采取动作 a 的价值等于即时奖励加上经过衰减后的所有可能的下一个状态价值与相应的状态转移概率的乘积:
在这里插入图片描述

4)贝尔曼期望方程(Bellman Expectation Equation)

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值