马尔可夫决策过程
马尔可夫决策过程
马尔可夫决策过程(Markov decision process,MDP)是强化学习的重要概念,当想使用强化学习解决实际问题时,第一步就是将实际问题抽象为马尔可夫决策过程,这个过程的目的是使当前分数更高。
马尔可夫过程
马尔可夫过程(Markov Process)是一种随机过程,它的特点是具有马尔可夫性质,也叫马尔可夫链(Markov chain)
马尔可夫过程一般由一个 < S , P > <S,P> <S,P>二元组来表示,其中 S S S是一个有限状态的列表, P ( s ‘ ∣ s ) P(s^`|s) P(s‘∣s)是一个状态转移矩阵,代表了状态 s s s到状态 s ‘ s^` s‘的概率
马尔可夫性质
马尔可夫性质是指,未来状态只依赖于当前状态,与过去状态无关,也可以说,当前状态只与上一个状态有关,公式为
P ( S t + 1 = s t + 1 ∣ S t = s t , . . . , S 0 = s 0 ) = P ( S t + 1 = s t + 1 ∣ S t = s t ) P(S_{t+1}=s_{t+1}|S_t=s_t,...,S_0=s_0) = P(S_{t+1}=s_{t+1}|S_t=s_t) P(St+1=st+1∣St=st,...,S0=s0)=P(St+1=st+1∣St=st)
马尔可夫的奖励过程
在马尔可夫过程(Markov reward process,MRP)加入奖励函数 r r r和折扣因子 γ γ γ,就是马尔可夫奖励过程,使用 < S , P , r , γ > <S,P,r,γ> <S,P,r,γ>构成。
S S S是一个有限状态的列表
P ( s ‘ ∣ s ) P(s^`|s) P(s‘∣s)是一个状态转移矩阵,代表了状态 s s s到状态 s ‘ s^` s‘的概率
r ( s ) r(s) r(s)是指转移到s状态可获得的奖励
γ γ γ是折扣因子,因为远期效益不确定,所以要对远期效益打折扣,当 γ γ γ接近0时,只考虑当前效益,当接近于1时,更关注长期的累计奖励。
回报
回报是在一个马尔可夫奖励过程中,综合奖励和远期效益给模型的回报。公式如下:
G t = R t + γ R t + 1 + γ 2 R t + 2 + . . . = ∑ k = t ∞ γ k R t + k G_t = R_t+γR_{t+1}+γ^2R_{t+2}+...=\sum_{k=t}^{\infty}γ^kR_{t+k} Gt=Rt+γRt+1+γ2Rt+2+...=∑k=t∞γkRt+k
价值函数
价值函数 V ( s ) V(s) V(s),价值函数是指一个状态的期望回报,是指当前状态下,未来所有马尔可夫链的回报的均值。公式 V ( s ) = E ( G t ∣ S t = s ) V(s) = E(G_t|S_t=s) V(s)=E(Gt∣St=s),展开为 V ( s ) = E ( r ( s ) + γ S t + 1 ∣ S t = s ) V(s) = E(r(s)+γS_{t+1}|S_t=s) V(s)=E(r(s)+γSt+1∣St=s)
可以得到 V ( s ) = r ( s ) + γ ∑ s ‘ ∈ S p ( s ‘ ∣ s ) V ( s ‘ ) V(s) = r(s)+γ\sum_{s^`\in S} p(s^`|s)V(s^`) V(s)=r(s)+γ∑s‘∈Sp(s‘∣s)V(s‘),价值函数不等于奖励,从公式可以看出价值函数由奖励得来。
代码实现,马尔可夫链的回报和价值
图如下
价值函数写成矩阵形式,推导可以得出以下式子, V = I V V = IV V=IV,其中这个I是对角线为1其余为0的单位矩阵
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) # 之前定义的列表 P 转换成一个 NumPy 数组rewards = [-1, -2, -2, 10, 1, 0] # 定义奖励函数,定义的是每个状态下的奖励函数
gamma = 0.5 # 定义折扣因子# 给定一条序列,计算从某个索引(起始状态)开始到序列最后(终止状态)得到的回报
# 观察公式,我们计算回报时,需要后面状态的回报,得从后往前算
def compute_return(start_index, chain, gamma):G = 0# 回报for i in range(len(chain),start_index,-1):G = G*gamma + rewards[chain[i-1]-1]return G# 一个状态序列,s1-s2-s3-s6
print("状态序列s1-s2-s3-s6")
chain = [1, 2, 3, 6]
start_index = 0
G = compute_return(start_index, chain, gamma)
print("根据本序列计算得到回报为:%s。" % G)def compute(P, rewards, gamma, states_num):''' 利用贝尔曼方程的矩阵形式计算解析解,states_num是MRP的状态数 '''rewards = np.array(rewards).reshape((-1, 1)) #将rewards写成列向量形式value = np.dot(np.linalg.inv(np.eye(states_num, states_num) - gamma * P),rewards)return valueV = compute(P, rewards, gamma, 6)
print("MRP中每个状态价值分别为\n", V)
马尔可夫决策过程
马尔可夫决策过程(Markov decision process,MDP),相对马尔可夫奖励过程,增加了执行动作a,在我看来MRP只是点明了奖励函数和价值函数,只是自发改变的随机过程,缺少决策来判断应该执行哪个行动来进行下一步,也就是缺少了获取最大奖励这个步骤,而马尔可夫决策过程是完全体(个人愚见),由 ⟨ S , A , P , r , γ ⟩ ⟨S,A,P,r,γ⟩ ⟨S,A,P,r,γ⟩组成。
S S S是状态的集合;
A \mathcal{A} A是动作的集合;
γ \gamma γ是折扣因子;
r ( s , a ) r ( s , a ) r(s,a)是奖励函数,此时奖励可以同时取决于状态s ss和动作a aa,在奖励函数只取决于状态s ss时,则退化为r ( s ) r(s)r(s)
P ( s ′ ∣ s , a ) P ( s ′ ∣ s , a ) P(s′∣s,a)是状态转移函数,表示在状态 s s s执行动作 a a a之后到达状态 s ′ s^{\prime} s′ 的概率。