【问题标题】:Reward function for learning to play Curve Fever game with DQN学习使用 DQN 玩 Curve Fever 游戏的奖励功能
【发布时间】:2017-10-03 21:27:53
【问题描述】:

我制作了一个简单版本的 Curve Fever,也称为“Achtung Die Kurve”。我希望机器弄清楚如何以最佳方式玩游戏。我从一些使用 Google 的 Tensorflow 制作的 Atari 游戏示例中复制并稍微修改了现有 DQN。

我很想找出一个合适的奖励函数。目前,我使用这个奖励设置:

  • 0.1 每帧不崩溃
  • -500 每次崩溃

这是正确的方法吗?我需要调整值吗?还是我需要一种完全不同的方法?

【问题讨论】:

  • 你设法让 DQN 工作了吗?
  • 是的,我实现了如下所述的评分。
  • 所以 -1 表示死亡,+1 表示杀戮。你有没有使用任何小的常数值来生存?
  • 我首先使用一个小常数作为幸存者的奖励,但结果并不如我所愿。请记住,训练这样的网络可能需要几个晚上才能取得任何积极的结果。

标签: machine-learning tensorflow deep-learning reinforcement-learning q-learning


【解决方案1】:

-500 的奖励可以摧毁你的网络。您应该将奖励缩放到 1 到 -1 之间的值。 (也在 -1 和 1 或 0 和 1 之间缩放输入图像)。

只要给你的网络崩溃奖励-1,一旦敌人崩溃就奖励+1。在没有敌人的情况下,坠毁奖励 -1 就足够了。在某些情况下(例如当网络必须在两次不可避免的崩溃之间做出决定时,其中一个会比另一个发生得更快),拥有一个小的持续积极的生活奖励可能是有益的,但它也会使 Q 函数的学习更加复杂。您可以尝试有无持续奖励,看看哪种效果最好。

不可避免的崩溃的例子也说明了为什么你不应该使用小的负生活奖励。在这种情况下,网络会选择最快崩溃的路径,而在这种情况下,尽可能延迟崩溃是更好的策略。

【讨论】:

    【解决方案2】:

    当奖励函数准确地编码您希望代理追求的目标时,这是最好的。在Curve Fever中,目标是成为最后一个活着的玩家。如果您使用的奖励函数只是为留在游戏中提供奖励,那么最好的策略是无限期地退出游戏。您可能希望代理尽快获胜,因此您实际上应该在每个时间步给予一个小的负奖励,并为赢得一轮比赛给予一些正奖励。这是一个快点赢奖励功能。

    【讨论】:

    • 这是真的。但是我要实现的第一件事就是让agent在世界上独处,让它不撞到自己的尾巴上。我对活着给予积极的奖励,对崩溃给予重罚,但我不确定这是不是正确的做法。
    猜你喜欢
    • 2020-05-16
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多