1、OpenAI Gym库
OpenAI Gym是一个用于开发和比较强化学习算法的Python库。它提供了一个标准化的环境,使得研究人员可以轻松地测试和比较他们的算法。Gym库中的环境可以是简单的数学问题,也可以是复杂的机器人控制问题。它还提供了多种预定义的环境,如CartPole、MountainCar等,这些环境都可以用于测试和比较强化学习算法。
在使用OpenAI Gym库时,首先需要安装它。安装完成后,就可以开始使用Gym库中的环境了。在Gym库中,每个环境都有一个特定的名称,例如CartPole、MountainCar等。每个环境都有自己的特定规则和状态空间。在开始使用环境之前,需要先初始化它。初始化后,就可以使用智能体的动作来与环境进行交互了。
在使用OpenAI Gym库时,还可以使用Q-learning算法来实现强化学习。Q-learning是一种基于值函数的强化学习算法,它通过不断更新Q表来学习最优策略。在Gym库中,可以使用Q-learning算法来训练智能体,使其能够解决各种环境中的问题。
除了Q-learning算法外,OpenAI Gym库还提供了多种其他强化学习算法的实现,如Actor-Critic算法、PPO算法等。这些算法都可以用于训练智能体,使其能够解决各种环境中的问题。
OpenAI Gym库是一个非常有用的工具,它可以帮助研究人员开发和比较强化学习算法。通过使用Gym库中的环境和预定义的算法,可以快速地测试和比较不同的强化学习算法,从而找到最适合特定问题的解决方案。
2、Farama Gymnasium库
Gym最初由OpenAI在6年前创建,它包括一个标准的API和符合该API环境的工具,以及一组已经成为非常广泛使用的各种参考环境。它通过pip被安装了超过4300万次,在谷歌学者上被引用了4500多次,在GitHub上被32000多个项目使用。这使得它成为迄今为止世界上使用最多的RL库。
Gym在很多事情上都做得很好,但是OpenAI在最初的发布之后并没有投入大量的资源。目前,Gym的维护量正逐渐减少,到2020年底,Gym已完全没有维护。在2021年初,OpenAI让Farama基金会接管了Gym的存储库。
Farama基金会是一个新的非营利组织,旨在维护现有的开源强化学习(“RL”)库为强化学习项目提供标准化和长期维护,以及改进它们的可重复性、性能和质量。
在Farama基金会成立之前的RL环境项目在GitHub上由不同的团体或个人进行维护和拥有。这意味着,如果有人突然辞职,或公司倒闭,维护工作便会停止。即使是标准的开源方法也不受欢迎,因为每个人都需要使用完全不同版本的环境来实现重现研究领域的不同项目。
为此,提出了这一问题的长期解决方案,让存储库由一个统一的中立的非营利组织来管理,类似于Linux基金会或Apache软件基金会,随着时间的推移来维护这些库,并使它们符合一套统一和一致的标准。Farama基金会应运而生,在努力为开源强化学习生态系统开发缺失的关键软件。
Farama基金会开发了PettingZoo,它是面向多智能体环境的基础Gym,由13名贡献者用了一年的时间开发出来。除此之外,还开发了大约60个环境的标准库,包括首次增加对多人Atari (雅达利)游戏的ALE的支持。PettingZoo于2020年底发布,现在已得到广泛使用,通过pip安装了85万台,业已成为世界上安装数量第三多的RL库。
将Gym迁移到Gymnasium,是Farama基金会的一个新项目,在过去18个月里,由维护Gym的同一个开发团队维护。如果已经在使用最新版本的Gym(v0.26.2),那么可以升级到Gymnasium(v0.27.0),只需将Gym入口替换为Gymnasium入口,无需额外的操作步骤。之后,将不再收到Gym更新或bug修复,也不会对Gymnasium的核心API进行进一步的更新。
Gymnasium是Gym的延续,具体实现方式上只需要将import gym 替换为import gymnasium as gym ,Gymnasium 0.26.2几乎与Gym 0.26.2一模一样。
即便是大型的项目,升级也易如反掌,只需要升级到最新版本的Gymnasium。这样做的目的是为了让全领域所依赖的API可以长期在一个中立的实体中得以维护,实现一个更高效和可持续的开发和发布工作流程。当前,OpenAI没有未来开发Gymnasium的计划,所以不会造成同一个社区被两个相互竞争的库分裂的情况。
现在,Gymnasium已经上线,可以用pip命令安装Gymnasium。许多大型项目已经同意在不久的将来升级到Gymnasium,Gymnasium没有计划进一步打破改变核心API,主要专注于升级向量化环境和重新实现所有内置环境,Gymnasium类似GPU硬件加速器,将潜在的环境速度提高到10x和1000倍速。希望这些变化将使强化学习在训练过程中性能得以提升,使得研究人员更快地实验新的想法。
Gymnasium是一种用于使用不同参考环境集合的强化学习的新API标准,是OpenAI的Gym库的一个维护分支。Gymnasium界面简捷,明了,能够涵盖一般的RL问题,并有一个与Gym环境兼容的封装。
代码语言:javascript复制import gymnasium as gymenv = gym.make("LunarLander-v2", render_mode="human")observation, info = env.reset(seed=42)for _ in range(1000):
action = env.action_space.sample() # this is where you would insert your policy
observation, reward, terminated, truncated, info = env.step(action)
if terminated or truncated:
observation, info = env.reset()
env.close()
3、Half Cheetah强化学习示例
强化学习被概念化为一个循环,在这里智能体观察其环境的状态,然后采取一个改变该状态的行动。在收到下一个观察时,智能体也会收到与最近的行动相关的奖励。这个过程持续多个循环,在学习过程中,智能体寻求使其预期的平均奖励最大化。作为本书的收官示例,接下来举一个 Half Cheetah强化学习示例。
HalfCheetah是一个2D运动任务,用机器人模糊地模拟猫的动作。HalfCheetah可以在Mujoco(需要付费许可)和Bullet(开源,免费)物理模拟器中实现。HalfCheetah示例文档可以在以下链接获取到:Half Cheetah - Gymnasium Documentation (farama.org)。
1) 项目概述
HalfCheetah环境基于P. Wawrzyński在《半猎豹机器人实时跑步运动学习》一文中的工作。半猎豹是一个二维机器人,由9个身体部位和8个关节连接着组成(包括两只爪子)。目标是在关节上施加一个扭矩,让猎豹尽可能快地向前跑,根据向前移动的距离分配正奖励,根据向后移动的距离分配负奖励。猎豹的躯干和头部固定,扭矩只能施加在大腿前面和背部(连接躯干)、小腿(连接大腿)和脚(连接小腿)上的6个关节之上。
2) 动作空间
动作空间为Box(-1, 1, (6,), float32),通过关节上的扭矩来表达动作空间,详细细节如表1所示:
表1 HalfCheetah的动作空间
序号 | 动作 | 名称 (对应 XML 文件) | 单位 |
---|---|---|---|
0 | 施加在大腿后转子上的扭矩 | bthigh | 扭矩 (N m) |
1 | 施加在后胫骨转子上的扭矩 | bshin | 扭矩 (N m) |
2 | 施加在后脚转子上的扭矩 | bfoot | 扭矩 (N m) |
3 | 施加在大腿前转子上的扭矩 | fthigh | 扭矩 (N m) |
4 | 施加在前胫骨转子上的扭矩 | fshin | 扭矩(N m) |
5 | 施加在前脚转子上的扭矩 | ffoot | 扭矩(N m) |
3) 观察空间
观测空间包括猎豹身体不同部位的位置值,后随附各部位的速度(速度的导数),所有的位置都排列在速度之前。默认情况下,观测结果不包括猎豹的 rootx,在构造rootx过程中通过exclude_current_positions_from_observation=False实施,此时的观察空间为:Box(-Inf, Inf, (18,), float64),无论exclude_current_positions_from_observation设为真或假,第一个元素均代表 rootx,返回值为"x_position",默认情况下,观察空间为Box(-Inf, Inf, (17,), float64),其中各元素对应表2中的内容:
表2观察空间的各元素
序号 | 观察 | 名称 (对应 XML 文件) | 单位 |
---|---|---|---|
0 | 前臀的z坐标 | rootz | 位置 ( m) |
1 | 前臀的角度 | rooty | 角度 (rad) |
2 | 大腿前转子的角度 | bthigh | 角度 (rad) |
3 | 前胫骨转子的角度 | bshin | 角度 (rad) |
4 | 前臀x轴向速度 | bfoot | 角度 (rad) |
5 | 前臀y轴向速度 | fthigh | 角度 (rad) |
6 | 前臀角速度 | fshin | 角度 (rad) |
7 | 后脚转子角速度 | ffoot | 角度 (rad) |
8 | 前臀的x坐标 | rootx | 速度(m/s) |
9 | 前臀的y坐标 | rootz | 速度(m/s) |
10 | 前臀的角度 | rooty | 角速度(rad/s) |
11 | 大腿前转子的角度 | bthigh | 角速度(rad/s) |
12 | 前胫骨转子的角度 | bshin | 角速度(rad/s) |
13 | 前臀x轴向速度 | bfoot | 角速度(rad/s) |
14 | 前臀y轴向速度 | fthigh | 角速度(rad/s) |
15 | 前臀角速度 | fshin | 角速度(rad/s) |
16 | 后脚转子角速度 | ffoot | 角速度(rad/s) |
其他 | 前臀x坐标 | rootx | 位置 ( m) |
4) 奖励
奖励包括两部分:
- 向前奖励:向前移动的奖励,度量方法为:
向前奖励权重*(动作前的x坐标-动作后的x坐标)/dt。
dt是框架时间窗口,与frame_skip参数(固定为5)相关,其中框架时间为0.01,默认的dt = 5 * 0.01 = 0.05。如果猎豹向前跑,向前奖励为正。
- l ctrl_cost:如果猎豹采取了太大的动作,会产生惩罚成本,ctrl_cost度量方法为控 ctrl_cost_weight(动作2之和),其中 ctrl_cost_weight是为控件设置的参数,默认值为0.1
返回的总奖励=向前奖励- ctrl_cost,info中包含单个奖励。
5) 起始状态
所有观测都从状态(0.0、0.0、0.0.0、0.0.0.0.0、0.0、0.0.0.0.0.0.0、0.0、0.0、0.0、0.0、0.0、0.0.0.0.0.0、0.0.0、0.0、0.0)开始,并在初始状态中添加噪声以实现随机性。如前所述,该状态中的前8个值是位置值,后9个值是速度值。在位置值中加入[-重置噪声尺度,重置噪声尺度]范围内的均匀噪声,同时在所有零的初始速度值中加入均值为0和重置噪声尺度的标准偏差的标准正常噪声。
当Episode长度大于1000时,训练被截断。
6) 参数
目前在v2及更低版本中支持以下参数,如表3所示。
表3 v2支持的参数
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
xml_file | str | "half_cheetah.xml" | MuJoCo 模型的路径 |
forward_reward_weight | float | 1.0 | 向前奖励权重 |
ctrl_cost_weight | float | 0.1 | ctrl_cost 权重 |
reset_noise_scale | float | 0.1 | 起始位置和速度的随机缩放Scale of |
exclude_current_positions_from_observation | bool | True | 是否从观测值中省略 x 坐标。 |
import gymnasium as gym
env = gym.make('HalfCheetah-v4', ctrl_cost_weight=0.1, ....)
运行结果如图1 所示:
图1 Half Cheetah强化学习示意图
4、未来强化学习项目
除了Gymnasium项目之外,Farama基金会未来致力于新的强化学习项目的开发,包括但不限于以下内容:
1. 与视频游戏开发者合作,将来自真实用户的游戏玩法编译成有史以来最大的离线RL数据集,并公开发布,尝试GPT-for-RL风格的项目。
2. 创建一个标准的脱机RL数据集格式和存储库。这方面的开发已经开始,参见Minari,将它集成到所有环境中。
3. 创建好C API和工具,这样RL就可以更容易地部署在嵌入式系统或机器人等应用程序中。
4. 创建一个学习库,希望它能成为第一个广泛使用的“just works”强化学习库,可在复杂和现实世界的应用程序中得到应用,包括对分布式计算的支持。这是迄今为止计划清单上最雄心勃勃的任务。
编辑:于腾凯
校对:程安乐
数据派研究部介绍
数据派研究部成立于2017年初,以兴趣为核心划分多个组别,各组既遵循研究部整体的知识分享和实践项目规划,又各具特色:
算法模型组:积极组队参加kaggle等比赛,原创手把手教系列文章;
调研分析组:通过专访等方式调研大数据的应用,探索数据产品之美;
系统平台组:追踪大数据&人工智能系统平台技术前沿,对话专家;
自然语言处理组:重于实践,积极参加比赛及策划各类文本分析项目;
制造业大数据组:秉工业强国之梦,产学研政结合,挖掘数据价值;
数据可视化组:将信息与艺术融合,探索数据之美,学用可视化讲故事;
网络爬虫组:爬取网络信息,配合其他各组开发创意项目。