[TOC]
马尔科夫奖励过程
计算每个一条状态的回报
状态转移矩阵 $P[i][j]$ 表示状态 $S_i$ 转移到状态 $S_j$ 的概率
状态奖励 $R[i]$ 表示进入状态 $S_i$ 得到的奖励
$G(S_t)$ 表示当前轨迹下 $S_t$ 的回报
若一条轨迹 $s_1\rightarrow s_2\rightarrow s_3\rightarrow s_6$ ,计算 $s_1$ 的回报 $G_1=-1+0.5\times (-2)+0.5^2\times (-2)=-2.5$
1 | import numpy as np |
计算一个状态的价值的解析解
1 | def compute(P:np.ndarray, rewards:list[float], gamma:float, states_num:int) -> float: |
马尔科夫决策过程
共5个状态 $\{s_1,s_2,\cdots,s_5\}$
每个状态的动作空间用实线表示
- $\mathcal{A}(s_1)$ :$\{保持s_1,前往s_2\}$
- $\mathcal{A}(s_2)$ :$\{前往s_1,前往s_3\}$
- $\mathcal{A}(s_3)$ :$\{前往s_4,前往s_5\}$
- $\mathcal{A}(s_4)$ :$\{概率前往,前往s_5\}$
- $\mathcal{A}(s_5)$ :$\{\}$
奖励:在确定性环境中,相当于已知奖励函数 $R(s,a)$ ,即 状态-动作 对的奖励期望已知
- $R(s_4,概率前往)=1$ ,$R(s_4,前往s_5)=10$
策略:
- 随机策略,每个状态下,智能体会以同样的概率选取动作空间中的每个动作
- 一个非随机的策略
上述MDP表示为
1 | S = ["s1", "s2", "s3", "s4", "s5"] # 状态集合 |
解析解——MDP转化为MRP计算策略的状态价值函数
根据策略对所有动作的奖励 $r(s,a)$ 进行加权,得到的奖励和 $r’(s)$ 就是一个MRP在该状态下的奖励
根据策略计算状态转移 $P(s’\vert s,a)$ 的加权和,得到MRP的状态转移 $P(s’\vert s)$
相当于构建MRP:$<\mathcal{S},\mathcal{R’},\mathcal{P}’,\gamma>$ ,调用MRP解析解计算函数 compute()
得到状态价值的解析解
1 | gamma = 0.5 |
在得到状态价值的解析解后,可利用 $Q=f(V)$ 计算动作价值
MC方法计算状态价值
重复随机采样,用经验均值代替期望
预测问题:用策略 $\pi$ 在MDP上采样很多条序列,计算从这个状态出发的回报的期望
一条轨迹同一状态多次出现的2中处理方式
- 每出现一次,就以出现时刻为起点计算一次回报,相当于一条轨迹可能得到同一状态的多个回报
- 只计算第一次出现后续的回报,相当于一条轨迹只能得到一个状态的一个回报
对轨迹采样
1 | np.random.seed(0) |
计算轨迹回报的经验均值
1 | # 对所有采样序列计算所有状态的价值 |
可以看到用蒙特卡洛方法估计得到的状态价值和我们用 MRP 解析解得到的状态价值是很接近的
占用度量判断策略差异
不同策略的价值函数不同,因为对于同一个MDP $<\mathcal{S},\mathcal{A},\mathcal{P},\mathcal{R},\gamma>$ ,不同策略访问到的 状态-动作 对的占用度量是不同的
占用度量是衡量一个 状态-动作 对在策略的数据分布中所占的比重
智能体分别以策略 $\pi_1$ 和 $\pi_2$ 与同一MDP进行交互,分别得到其占用度量
给定一个占用度量 $\rho(s,a)$ ,则生成该占用度量的唯一策略是
也就是说,一个策略由一个占用度量唯一标识
1 | def occupancy(episodes:list[list], s:str, a:str, timestep_max:int, gamma:float) -> float: |