ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

马尔科夫决策过程

2021-11-24 22:05:34  阅读:193  来源: 互联网

标签:状态 0.0 0.5 决策 St 马尔科夫 Markov 过程


文章目录


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+1​∣S1​,...,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+1​∣St​)=P(St+1​∣S1​,...,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(sj​∣si​)=P(St+1​=sj​∣St​=si​)表示从状态 s i s_i si​转移到状态 s j s_j sj​概率,称 p ( s ′ ∣ s ) p(s^{'} | s) p(s′∣s) 为状态转移函数。

从某个状态出发,到达其他状态的概率和必须为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 s1​−s2​−s3​−s6​,于是: 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[Gt​∣St​=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(s′∣s,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) π(s∣a)=p(At​=a∣St​=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)

在这里插入图片描述

标签:状态,0.0,0.5,决策,St,马尔科夫,Markov,过程
来源: https://blog.csdn.net/lesileqin/article/details/121522401

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有