分类目录:《深入理解强化学习》总目录
在文章《深入理解强化学习——马尔可夫决策过程:占用度量-[基础知识]》我们介绍了占用度量的基础知识,本文我们编写代码来近似估计占用度量。这里我们采用近似估计,即设置一个较大的采样轨迹长度的最大值,然后采样很多次,用状态动作对出现的频率估计实际概率。
def occupancy(episodes, s, a, timestep_max, gamma):''' 计算状态动作对(s,a)出现的频率,以此来估算策略的占用度量 '''rho = 0total_times = np.zeros(timestep_max) # 记录每个时间步t各被经历过几次occur_times = np.zeros(timestep_max) # 记录(s_t,a_t)=(s,a)的次数for episode in episodes:for i in range(len(episode)):(s_opt, a_opt, r, s_next) = episode[i]total_times[i] += 1if s == s_opt and a == a_opt:occur_times[i] += 1for i in reversed(range(timestep_max)):if total_times[i]:rho += gamma**i * occur_times[i] / total_times[i]return (1 - gamma) * rhogamma = 0.5
timestep_max = 1000episodes_1 = sample(MDP, Pi_1, timestep_max, 1000)
episodes_2 = sample(MDP, Pi_2, timestep_max, 1000)
rho_1 = occupancy(episodes_1, "s4", "概率前往", timestep_max, gamma)
rho_2 = occupancy(episodes_2, "s4", "概率前往", timestep_max, gamma)
print(rho_1, rho_2)
输出:
0.112567796310472 0.23199480615618912
通过以上结果可以发现,不同策略对于同一个状态动作对的占用度量是不一样的。
参考文献:
[1] 张伟楠, 沈键, 俞勇. 动手学强化学习[M]. 人民邮电出版社, 2022.
[2] Richard S. Sutton, Andrew G. Barto. 强化学习(第2版)[M]. 电子工业出版社, 2019
[3] Maxim Lapan. 深度强化学习实践(原书第2版)[M]. 北京华章图文信息有限公司, 2021
[4] 王琦, 杨毅远, 江季. Easy RL:强化学习教程 [M]. 人民邮电出版社, 2022