接着介绍另外一种和Q-Learning算法很相似的强化学习算法—SARSA算法(小冰插嘴:莎莎算法,好美的名字)。

这个算法的基本思路和Q-Learning算法一样,也是在智能体的行动过程中不断地更新、优化Q-Table,主要区别在于其中采用了不同的评估策略。

11.5.1 异策略和同策略

刚才说过什么是异策略,有异策略就有同策略(on-policy)。看强化学习算法是异策略还是同策略,主要是看行动策略和评估策略是不是一个策略。

■行动策略,指的是智能体选择下一个动作时使用的策略。

■评估策略,指的是接收了环境反馈,更新Q-Table值所用的策略。

我们知道Q-Learning算法是异策略的,因为在Q-Learning中行动策略是ε-Greedy策略,而更新Q-Table的策略是贪心策略(在计算下一状态的预期收益时使用了max函数,直接选择最优动作进行值更新)。因此两者在某些情况下,并不总是完全一致的。因为在更新了Q-Table之后,在下一步动作上,智能体偶然会选择“不贪心”的动作,并不总是会选择上一步中max函数所选择的a'。这种随机性和不一致带来的是对环境更全面的探索,但是增加了智能体掉进冰窟窿的风险。

而SARAS算法则不同,它是同策略的,即on-policy算法。它是基于当前的策略(比如贪心策略或ε-greedy策略)直接执行一次动作的选择,然后用这个动作之后的新状态更新当前的策略,因此所选中的Qs',a']总是会被执行。

11.5.2 SARSA算法的实现

SARSA算法这个漂亮名称的由来(S:State,A:Action,R:Reward,S1:New State, A1:New Action),S是当前状态,A是动作,R是奖励,S1是新状态,A1是新的动作。是不是觉得这些名词都挺熟悉的。

SARSA算法的动作的选择可以采取贪心策略或ε-greedy策略,无论采取哪种策略, SARSA都将使用当前的策略来更新Q-Table,因此SARSA算法是前后一致的(而Q-learning算法则总是贪心地选择最大的Q值来更新Q-Table)。

SARSA算法的伪代码如下:

初始化Q(s, a)

重复(episode-盘次)

初始化状态s

根据既定策略从当前Q-Table选择下一步动作a(贪心策略或ε-greedy策略)

重复(step-步骤)

采取动作, 同时观察r(奖惩)和s'(新状态)

更新Q-Table(贪心策略或ε-greedy策略)

更新状态

更新动作

直至游戏结束

可以看出,SARSA和Q-Learning算法的差异如下。

■Q-learning算法更新Q-Table时所选择的新的Qs',a']一定是下一步将进入的状态。

■SARSA算法的动作的选择,依照既定策略,状态和动作同步直接更新。