强化学习笔记+代码(二):SARSA算法原理和Agent实现 您所在的位置:网站首页 冰湖原文 强化学习笔记+代码(二):SARSA算法原理和Agent实现

强化学习笔记+代码(二):SARSA算法原理和Agent实现

2023-03-04 13:37| 来源: 网络整理| 查看: 265

本文主要整理和参考了李宏毅的强化学习系列课程和莫烦python的强化学习教程 本系列主要分几个部分进行介绍

强化学习背景介绍SARSA算法原理和Agent实现Q-learning算法原理和Agent实现DQN算法原理和Agent实现(tensorflow)Double-DQN、Dueling DQN算法原理和Agent实现(tensorflow)Policy Gradients算法原理和Agent实现(tensorflow)Actor-Critic、A2C、A3C算法原理和Agent实现(tensorflow) 一、SARSA算法原理

上一篇内容奖励,强化学习的主要功能就是让agent学习尽可能好的动作action,使其后续获得的奖励尽可能的大。 假设在时刻t时,处于状态长期奖励为: 在这里插入图片描述 其中 r t + n r_{t+n} rt+n​为t+n时获得的局部奖励, γ γ γ为下一期奖励传递到当期的衰减因子。则状态s的价值为 G t G_t Gt​的条件期望: 在这里插入图片描述 同样定义状态s时执行动作a的价值也为 G t G_t Gt​的条件期望: 在这里插入图片描述 可知: E ( Q π ( s , a ) ) = V π ( s ) E(Q_π(s,a))=V_π(s) E(Qπ​(s,a))=Vπ​(s) 下面直接给出深度学习最核心的Bellman 公式 在这里插入图片描述 Bellman 公式十分的直观, V π ( s ) V_π(s) Vπ​(s)=根据动作走到下个状态的奖励+下个状态长期价值*衰减值的期望。价值会不断的传递,因此可以看出 V π ( s ) V_π(s) Vπ​(s)衡量的是状态s的长期价值。 因为RL需要是Agent不断变强,就可以理解为让状态或让动作的价值不断变大,因此会选择根据如下方式获得新的 V π ( s ) V_π(s) Vπ​(s)和 Q π ( s , a ) Q_π(s,a) Qπ​(s,a) 在这里插入图片描述 上面几个公式是强化学习的精髓

SARSA算法是一种典型性的value-based和on-policy的算法。下面直接给出SARSA的算法 在这里插入图片描述 SARSA的算法中有几个需要注意的地方下面用彩色标记标记出 在这里插入图片描述 由于与环境进行了实际的交互,因此会执行动作a后到达状态s’,agent会根据状态s’直接执行动作a’。上面算法图中红框为新的状态s和动作a的价值,即 Q ∗ ( s , a ) Q_*(s,a) Q∗​(s,a),蓝色框是旧的 Q ( s , a ) Q(s,a) Q(s,a),可以看出 Q ( s , a ) Q(s,a) Q(s,a)的更新方法与梯度下降十分的类似。还需要注意到,在循环中黄色框,循环末尾将s’估值给s,将动作a’赋值给a,带到下一次循环中进行运算,说明agent真的与环境进行实际交互。这是算法为on-policy的关键。

二、SARSA代码

此处直接参考莫烦python的强化学习教程进行代码编写,在基础上说明每一行代码的用途 1.environment的编写 首先RL需要一个环境,因为我们控制不了环境(比如下围棋时我们不不能改变棋盘的大小,何落子方式,只能只能在范围内落在线与线之间的交叉点上),这个环境是不可以改变的,因此后面的Q-learning也将沿用此环境。通常不同的问题有不同环境,我们真正需要关注的是agent即算法逻辑的编写。 此处以走方格为例编写一个environment 在这里插入图片描述 其中红色点为当前所在位置,走到黄色点获得奖励1,走到黑色点获得奖励-1

""" Reinforcement learning maze example. Red rectangle: explorer. Black rectangles: hells [reward = -1]. Yellow bin circle: paradise [reward = +1]. All other states: ground [reward = 0]. This script is the environment part of this example. The RL is in RL_brain.py. View more on my tutorial page: https://morvanzhou.github.io/tutorials/ """ import numpy as np import time import sys if sys.version_info.major == 2: import Tkinter as tk else: import tkinter as tk UNIT = 40 # pixels MAZE_H = 4 # grid height MAZE_W = 4 # grid width class Maze(tk.Tk, object): def __init__(self): super(Maze, self).__init__() self.action_space = ['u', 'd', 'l', 'r'] self.n_actions = len(self.action_space) self.title('maze') self.geometry('{0}x{1}'.format(MAZE_H * UNIT, MAZE_H * UNIT)) self._build_maze() def _build_maze(self): self.canvas = tk.Canvas(self, bg='white', height=MAZE_H * UNIT, width=MAZE_W * UNIT) # create grids for c in range(0, MAZE_W * UNIT, UNIT): x0, y0, x1, y1 = c, 0, c, MAZE_H * UNIT self.canvas.create_line(x0, y0, x1, y1) for r in range(0, MAZE_H * UNIT, UNIT): x0, y0, x1, y1 = 0, r, MAZE_W * UNIT, r self.canvas.create_line(x0, y0, x1, y1) # create origin origin = np.array([20, 20]) # hell hell1_center = origin + np.array([UNIT * 2, UNIT]) self.hell1 = self.canvas.create_rectangle( hell1_center[0] - 15, hell1_center[1] - 15, hell1_center[0] + 15, hell1_center[1] + 15, fill='black') # hell hell2_center = origin + np.array([UNIT, UNIT * 2]) self.hell2 = self.canvas.create_rectangle( hell2_center[0] - 15, hell2_center[1] - 15, hell2_center[0] + 15, hell2_center[1] + 15, fill='black') # create oval oval_center = origin + UNIT * 2 self.oval = self.canvas.create_oval( oval_center[0] - 15, oval_center[1] - 15, oval_center[0] + 15, oval_center[1] + 15, fill='yellow') # create red rect self.rect = self.canvas.create_rectangle( origin[0] - 15, origin[1] - 15, origin[0] + 15, origin[1] + 15, fill='red') # pack all self.canvas.pack() def reset(self): self.update() time.sleep(0.5) self.canvas.delete(self.rect) origin = np.array([20, 20]) self.rect = self.canvas.create_rectangle( origin[0] - 15, origin[1] - 15, origin[0] + 15, origin[1] + 15, fill='red') # return observation return self.canvas.coords(self.rect) def step(self, action): s = self.canvas.coords(self.rect) base_action = np.array([0, 0]) if action == 0: # up if s[1] > UNIT: base_action[1] -= UNIT elif action == 1: # down if s[1]


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有