如何用Numpy生成gamma^t数组以计算Gridworld RL回报
解决Gridworld强化学习中折扣回报的计算问题
直接用Numpy生成gamma的幂次数组就行,比logspace直观多了,给你两种实用方法:
方法一:最简洁的实现
利用np.arange生成从0开始的指数序列,直接计算gamma的幂:
import numpy as np # 示例奖励数组(替换成你的实际数据) rewards = np.array([1, 0, -1, 2]) gamma = 0.9 # 折扣因子 # 生成[gamma^0, gamma^1, gamma^2, ..., gamma^(n-1)] gamma_pows = gamma ** np.arange(len(rewards)) # 逐元素相乘得到折扣后的奖励数组 discounted_rewards = rewards * gamma_pows # 计算总回报 total_return = np.sum(discounted_rewards)
方法二:用累积乘积实现
如果想换一种思路,也可以用np.cumprod生成幂次序列:
# 先生成全为gamma的数组,开头插入1,再做累积乘积 gamma_pows = np.cumprod(np.insert(np.full(len(rewards)-1, gamma), 0, 1)) discounted_rewards = rewards * gamma_pows total_return = np.sum(discounted_rewards)
关于你用Logspace效果不好的原因
np.logspace其实也能实现,但需要注意参数设置:必须指定base=gamma,而且起始/结束指数要对应正确。比如你的奖励数组长度为n,要写np.logspace(0, len(rewards)-1, len(rewards), base=gamma),如果漏了base参数,默认是10为底,结果肯定不对。不过还是上面的方法更直观,不容易出错。
内容的提问来源于stack exchange,提问作者Alenna Spiro
相关产品推荐
相关产品推荐

