首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么打折奖励函数是反向的?

为什么打折奖励函数是反向的?
EN

Stack Overflow用户
提问于 2020-03-17 18:10:05
回答 1查看 349关注 0票数 1

我正在解决麻省理工学院强化学习实验室的问题,并被奖励函数卡住了。特定的代码块是:https://colab.research.google.com/github/aamini/introtodeeplearning/blob/master/lab3/solutions/RL_Solution.ipynb#scrollTo=5_Q2OFYtQ32X&line=19&uniqifier=1

相关代码的更简单版本是:

代码语言:javascript
复制
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

它的输出为:

代码语言:javascript
复制
array([0.77378094, 0.81450625, 0.857375, 0.9025, 0.95 ,1.])

提供的解释是,我们希望鼓励尽早获得奖励。在for循环中使用reversed对此有何帮助?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-17 18:13:20

反转是必要的,以便每个奖励乘以折扣因子,其中x是奖励远离当前的时间步数。此外,由于这是一个累积奖励,它会将下一个奖励添加到前一个奖励中。如果没有反转,这是不可能的。

相反,最后一个奖励是将添加到R中的第一个奖励,然后在每次迭代中,随着循环的继续,它将乘以0.95作为奖励事件之前发生的时间步数。

该循环的作用如下:

代码语言:javascript
复制
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(赢得游戏)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60720154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档