【问题标题】:Access the next k elements in a for loop访问 for 循环中的下 k 个元素
【发布时间】:2021-09-24 05:21:19
【问题描述】:

我有一个强化学习游戏,其中两个代理相互交互。我现在想用 Python 解决以下问题。

我创建了一个 for-loop,它执行以下操作:

self.rewards_hist = []
self.number_episodes = 1000

def Game(self):
 
   for episode in range(self.number_episodes):

       doSomething()

       rewards = self.save_rewards()

       self.rewards_hist.append(rewards)

因此,self.rewards 我在t 获得奖励,在self.rewards_hist 我收到所有奖励的历史记录,因此我可以访问以前的奖励。

现在我想将此奖励与t + k 中的奖励进行比较,即我必须在迭代中等待k 剧集,直到我可以将当​​前奖励与即将到来的奖励进行比较。我知道在for-loop 中这不起作用,因为在当前迭代中无法访问下一个奖励。因此,我需要一个函数让我等待下一个k 奖励,然后才进行比较。

解决这个问题最简单的方法是什么?

【问题讨论】:

  • 我不明白这个问题。将刚刚计算的结果与尚未计算的结果进行比较在逻辑上是不可能的。在您真正拥有两个结果之前,您无法比较两个结果。那么为什么不等到 t + k,然后开始将新结果与您已经计算的旧结果进行比较呢?没有任何功能可以神奇地预见未来。
  • 感谢您的评论。我完全知道迭代中的比较不起作用(正如我在上面的文字中提到的那样)。我真正关心的是如何实现等待 t+k 集然后进行比较。

标签: python for-loop iteration reinforcement-learning next


【解决方案1】:

你已经一个等待下一个奖励的函数:它是你提供的函数。在迭代中再经过 k 步之后,您可以将最新结果 (t+k) 与之前的结果 (t) 进行比较。不是以前。让我们重写你的最后一段:

“现在我想将这个奖励(在时间 t)与上一个在 t - k 的奖励进行比较,即我必须回顾迭代中的 k 个情节,并将当前的奖励与以前的奖励。由于我在计算每个元素时一直在存储它,因此这只需要访问元素 self.rewards_hist[-k]。因此我已经拥有了我需要的所有信息。”

当然,迭代器确实看不到它尚未计算的元素。怎么可能是其他方式?唯一的解决方案是计算这些元素,然后将它们与过去计算的结果进行比较。您可以以任何您想要的形式将此信息呈现给最终用户;您可以编写一个打印语句,将 element[t] 与 element[t+k] 打印在同一行。在 print 语句触发的那一刻,您的迭代器已经在步骤 t+k。但最终用户并不知道这一点。

【讨论】:

    【解决方案2】:

    您可以为此使用实际的计数器:

    counter = 0
    for episode in range(self.number_episodes):
        doSomething()
        counter += 1
        if counter == k:
            counter = 0
            rewards = self.save_rewards()
            self.rewards_hist.append(rewards)
    

    或嵌套循环:

    for episode_batch in range(0, self.number_episodes-k+1, k):
        for episode in range(episode_batch, episode_batch+k):
            doSomething()
        rewards = self.save_rewards()
        self.rewards_hist.append(rewards)
    

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 2010-09-24
      • 2016-02-12
      • 2020-04-14
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 2016-04-01
      相关资源
      最近更新 更多