📜  SARSA 强化学习(1)

📅  最后修改于: 2023-12-03 14:47:13.488000             🧑  作者: Mango

SARSA 强化学习

简介

SARSA(State-Action-Reward-State-Action)是基于动态规划的强化学习算法,可以用于处理具有明确的状态、动作和奖励的问题。在强化学习中,智能体需要通过与环境的交互来学习如何选择最优的行为,以最大化其预期的累积奖励。

SARSA算法的主要思想是基于当前状态下,根据已经学习到的策略选择一个动作,执行该动作并观察下一个状态和奖励,并根据学习到的策略在新的状态下再次选择一个动作。SARSA算法重复执行这个过程,通过不断的更新和调整策略,最终找到最优的行为。

算法流程

SARSA算法的流程如下:

  1. 初始化所有状态动作的价值为任意值或者0;
  2. 在每一轮迭代中,选择当前状态的动作,执行该动作并观察到下一个状态和奖励;
  3. 根据已经学习到的策略,在新的状态中选择一个动作;
  4. 计算价值,并更新价值函数;
  5. 重复执行2-4直到达到最大迭代次数或学习收敛。
代码示例

下面是使用Python实现的一个简单的SARSA算法:

import numpy as np

# 定义环境、奖励和探索率
env = [[0, 0, 0, 0], [0, -1, 0, 1], [0, 0, 0, 0]]
rewards = [-1, 0, 1]
exploration_rate = 0.1

# 初始化状态动作价值
q_values = np.zeros((3, 4, 3))

# 定义选择动作的策略
def choose_action(state):
    if np.random.uniform() < exploration_rate:
        action = np.random.randint(0, 3)
    else:
        action = np.argmax(q_values[state[0], state[1]])

    return action

# SARSA算法
for i in range(100):
    # 初始化状态
    state = [1, 1]
    action = choose_action(state)

    # 执行动作
    while env[state[0]][state[1]] == 0:
        if action == 0:
            next_state = [state[0], state[1] - 1]
        elif action == 1:
            next_state = [state[0] - 1, state[1]]
        elif action == 2:
            next_state = [state[0], state[1] + 1]

        next_action = choose_action(next_state)
        reward = rewards[env[next_state[0]][next_state[1]] + 1]

        # 计算和更新状态动作价值
        q_values[state[0], state[1], action] += 0.1 * (reward + 0.95 * q_values[next_state[0], next_state[1], next_action] - q_values[state[0], state[1], action])

        # 更新状态和动作
        state = next_state
        action = next_action

# 打印最终状态动作价值
print(q_values)
参考资料
  • Sutton, R. S., & Barto, A. G. (2018). Reinforcement learning: An introduction (2nd ed.). Cambridge, Massachusetts: MIT Press.
  • https://en.wikipedia.org/wiki/SARSA