SARSA 的更新方程为. 考虑一下:我采取行动这导致了终端状态。现在我的将是终端状态之一。所以...
直观地说,采取行动有什么意义当环境已经结束?或者这是你刚刚做的事情?
一旦达到一个终端状态-动作对,您就更新之前的状态-动作对,然后重新开始游戏循环。但这意味着终端状态-动作对 (在我的例子中)永远不会更新。所以,如果你的初步估计错了,您将永远无法修复它,这将是非常有问题的。(并且您不能将所有终端值设置为零,因为您使用的是函数逼近器)
那么,我该如何解决这些问题呢?
SARSA 的更新方程为. 考虑一下:我采取行动这导致了终端状态。现在我的将是终端状态之一。所以...
直观地说,采取行动有什么意义当环境已经结束?或者这是你刚刚做的事情?
一旦达到一个终端状态-动作对,您就更新之前的状态-动作对,然后重新开始游戏循环。但这意味着终端状态-动作对 (在我的例子中)永远不会更新。所以,如果你的初步估计错了,您将永远无法修复它,这将是非常有问题的。(并且您不能将所有终端值设置为零,因为您使用的是函数逼近器)
那么,我该如何解决这些问题呢?
- 直观地说,当环境已经结束时,采取行动 A' 有什么意义?
这是没有意义的,因为一旦代理达到终端状态,什么都不会发生。但是,它通常被建模为“吸收状态”,其中动作不重要(null或忽略值),其价值定义为.
而且您不能将所有终端值设置为零,因为您使用的是函数逼近器
根据定义,该值为零。没有必要对其进行近似。因此,不要将函数逼近器用于终止状态中的动作值。什么时候是终端,更新变为:
查看 Q 学习的任何实现,您将看到更新值的条件计算,它使用上述逻辑的一些变体,当是终端。例如,对于 OpenAI Gym 环境,它将使用done标志。