自定义openAI gym环境


前言

网上找了很多自定义gym环境的教程,感觉都说的不够清楚,所以自己写一个,每天补充一点


一、编写自定义gym环境

1.myenv.py

下面是一个创建自定义环境的模板,可以直接拿去用

import gym
from gym import spaces
import numpy as np

class myEnv(gym.Env):
    metadata = {
        'render.modes': ['human', 'rgb_array'],
        'video.frames_per_second': 50
    }
     
    def __init__(self):
        self.action_space = None # 动作空间
        self.observation_space = None # 状态空间
        dt=0.05 # 每个时间步间隔时间
        pass
    
    def step(self, action):
        return self.state, reward, done,False, {} #这里对不同版本的gym包可能格式不一样,调试时注意报错信息修改即可
    
    def reset(self):
        return self.state,{}
        
    def render(self, mode='human'):
        return None
        
    def close(self):
        return None

train.py
这个文件在创建gym环境时不是必要的,但有助于我们理解创建gym环境时所定义的方法何时会被用到。

    env = gym.make('myEnv-v0', render_mode="human")
    max_episodes = 20
    cum_reward = 0
    for _ in range(max_episodes): #训练max_episodes个回合
        obs=env.reset() # 初始化环境状态
        done=False  # 回合结束标志,当达到最大步数或目标状态或其他自定义状态时变为True
        while not done: 
            # env.render()  #渲染,一般在训练时会注释掉
            action =agent.get_action(obs)  # 智能体根据传入状态obs选择动作action
            next_obs, reward, done, info, _ = env.step(action) # 环境根据智能体动作返回下一状态,奖励,回合结束标志和其他信息
            agent.learn(obs,action,next_obs, reward)  #  智能体根据数据学习
            cum_reward += reward #计算累计奖励
    env.close() # 全部回合训练结束,关闭环境中占用的资源

接下来逐一说明一下myenv.py文件中每个方法的作用:
metadata与render()方法相关,稍后会说明。
__init__方法:初始化环境参数,action_spaceobservation_spacedt必须定义的内容。其次,环境中的一些固定参数,渲染窗口等也需要在该函数中定义。
step(self,action)方法在每个时间步被调用(也就是train.py中的env.step(action)语句),功能是基于传入的action和当前的obs生成新的obs,reward,done(回合结束标志)和其他信息info,所以该方法需要实现状态转移函数奖励函数,以及回合结束判定,必要的话还可以添加自定义信息info
reset()方法在每个回合(episode)起始被调用,用于对环境状态初始化
render()方法顾名思义用于渲染,在metadata中定义了两种模式,human模式会显示图形界面,rgb_array用于得到rgb的图像数据进行进一步的图像处理。
close()方法在训练结束后销毁环境数据,避免占用内存资源。

二、将自定义环境注册到gym中

(1).当我们写完自定义的环境后,需要将该环境注册到gym中才能使用,目录结构如下:

>>project
	>>my_gym
    	>>envs
    	__init__.py
    	myenv.py
	 __init__.py
setup.py
train.py

(2). 在my_gym目录下的__init__.py文件中添加如下代码:

from gym.envs.registration import register

register(
    id='myEnv-v0',
    entry_point='my_gym.envs:myEnv',
    max_episode_steps=200,
)

其中id为环境名,可以使用gym.make('myEnv-v0')创建该环境,entry_point即入口,也就是路径,即my_gym包的envs模块内的myEnv类,最大步数不是必须定义的,但在这里定义gym会直接帮你实现最大200步停止(也就是让回合结束表示置1),否则需要自己在step函数中实现。

(3). 在envs目录下的__init__.py文件中添加如下代码:

from my_gym.envs.myenv import myEnv

(4).在工程目录下的setup.py中添加如下代码:

from setuptools import setup

setup(name='my_gym',
      version='0.0.1',
      install_requires=['gym', 'pygame'] 
)

在setup.py所在路径下右键点击打开终端,在终端中输入如下指令将自定义的环境打包:

python setup.py bdist_wheel

(5). 在python环境中安装该包
找到工程目录下生成的xxx.whl文件,在当前python环境下安装该包

pip install xxx.whl

(6). 在train.py中导入包并生成环境

import gym
import my_env
env = gym.make('myEnv-v0', render_mode="human")

总结

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenAI Gym是一个用于开发和比较强化学习算法的开源工具包。它提供了许多经典的强化学习环境,让研究者能够更轻松地实验和测试自己的算法。 OpenAI Gym包含了一系列模拟环境,可以在这些环境中训练强化学习算法。这些环境包括了各种各样的问题,例如棋盘游戏、控制机器人或车辆等场景。这些问题复杂多样,要求智能体在环境中进行观察、决策和行动。 OpenAI Gym的设计使得使用者能够方便地编写、测试和比较各种不同的强化学习算法。用户可以在该工具包中选择合适的环境,并使用内置的API进行训练和测试。此外,用户还可以通过插入自定义代码来扩展现有环境或创建全新的环境OpenAI Gym还提供了一种称为“gym spaces”的概念。这是一种用于描述观察空间和动作空间的通用接口。用户只需定义环境的观察空间和动作空间的特征,就可以使用这些通用接口来处理不同类型的环境。 通过使用OpenAI Gym,研究者可以在一个统一的框架下进行强化学习算法的开发和评估。这使得算法的比较更加公平和准确。同时,OpenAI Gym的开源性质也促进了算法共享和交流,推动了强化学习领域的发展。 总之,OpenAI Gym是一个强大的工具包,为研究者提供了广泛的强化学习环境和便利的开发、测试以及比较算法的功能。它的开源性质和通用接口设计使得研究者能够更加高效地进行算法的开发和创新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值