强化学习入门: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框架。