深度强化学习:gymnasium下创建自己的环境(保姆式教程)

最近在尝试在gymnasium中创建自己的运行环境,有官方的文档做指导,但是官方文档中没有提到一些细节,过程中还是遇到了一些错误和问题,自己几经摸索后成功解决,下面写心得过程。

首先附上官方文档的链接:
https://gymnasium.farama.org/tutorials/gymnasium_basics/environment_creation/

编写文件夹

首先按照下图去创建你的文件夹。注意一级目录和二级目录其实文件夹的名字不一样,一级目录是“gym-examples”,注意中间是横杆,二级目录是“gym_examples”,注意中间是下划线,我因为这个地方没有注意导致后面跑代码出现报错!

成功创建后的文件夹展示

(一级目录中)

(二级目录中)

(envs中,此处我给他取名叫Auto_bidding,其实是我自己的环境名字,官方文档中取名为grid_world)

(wrappers)

编写环境文件

接下来我们需要在 gym-examples/gym_examples/envs/grid_world.py 中编写自定义环境的代码,注意你需要编写的环境中需要包含一些必要的函数,例如step()、reset()等,具体可以参照官方文档中的例子,例如:

特别需要注意的是,你在标注action_space和observation_space的时候,需要通过

from gymnasium import spaces

使用spaces中的函数,否则运行会报错,例如

其中的box和discrete的区别如下,点击蓝色字体可以看官方文档解释。

  • Box - 用于连续(和离散)的矢量或矩阵,用于矢量观测,图像等。

  • Discrete - 用于单个离散数量的值。

 注册环境

编写完环境类后,使用 gymnasium.register() 注册环境。为了让Gymnasium检测到自定义环境,它必须按如下方式注册。我们将此代码放在 gym-examples/gym_examples/__init__.py 中

from gymnasium.envs.registration import register

register(
     id="gym_examples/GridWorld-v0",
     entry_point="gym_examples.envs:GridWorldEnv",
     max_episode_steps=300,
)

首先,被注册的环境需要一个ID,之后直接使用这个ID来创建环境实例。环境 ID 由三个部分组成,其命名方法如下:

[namespace/](env_name)[-version]

其中两个部分是可选的:一个可选的namespace(此处:gym_examples/),一个强制名称(此处:GridWorld)和一个可选但推荐的-version(此处:-v0)。注册的环境ID将在之后创建环境实例时使用。

同时,gym-examples/gym_examples/envs/__init__.py 中需要有:

from gym_examples.envs.grid_world import GridWorldEnv

构建为 Python 包

最后一步是将我们的代码构建为 Python 包。 这需要我们对文件 gym-examples/setup.py 编入一些代码:

from setuptools import setup

setup(
    name="gym_examples",
    version="0.0.1",
    install_requires=["gymnasium==0.26.0", "pygame==2.1.0"],
)

此处可以将"=="改为">=",如果不打算做图形化可以删去pygame==2.1.0

安装自定义环境

可以通过终端在文件夹中执行如下指令

pip install -e .

效果如下图,成功安装

安装成功后会生成gym_examples.egg-info文件夹

创建环境实例

此时在代码中写入如下部分就可以成功运行了

import gym_examples
env = gymnasium.make('gym_examples/GridWorld-v0')

参考文档

https://gymnasium.farama.org/tutorials/gymnasium_basics/environment_creation/icon-default.png?t=N7T8https://gymnasium.farama.org/tutorials/gymnasium_basics/environment_creation/https://zhuanlan.zhihu.com/p/626793890#:~:text=%E6%88%91%E4%BB%AC%E9%9C%80%E8%A6%81%E5%9C%A8%20gym-examples%2Fgym_examples%2Fenvs%2Fgrid_world.py%20%E4%B8%AD%E7%BC%96%E5%86%99%E8%87%AA%E5%AE%9A%E4%B9%89%E7%8E%AF%E5%A2%83%E7%9A%84%E4%BB%A3%E7%A0%81%E3%80%82%20%E6%B3%A8%E5%86%8C%E7%8E%AF%E5%A2%83,%E7%BC%96%E5%86%99%E5%AE%8C%E7%8E%AF%E5%A2%83%E7%B1%BB%E5%90%8E%EF%BC%8C%E4%BD%BF%E7%94%A8%20gymnasium.register%20%28%29%20%E6%B3%A8%E5%86%8C%E7%8E%AF%E5%A2%83%E3%80%82icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/626793890#:~:text=%E6%88%91%E4%BB%AC%E9%9C%80%E8%A6%81%E5%9C%A8%20gym-examples%2Fgym_examples%2Fenvs%2Fgrid_world.py%20%E4%B8%AD%E7%BC%96%E5%86%99%E8%87%AA%E5%AE%9A%E4%B9%89%E7%8E%AF%E5%A2%83%E7%9A%84%E4%BB%A3%E7%A0%81%E3%80%82%20%E6%B3%A8%E5%86%8C%E7%8E%AF%E5%A2%83,%E7%BC%96%E5%86%99%E5%AE%8C%E7%8E%AF%E5%A2%83%E7%B1%BB%E5%90%8E%EF%BC%8C%E4%BD%BF%E7%94%A8%20gymnasium.register%20%28%29%20%E6%B3%A8%E5%86%8C%E7%8E%AF%E5%A2%83%E3%80%82

您好!要在Gym创建一个新的强化学习环境,您需要遵循以下步骤: 1. 确保已经安装了Gym:您可以使用pip命令安装最新版本的Gym库。 ``` pip install gym ``` 2. 创建环境Python文件:创建一个新的Python文件,比如`my_env.py`,用于定义您的新环境。 3. 导入必要的库和模块:在`my_env.py`中导入`gym`库和其他您需要使用的库和模块。 ``` import gym from gym import spaces ``` 4. 定义您的环境类:在`my_env.py`中定义一个名为`MyEnv`的新环境类,并继承自`gym.Env`。 ```python class MyEnv(gym.Env): def __init__(self): # 初始化您的环境参数 pass def reset(self): # 重置环境并返回初始状态 pass def step(self, action): # 执行给定动作并返回观测、奖励、终止标志和其他信息 pass ``` 5. 实现必要的方法:根据您的环境需求,在`MyEnv`类中实现以下方法:`__init__()`、`reset()`和`step()`。 - `__init__()`方法用于初始化环境参数,比如定义观测空间、动作空间等。 - `reset()`方法用于重置环境并返回初始状态。 - `step()`方法用于执行给定动作并返回观测、奖励、终止标志和其他信息。 6. 注册您的环境:在`my_env.py`文件的末尾,使用`gym`库的`register()`方法注册您的环境。 ```python register( id='MyEnv-v0', entry_point='my_env:MyEnv', ) ``` 7. 使用您的新环境:在其他Python文件中,您可以使用以下代码来创建并使用您的新环境。 ```python import gym env = gym.make('MyEnv-v0') observation = env.reset() done = False while not done: action = env.action_space.sample() observation, reward, done, info = env.step(action) ``` 这样,您就成功创建了一个新的强化学习环境并可以开始使用它了。记得根据您的需求实现`reset()`和`step()`方法中的逻辑,并根据您的环境设定观测空间和动作空间。 希望对您有所帮助!如果有任何其他问题,请随时提问。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值