强化学习入门 Q-learning与SARSA

1. Q-Learning是强化学习算法中Value-based中的一种算法,Q即为Q(s,a)就是在某一时刻的s状态下(s∈S),采取动作a (a∈A)动作能够获得收益的期望,环境会根据agent的动作反馈相应的回报reward r,所以算法的主要思想就是将State与Action构建成一张Q-table来存储Q值,然后根据Q值来选取能够获得最大的收益的动作。

更简单的理解就是我们基于状态s利用ε−greedy​​​法进行贪婪选择出动作a,然后执行动作a,得出下一状态s'以及reward r,有了这些值就可以做Q-table的更新了,更新公式如下:

对应的参考代码部分如下:

# 更新S
def chose_direction(s, q_table):
    if np.random.uniform() > EPSILON or q_table.iloc[s, :].all() == 0:
        direction = np.random.choice(ACTIONS)
    else:
        direction = ACTIONS[q_table.iloc[s, :].argmax()]
    return direction

# 学习过程
s = 0
is_terminal = False
step_count = 0
while not is_terminal:
    a = chose_direction(s, q_table)
    s_, r = update(s, a)
    q_predict = q_table.loc[s, a]
    if s_ != "terminal":
        q_target = r + GAMA*q_table.iloc[s_, :].max()
    else:
        q_target = r
        is_terminal = True
    q_table.loc[s, a] += ALPHA*(q_target-q_predict)
    a = s_

其中:看到Q-learning算法的行为策略和目标策略不同,因此为异策略(off-policy)。

强化学习入门 Q-learning与SARSA_第1张图片

2. Sarsa的行为策略部分和Q-Learning一模一样,都是采用Q表的方式进行决策,我们会在Q表中挑选values比较大的动作实施在环境中来换取奖赏。但是Sarsa的更新是不一样的。'sarsa'五个字母的含义即s(当前在状态),a(当前行为),r(奖励),s(下一步状态),a(下一步行为),也就是说我们在进行这一步操作时已经想到当前s对应的a,并且想好了下一个s'和a'。

Sarsa的公式如下:

 

  以下是Sarsa更新的主要代码:

s = 0
is_terminal = False
step_count = 0
a = chose_direction(s, q_table)
while not is_terminal:
    s_, r = update(s, s)
    q_predict = q_table.loc[s, a]
    if s != "terminal" and s_ != "terminal":
        a_ = chose_direction(s_, q_table)
        q_target = r + GAMA*q_table.loc[s_, a_]
    else:
        q_target = r
        is_terminal = True
    q_table.loc[s,a] += ALPHA*(q_target-q_predict)
    s = s_
    a = a_

强化学习入门 Q-learning与SARSA_第2张图片

 可以看到行为策略和目标策略使用同一个函数,因此SARSA为同策略(on-policy)。

代码参考:强化学习中,Q-Learning与Sarsa的差别有多大? - 知乎 (zhihu.com)

你可能感兴趣的:(python,人工智能)