当前位置: 首页 > backend >正文

强化学习入门:RL开发框架Gym简介

前言

 最近想开一个关于强化学习专栏,因为DeepSeek-R1很火,但本人对于LLM连门都没入。因此,只是记录一些类似的读书笔记,内容不深,大多数只是一些概念的东西,数学公式也不会太多,还望读者多多指教。本次阅读书籍为:马克西姆的《深度强化学习实践》
 限于篇幅原因,请读者首先看下历史文章:
 马尔科夫过程
 马尔科夫奖励过程
 马尔科夫奖励过程二
 上述三篇博客已经介绍完书中的第一章内容了,本篇开始介绍第二章内容:openai的RL开源框架Gym。在介绍之前,先用python写一个简单的脚本:

1、demo RL

 我这里直接粘贴下书中提供的:示例代码

import randomclass Environment:def __init__(self):self.steps_left = 10def get_observation(self):return [0.0, 0.0, 0.0]def get_actions(self):return [0, 1]def is_done(self):return self.steps_left == 0def action(self, action):if self.is_done():raise Exception("Game is over")self.steps_left -= 1return random.random()class Agent:def __init__(self):self.total_reward = 0.0def step(self, env):current_obs = env.get_observation()actions = env.get_actions()reward = env.action(random.choice(actions))self.total_reward += rewardif __name__ == "__main__":env = Environment()agent = Agent()while not env.is_done():agent.step(env)print("Total reward got: %.4f" % agent.total_reward)# Total reward got: 3.6443# Total reward got: 4.1748

 上述代码很简单,也没有什么复杂的依赖,能够直接执行。可以发现,每次执行智能体所获得的奖励是不同的。
在这里插入图片描述

2、示例解释

 上述代码定义RL中最关键的两个类:环境和智能体;智能体比较简单:主要.step方法,首先从环境中获取观察–> 选择动作–>从环境中得到奖励–>累加奖励。
 与之对应的环境则是初始化智能体与其交互的总步数,告诉智能体何时游戏结束,并构造一些针对智能体不同的动作,而给予不同奖励的函数。(代码中奖励是用了random)。

3、openai Gym

 Gym是openai开源的RL框架包,下面将简单介绍下核心基类:

3.1.空间

 如下图所示:Space容器类是Gym的一个核心类,定义了RL中的动作空间和观察空间,这两类空间包含:连续动作空间Box类(连续的控制量)、离散动作空间Discrete(上下左右移动)、Tuple类则是定义了一系列Spaces类的元祖。
 另外,还有两个方法:sample()采样一个动作;contains()判断这个动作是否包含在Space类里。
在这里插入图片描述

3.2.环境

 环境类Env是RL的一个基本类:主要包含四个方法:

step():返回奖励、智能体下一步动作、下一个观察等;
reset():当前片段结束,重置环境;
action_space():环境中允许出现的动作;
observation_space():环境中允许出现的观察;

总结

 本篇主要从代码角度介绍了RL的一些基本组件,以及Gym的基类,后面会提供实际代码,从实战中才能掌握Gym框架。

http://www.xdnf.cn/news/7840.html

相关文章:

  • App 出海:全渠道营销如何通过性能监控与精准归因实现增长
  • 【209. 长度最小的子数组】
  • shell脚本之函数详细解释及运用
  • 【深度估计 Depth Estimation】数据集介绍
  • [Java实战]Spring Boot整合Seata:分布式事务一致性解决方案(三十一)
  • 云祺容灾备份系统公有云备份与恢复实操-华为云
  • 【机器学习】支持向量机(SVM)
  • Suricata 3规则介绍、以及使用
  • 亚马逊AWS跑不动了?
  • 港股IPO市场火爆 没有港卡如何参与港股打新?
  • 网络爬虫(Web Crawler)详解
  • 第九届电子信息技术与计算机工程国际学术会议(EITCE 2025)
  • 使用 OpenCV 实现哈哈镜效果:让图像“扭曲起来”!
  • Node.js Express 项目现代化打包部署全指南
  • 基于亚马逊云科技构建音视频直播审核方案
  • Redis应用--缓存
  • MyBatis简单使用
  • 2025年度消费新潜力白皮书470+份汇总解读|附PDF下载
  • BAGEL-7B-MoT论文速读:统一多模态预训练的新特性
  • JUC高并发编程
  • 【笔记】快速安装Poetry
  • 138. Copy List with Random Pointer
  • Docker 镜像打包到本地
  • Android开发——不同布局的定位属性 与 通用属性
  • 大数据量查询优化:解锁SQL性能提升的关键
  • Node.js多版本安装工具NVM详细使用教程
  • VsCode开发环境之Node.js离线部署
  • JS 应用安全案例泄漏云配置接口调试代码逻辑框架漏洞自检
  • 华为鸿蒙电脑发布,折叠屏怎么选?
  • 实现动态增QuartzJob,通过自定义注解调用相应方法