Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >RL实践3——为Agent添加Policy

RL实践3——为Agent添加Policy

作者头像
列夫托尔斯昊
发布于 2020-09-07 07:02:07
发布于 2020-09-07 07:02:07
49800
代码可运行
举报
文章被收录于专栏:探物及理探物及理
运行总次数:0
代码可运行

参考自知乎(叶强)

Introduction

在实践2中,介绍了gym环境的定义和使用方法。 在实践1中,介绍了 动态规划DP 求解 价值函数 并没有形成一个策略Policy\(\pi\)来指导agent的动作选取,本节将利用SARSA(0)的学习方法,帮助agent学习到价值函数(表),指导\(\epsilon\)-greedy策略选取动作。

Agent的写法

Agent的三要素是:价值函数、策略、模型 Sarsa(0)是不基于模型的控制,其动作选择策略是\(\epsilon\)-greedy,根据价值函数选择动作。

对于一般问题,Agent包括如下功能

  • 对环境的引用
  • 自身变量:Q值,状态值的记忆
  • 策略方法
  • 动作执行方法
  • 学习方法:改进策略,这部分是关键
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Agent():
    def __init__(self, env: Env):
        self.env = env      # 个体持有环境的引用
        self.Q = {}         # 个体维护一张行为价值表Q
        self.state = None   # 个体当前的观测,最好写成obs.

    def performPolicy(self, state): pass # 执行一个策略

    def act(self, a):       # 执行一个行为
        return self.env.step(a)

    def learning(self): pass   # 学习过程

Agent方法

SARSA(0)的伪算法流程如下:

核心方法:learning

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def learning(self, gamma, alpha, max_episode_num):
    # self.Position_t_name, self.reward_t1 = self.observe(env)
    total_time, time_in_episode, num_episode = 0, 0, 0
    while num_episode < max_episode_num: # 设置终止条件
        self.state = self.env.reset()    # 环境初始化
        s0 = self._get_state_name(self.state) # 获取个体对于观测的命名
        self.env.render()                # 显示UI界面
        a0 = self.performPolicy(s0, num_episode, use_epsilon = True)

        time_in_episode = 0
        is_done = False
        while not is_done:               # 针对一个Episode内部
            # a0 = self.performPolicy(s0, num_episode)
            s1, r1, is_done, info = self.act(a0) # 执行行为
            self.env.render()            # 更新UI界面
            s1 = self._get_state_name(s1)# 获取个体对于新状态的命名
            self._assert_state_in_Q(s1, randomized = True)
            # 获得A'
            a1 = self.performPolicy(s1, num_episode, use_epsilon=True)
            old_q = self._get_Q(s0, a0)  
            q_prime = self._get_Q(s1, a1)
            td_target = r1 + gamma * q_prime  
            #alpha = alpha / num_episode
            new_q = old_q + alpha * (td_target - old_q)
            self._set_Q(s0, a0, new_q)

            if num_episode == max_episode_num: # 终端显示最后Episode的信息
                print("t:{0:>2}: s:{1}, a:{2:2}, s1:{3}".\
                    format(time_in_episode, s0, a0, s1))

            s0, a0 = s1, a1
            time_in_episode += 1

        print("Episode {0} takes {1} steps.".format(
            num_episode, time_in_episode)) # 显示每一个Episode花费了多少步
        total_time += time_in_episode
        num_episode += 1
    return

策略方法:performPolicy

通过改变use_epsilon参数,可以切换SARSA 和 Q-learning 相同在于:

  • 都用\(\epsilon\)-greedy策略进行了探索

