最近在尝试在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的区别如下,点击蓝色字体可以看官方文档解释。
注册环境
编写完环境类后,使用 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/https://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%82https://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