我正在为Wumpus 游戏编写 DQN 代理。
训练 Q 网络(目标网络和策略)的奖励函数是否与游戏的分数相同,即捡到金币 +1000,掉入坑中死于 wumpus 时 -1000,每步 -1?
这自然是累积的,因为在代理采取的每个动作之后分数都会发生变化。或者,是否只是赢+1,输-1,所有其他情况下都是0?
我正在为Wumpus 游戏编写 DQN 代理。
训练 Q 网络(目标网络和策略)的奖励函数是否与游戏的分数相同,即捡到金币 +1000,掉入坑中死于 wumpus 时 -1000,每步 -1?
这自然是累积的,因为在代理采取的每个动作之后分数都会发生变化。或者,是否只是赢+1,输-1,所有其他情况下都是0?
当您为代理设定目标时,奖励功能由您决定。
如果目标是尽可能高地得分,那么在结束游戏之前,使用得分。如果您使用神经网络,您可能希望降低分数,以防止在学习的早期阶段需要处理非常大的错误值。
如果目标是赢得比赛,而您不关心比分,则使用赢/输最终结果。我对游戏不熟悉,但如果有可能赢得游戏 - 例如到达出口 - 而不是收集所有金币,那么代理可能会选择这样做,如果它减少了失败的机会。
第二种选择对代理人来说更难评估。您可能希望当前分数成为状态变量之一,因为该分数可能与赢/输相关。
大多数电脑游戏都是围绕给出一个数字分数作为人类游戏的反馈而设计的,有高分表,如果玩家获得更多积分则被认为“更好”等。如果你希望你的代理以相同的方式竞争,那么直接使用分数将有助于实现这一目标。
奖励函数属于环境,它是代理在给定状态下探索世界的唯一方式。
如果我们想让代理做一些具体的事情,我们必须以某种方式为它提供奖励,使其能够实现我们的目标。因此,奖励函数准确地指示确切的行为非常重要。
根据您的目标,您可以构建函数,以便代理尽可能快地完成游戏,或收集最高分。
例如,某些奖励函数可能会导致代理自杀,以避免将来以负奖励的形式进行更严厉的惩罚(例如,如果步骤奖励非常小)。或者如果掉坑惩罚非常大,它会走最安全的方式而不收集黄金。换句话说,你应该尝试你的奖励函数来找到一个权衡。
查看此视频以了解其背后的更多直觉。