区别在于:

  • Q-learning:更激进,最优更新
    • update: \(greedy\)策略,评估过程的A'没有实际执行
    • control:\(\epsilon-greedy\)策略
  • SARSA:更新和执行都用\(\epsilon-greedy\)策略
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def performPolicy(self, s, episode_num, use_epsilon):
    epsilon = 1.00 / (episode_num+1)
    Q_s = self.Q[s]
    str_act = "unknown"
    rand_value = random()
    action = None
    if use_epsilon and rand_value < epsilon:  
        action = self.env.action_space.sample()
    else:
        str_act = max(Q_s, key=Q_s.get)
        action = int(str_act)
    return action    
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【AlphaGo Zero 核心技术-深度强化学习教程代码实战04】Agent类和SARSA算法实现
【导读】Google DeepMind在Nature上发表最新论文,介绍了迄今最强最新的版本AlphaGo Zero,不使用人类先验知识,使用纯强化学习,将价值网络和策略网络整合为一个架构,3天训练后就以100比0击败了上一版本的AlphaGo。Alpha Zero的背后核心技术是深度强化学习,为此,专知有幸邀请到叶强博士根据DeepMind AlphaGo的研究人员David Silver《深度强化学习》视频公开课进行创作的中文学习笔记,在专知发布推荐给大家!(关注专知公众号,获取强化学习pdf资料,详情
WZEARW
2018/04/09
7040
【AlphaGo Zero 核心技术-深度强化学习教程代码实战04】Agent类和SARSA算法实现
【AlphaGo Zero 核心技术-深度强化学习教程代码实战05】SARSA(λ)算法实现
【导读】Google DeepMind在Nature上发表最新论文,介绍了迄今最强最新的版本AlphaGo Zero,不使用人类先验知识,使用纯强化学习,将价值网络和策略网络整合为一个架构,3天训练后就以100比0击败了上一版本的AlphaGo。Alpha Zero的背后核心技术是深度强化学习,为此,专知有幸邀请到叶强博士根据DeepMind AlphaGo的研究人员David Silver《深度强化学习》视频公开课进行创作的中文学习笔记,在专知发布推荐给大家!(关注专知公众号,获取强化学习pdf资料,详情
WZEARW
2018/04/09
8390
【AlphaGo Zero 核心技术-深度强化学习教程代码实战05】SARSA(λ)算法实现
强化学习之不基于模型的控制(五)
-贪婪策略)被提出,其基本思想就是使得某一状态下所有可能的行为都有几率被选中执行,具体通过设置一个比较小的
CristianoC
2021/01/04
8040
强化学习之不基于模型的控制(五)
【David Silver 深度强化学习教程代码实战07】 DQN的实现
点击上方“专知”关注获取更多AI知识! 【导读】Google DeepMind在Nature上发表最新论文,介绍了迄今最强最新的版本AlphaGo Zero,不使用人类先验知识,使用纯强化学习,将价值网络和策略网络整合为一个架构,3天训练后就以100比0击败了上一版本的AlphaGo。Alpha Zero的背后核心技术是深度强化学习,为此,专知有幸邀请到叶强博士根据DeepMind AlphaGo的研究人员David Silver《深度强化学习》视频公开课进行创作的中文学习笔记,在专知发布推荐给大家!(关注
WZEARW
2018/04/10
3.6K0
【David Silver 深度强化学习教程代码实战07】 DQN的实现
【AlphaGo Zero 核心技术-深度强化学习教程代码实战06】给Agent添加记忆功能
【导读】Google DeepMind在Nature上发表最新论文,介绍了迄今最强最新的版本AlphaGo Zero,不使用人类先验知识,使用纯强化学习,将价值网络和策略网络整合为一个架构,3天训练后就以100比0击败了上一版本的AlphaGo。Alpha Zero的背后核心技术是深度强化学习,为此,专知有幸邀请到叶强博士根据DeepMind AlphaGo的研究人员David Silver《深度强化学习》视频公开课进行创作的中文学习笔记,在专知发布推荐给大家!(关注专知公众号,获取强化学习pdf资料,详情
WZEARW
2018/04/09
1.1K0
【AlphaGo Zero 核心技术-深度强化学习教程代码实战06】给Agent添加记忆功能
如何使用强化学习玩21点?
本文将比较分析Monte-Carlo控制算法与时域差分控制算法在解21点(Blackjack)博弈中的应用。
用户7623498
2020/08/04
1.5K0
Hands on Reinforcement Learning 05 Temporal Difference
第 4 章介绍的动态规划算法要求马尔可夫决策过程是已知的,即要求与智能体交互的环境是完全已知的(例如迷宫或者给定规则的网格世界)。在此条件下,智能体其实并不需要和环境真正交互来采样数据,直接用动态规划算法就可以解出最优价值或策略。这就好比对于有监督学习任务,如果直接显式给出了数据的分布公式,那么也可以通过在期望层面上直接最小化模型的泛化误差来更新模型参数,并不需要采样任何数据点。
一只野生彩色铅笔
2023/04/06
6590
Hands on Reinforcement Learning 05 Temporal Difference
【强化学习】悬崖寻路:Sarsa和Q-Learning
本篇博文通过悬崖寻路这一实例来实现Sarsa和Q-Learning算法。 相关代码主要参考自PARL强化学习公开课。.
zstar
2022/06/14
1.7K0
【强化学习】悬崖寻路:Sarsa和Q-Learning
Q-learning解决悬崖问题
Q-learning是一个经典的强化学习算法,是一种基于价值(Value-based)的算法,通过维护和更新一个价值表格(Q表格)进行学习和预测。
lyhue1991
2023/09/05
3780
Q-learning解决悬崖问题
【强化学习】RL 在运筹学中的应用
假设有一个客服排班的任务,我们需要为 100 个人安排一个星期的排班问题,并且有以下约束条件:
阿泽 Crz
2020/10/30
1.8K2
【强化学习】RL 在运筹学中的应用
深度强化学习 | DQN训练超级玛丽闯关
本系列将延续通过代码学Sutton 强化学习系列,逐步通过代码实现经典深度强化学习应用在各种游戏环境中。本文所有代码在
NewBeeNLP
2021/03/03
1.5K0
深度强化学习 | DQN训练超级玛丽闯关
机器学习-22:MachineLN之RL
原本打算将机器学习基础写完以后再写深度学习、强化学习、迁移学习的内容,但是现在看还是中间穿插一点比较好。
MachineLP
2022/05/09
3860
机器学习-22:MachineLN之RL
【深度强化学习】DQN训练超级玛丽闯关
上一期 MyEncyclopedia公众号文章 通过代码学Sutton强化学习:从Q-Learning 演化到 DQN,我们从原理上讲解了DQN算法,这一期,让我们通过代码来实现DQN 在任天堂经典的超级玛丽游戏中的自动通关吧。本系列将延续通过代码学Sutton 强化学习系列,逐步通过代码实现经典深度强化学习应用在各种游戏环境中。本文所有代码在
黄博的机器学习圈子
2020/12/11
1.4K0
【深度强化学习】DQN训练超级玛丽闯关
强化学习(七)时序差分离线控制算法Q-Learning
    在强化学习(六)时序差分在线控制算法SARSA中我们讨论了时序差分的在线控制算法SARSA,而另一类时序差分的离线控制算法还没有讨论,因此本文我们关注于时序差分离线控制算法,主要是经典的Q-Learning算法。
刘建平Pinard
2018/10/10
1.1K0
强化学习(七)时序差分离线控制算法Q-Learning
详解蒙特卡洛方法:这些数学你搞懂了吗?
之前我们讨论过马尔可夫决策过程(MDP,参阅 https://goo.gl/wVotRL)以及寻找最优的动作-价值函数
机器之心
2018/07/30
1.1K0
详解蒙特卡洛方法:这些数学你搞懂了吗?
【机器学习】机器学习的重要方法——强化学习:理论,方法与实践
在人工智能的广阔领域中,强化学习(Reinforcement Learning, RL)是一个备受瞩目的分支。它通过让智能体(Agent)在环境中进行试错学习,以最大化累积奖励为目标。本文将带您深入探索强化学习算法的魅力与奥秘,并通过一些代码示例来展示其工作原理和应用场景。
破晓的历程
2024/08/20
2890
【深度强化学习】—— Q-Learning
In RL, we build an agent that can make smart decisions. For instance, an agent that learns to play a video game. Or a trading agent that learns to maximize its benefits by making smart decisions on what stocks to buy and when to sell.
WEBJ2EE
2022/03/30
7690
【深度强化学习】—— Q-Learning
强化学习算法总结(一)——从零到DQN变体
中对应价值最大的动作的Q值进行更新,注意这里只是更新,并不会真的执行这个价值最大的动作。这里的更新策略(评估策略)与我们的行为策略(
CristianoC
2021/04/16
2.7K0
强化学习算法总结(一)——从零到DQN变体
7个流行的强化学习算法及代码实现
来源:Deephub Imba 本文约4500字,建议阅读5分钟 本文介绍了流行的强化学习算法的发展和改进。 目前流行的强化学习算法包括 Q-learning、SARSA、DDPG、A2C、PPO、DQN 和 TRPO。这些算法已被用于在游戏、机器人和决策制定等各种应用中,并且这些流行的算法还在不断发展和改进,本文我们将对其做一个简单的介绍。 1、Q-learning Q-learning:Q-learning 是一种无模型、非策略的强化学习算法。它使用 Bellman 方程估计最佳动作值函数,该方程
数据派THU
2023/04/18
6280
7个流行的强化学习算法及代码实现
ReinforceJS库(动态展示DP、TD、DQN算法运行过程)
ReinforceJS在GridWorld、PuckWorld、WaterWorld环境中进行了动态的展示:
深度强化学习实验室
2019/11/21
9990
ReinforceJS库(动态展示DP、TD、DQN算法运行过程)
推荐阅读
相关推荐
【AlphaGo Zero 核心技术-深度强化学习教程代码实战04】Agent类和SARSA算法实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验