我正在解决麻省理工学院强化学习实验室的问题,并被奖励函数卡住了。特定的代码块是:https://colab.research.google.com/github/aamini/introtodeeplearning/blob/master/lab3/solutions/RL_Solution.ipynb#scrollTo=5_Q2OFYtQ32X&line=19&uniqifier=1
相关代码的更简单版本是:
import numpy as np
rewards=[0.,0,0,0,0,1]
discounted_rewards = np.zeros_like(rewards)
R = 0
for t in reversed(range(0, len(rewards))):
# update the total discounted reward
R = R * .95 + rewards[t]
discounted_rewards[t] = R
discounted_rewards它的输出为:
array([0.77378094, 0.81450625, 0.857375, 0.9025, 0.95 ,1.])提供的解释是,我们希望鼓励尽早获得奖励。在for循环中使用reversed对此有何帮助?
发布于 2020-03-17 18:13:20
反转是必要的,以便每个奖励乘以折扣因子,其中x是奖励远离当前的时间步数。此外,由于这是一个累积奖励,它会将下一个奖励添加到前一个奖励中。如果没有反转,这是不可能的。
相反,最后一个奖励是将添加到R中的第一个奖励,然后在每次迭代中,随着循环的继续,它将乘以0.95作为奖励事件之前发生的时间步数。
该循环的作用如下:
R = 0
R += 0.95 ** 5 * 1
R += 0.95 ** 4 * 0
R += 0.95 ** 3 * 0
R += 0.95 ** 2 * 0
R += 0.95 ** 1 * 0
R += 0编辑:
你得到的输出是累积的折扣奖励。输出列表中的第一个索引意味着您的代理在该时间步长具有0.7737的累积折扣奖励,用于以下操作状态元组。然后你进入未来(增加列表指数),你的折扣奖励将更高,因为你接近净奖励1(赢得游戏)。
https://stackoverflow.com/questions/60720154
复制相似问题