强化学习实践 | Sarsa / Sarsa(lambda) 例子

本文详细介绍了Q-Learning和Sarsa的区别,重点阐述了Sarsa的实践性质及其伪代码。通过二维走迷宫的例子,展示了Sarsa在更新Q表时如何运用eligibility trace,包括accumulating trace和replacing trace两种计算方式,解释了Sarsa如何在RL中学习和改进策略。
摘要由CSDN通过智能技术生成

参考:https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/tabular-sarsa2/

Q-Learning和Sarsa的区别

  1. epsilon-greedy使用时机不一样:Q-Learning用epsilon-Greedy选择当前时刻(s)的动作。Sarsa用epsilon-Greedy选择下一时刻(s’)的动作a’,并采用这个a’。
  2. 它们的Target不一样,Q-Learning采用下一个状态s’最大Q(s’,a’),但下一时刻采取的动作并不一定是使得Q(s’,a’)的动作。 [Off-Policy]
  3. 而Sarsa偏向实践(“说到做到”),因此使用的是Q(s’,a’)。[On-Policy]

实际上Sarsa在选a’的动作的时候还是有90%的概率选择Q值最大的动作a’,但是它是会做这个动作a’的。而Q-Learning只是利用Q(s’,a’)来估计s‘的价值函数,它不一定会到了s’就采取a’。

Sarsa 当前采取的动作是上一个时刻固定的即它知道它下一步会到达哪个state,它还有一个任务是为它接下来的state通过epsilon-greedy的方法选取一个动作。

在这里插入图片描述

Sarsa 伪代码

在这里插入图片描述

二维走迷宫的例子:

首先,鉴于Q-Learning和Sarsa都使用到了表格的方法。我们可以将它们统一到一个大的Class RL

class RL(object):
	# action_space是list of index,即各个action的index
    def __init__(self, action_space, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9):
        ... # 和 QLearningTable 中的代码一样
	
	# state是一个数字
    def check_state_exist(self, state):
        ... # 和 QLearningTable 中的代码一样
	
	# Epsilon Greedy
    def choose_action(self, observation):
        ... # 和 QLearningTable 中的代码一样

    def learn(self, *args):
        pass # 每种的都有点不同, 所以用 pass

而Q-Learning和Sarsa具体的区别就在于Learn(更新q表的方式不同)。

具体代码:

import numpy as np
import pandas as pd

class MyRL(object):
    # action_space是list of index,即各个action的index
    def __init__(self, action_space, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9):
        self.actions = action_space
        self.lr = learning_rate
        self.gamma = reward_decay
        self.epsilon = e_greedy
        self.q_table = pd.DataFrame(columns=self.actions,dtype=np.float32)

        ... # 和 QLearningTable 中的代码一样

    # state是一个数字
    def check_state_exist(self, state):
        if state not in self.q_table.index:
            self.q_table = self.q_table.append(
                pd.Series(
                    data=[0]*len(self.actions),
                    index
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值