在实施 SARSA 时,我应该如何处理终端状态下的动作选择?

人工智能 强化学习 执行 萨尔萨
2021-11-07 00:18:41

我最近开始学习强化学习。目前,我正在尝试实现SARSA 算法但是,我不知道如何处理Q(s,a), 什么时候s是终端状态。首先,在这种状态下没有可供选择的动作。二、这Q-factor 也永远不会更新,因为这一集在s到达了。我应该初始化吗Q(s,a)到随机数以外的东西?或者我应该忽略Q-因素并简单地提供奖励r进入更新?

2个回答

价值Q(s,  )应始终实现为简单地等于0对于任何终端状态s(点而不是动作作为第二个参数表明我刚刚写的内容应该适用于任何动作,只要s是终端)。

通过剖析更新规则中不同术语的含义,更容易理解为什么会出现这种情况:

Q(s,a)Q(s,a)+α[r+γQ(s,a)Q(s,a)]

在此更新中,红色术语Q(s,a)(出现两次)是我们对价值的旧估计Q(s,a)处于状态s并执行动作a. 蓝色术语r+γQ(s,a)是估计相同数量的不同版本Q(s,a). 假设第二个版本稍微准确一些,因为它不“只是”一个预测,而是以下的组合:

  • 我们真正观察到的东西:r, 加上
  • 一个预测:γQ(s,a)

在这里,r组件是我们在执行后观察到的即时奖励as, 接着Q(s,a)是我们期望之后仍然收集的所有内容(即,在执行之后as并过渡到s)。

现在,假设s是一个终结状态,我们仍然期望在同一集中在未来收集什么奖励?自从s是终局,并且这一集已经结束,只能有一个正确答案;我们希望准确收集0未来的奖励。

从您链接到的算法的描述中,它说“重复直到 s 是终端”。所以你会在那个时候结束这一集,你的直觉是成立的。

实际上,如果一个人正在实现一个奖励功能,其中特定奖励与剧集的结尾相关联,例如“r(机器人撞墙)= -100”,那么可以想象在此之后有一个终端状态' wall hit' 状态,因此代理可以看到此奖励。然后这一集将处于终止状态,因此将结束。