SARSA算法

Friday, May 8, 2020

SARSA算法的引入

SARSA算法不需要环境的状态转化模型,是不基于模型的强化学习问题求解方法。对于它的控制问题的求解与蒙特卡洛法相似,即通过价值函数的更新来更新当前的策略,再通过新的策略来产生新的状态和即时奖励从而更新价值函数。

SARSA算法属于在线控制的时序差分法,即一直使用一个策略来更新价值函数和选择新的动作,而这个策略是\(\epsilon\)-贪婪法。

SARSA算法概述

在迭代的时候,我们首先基于ϵ−贪婪法在当前状态S选择一个动作A,这样系统会转到一个新的状态S′, 同时给我们一个即时奖励R, 在新的状态S′,我们会基于ϵ−贪婪法在状态S′选择一个动作A′,但是注意这时候我们并不执行这个动作A′,只是用来更新的我们的价值函数,价值函数的更新公式是:

\[ Q(S,A) = Q(S,A) + \alpha(R+\gamma Q(S',A') - Q(S,A)) \]

其中\(\gamma\)是衰减因子,\(\alpha\)是步长。这里和蒙特卡洛算法的主要区别在与收获\(G_t\)的表达式不同,对于时序差分,收获\(G_t\)的表达式是\(R+\gamma Q(S',A')\)

SARSA算法流程

算法输入:迭代轮数\(T\),状态集\(S\),动作集\(A\),步长\(\alpha\),衰减因子\(\gamma\),探索率\(\epsilon\)

输出:所有的状态和动作对应的价值\(Q\)

  1. 随机初始化所有的状态和动作对应的价值\(Q\)。对于终止状态其\(Q\)值初始化为0
  2. for i from i to T, 进行迭代
    1. 初始化\(S\)为当前序列的第一个状态,设置\(A\)\(\epsilon\)-贪婪法在当前状态选择的动作
    2. 在状态\(S\)执行当前动作\(A\),得到新状态\(S'\)以及奖励\(R\)
    3. \(\epsilon\)-贪婪法在状态\(S'\)选择新的动作\(A'\)
    4. 更新价值函数\(Q(S,A)\)\(Q(S,A) = Q(S,A) + \alpha(R+\gamma Q(S',A') - Q(S,A))\)
    5. \(S=S', A=A'\)
    6. 如果\(S\)是终止状态,则当前轮迭代完毕,否则转到步骤2.2

一般来说,\(\alpha\)一般需要随着迭代的进行而逐渐变小,这样才能保证动作价值函数的收敛。

SARSA算法实践

使用SARSA算法解决Windy Gridworld问题。具体实践参照我的github

强化学习

Q-learning算法

时序差分法求解