原文链接:https://blog.csdn.net/qq_27514521/article/details/81146632 Q-learning和sarsa都是利用时间差分目标来更新当前行为值函数的。唯一不同的是在Q-learning中,行动策略(产生数据的策略)和要评估的策略不是一个策略,因此称之为异策略(off-policy),而在sarsa中,正好相反,也就是行动策略(产生数据的策略)和要评估的策略是一个策略,称之为同策略(on-policy)。下面从算法的角度解释其中的区别。
如上图所示,为sarsa的算法流程图。
第一个repeat循环表示每一幕(产生一轮数据或者对游戏来说是玩一局完整的游戏)。首先初始化状态,然后根据网络结构和策略选择一个动作,下面的循环是对当前幕来说,划个重点!!这里和Q-learning有个很大的区别就是这里的选择策略A在下面循环的外面,因为对当前幕的循环来说,选择策略只需要最开始选择一次就行了,因为同策略(on-policy)的关系,行动策略(对应于当前的选择策略)和要评估的策略(下面进行更新的策略)是一个策略,所以下一轮的行动策略会被要评估的策略赋值,也就不需要再初始化了。然后下面就是选择完策略之后,执行策略,得到当前价值,观测到下一个状态。在状态处,同样根据Q网络结构和策略选择一个动作,这样就得到了一个完整的数据序列,这也就是sarsa名字的由来。
然后根据公式
更新Q网络。
然后更新,。
下面介绍Q-learning算法
Q-learning算法流程图如上所示。
首先和sarsa一样,对每一幕进行循环,然后初始化状态。接下来的不同之处在于Q-learning的初始化选择动作A在当前幕循环的里面,上面也解释到了sarsa中为啥在外面的原因,这里选择动作在循环里面就是因为在异策略(off-policy)的情况下,行动策略和下面的要评估的策略不是一个策略,不能通过要评估的策略进行更新,所以选择策略必须在循环里面,每轮循环都进行赋值。选择完策略之后,执行策略,得到当前价值,观测到下一个状态。注意!!!!这里并没有和sarsa算法一样,对当前的状态S'更具Q网络和选择一个策略,而是根据当前Q网络计算出在状态S'处Q值最大的策略进行更新。即如下的公式
这里的要评估的策略是使得对当前网络来说,在状态处网络值最大的动作,与下一轮循环所选择的行动策略不是一个策略(即异策略)
所以接下来只需要更新。