目录
参考链接
首先放上两个链接
首先创建一个目录结构
gym-foo/
README.md
setup.py
gym_foo/
__init__.py
envs/
__init__.py
foo_env.py
foo_extrahard_env.py
我自己的一级目录
二级目录
三级目录
一级目录 gym-foo
修改 setup.py
from setuptools import setup
setup(name='gym_foo', # 你自己的二级目录的名字
version='0.0.1',
install_requires=['gym'] # And any other dependencies foo needs
)
二级目录 gym-foo/gym_foo/
修改 文件 _init_.py
from gym.envs.registration import register
register(
id='foo-v0',
entry_point='gym_foo.envs:FooEnv',
)
三级目录 gym-foo/gym_foo/envs/
1、 加上你的环境 名字命名为 foo_env .py
类名为 FooEnv 这里千万不要打错了 因为后面要注册
这里我在官方环境基础上加上了打印
import gym
from gym import error, spaces, utils
from gym.utils import seeding
class FooEnv(gym.Env):
metadata = {'render.modes': ['human']}
def __init__(self):
self.action_space = spaces.Box(low=-1, high=1, shape=(3,)) # 动作空间
self.observation_space = spaces.Box(low=-1, high=1, shape=(1,)) # 状态空间
print("init")
def step(self, action):
print("step",action)
obs, reward, done, info = 1,2,3,4
return obs, reward, done, info
def reset(self):
print("reset")
def render(self, mode='human'):
print("render")
def close(self):
print("close")
2 修改 _init_.py 文件
from gym_foo.envs.foo_env import FooEnv
安装你的环境
回到一级目录
输入命令
pip install -e gym-foo
测试
import gym
env = gym.make('my_env:test-v0')
env.reset()
for _ in range(1000):
env.render()
action = env.action_space.sample()
print(action)
env.step(action) # take a random action
env.close() # 關閉視圖
就可以看到环境的打印啦
附言 第一次需要创建自己的环境需要注意什么?
首先是奖励的设置尤为重要,
- 对于同一类别的好坏 量纲不能差距过大,比如说好的奖励1分坏的却要惩罚-100分,
- 奖励最好有递增或者递减的感觉,比如虽然agent犯了错误 但是不能一刀切的全部给个-100分 而是应该依据它错误的程度,犯错严重就惩罚重一些 轻就扣少一点。
- 对于奖励或者错误的分数 如果随着训练 增幅是指数的增长的特别迅猛 则应该采取 分段奖励或者惩罚的函数,这样既能保证奖励的递增和递减也可以兼顾到量纲 让模型更容易的学习
- 奖励最终如果还是太大或者太小 可以采取 scaling的方式
- 动作和状态最好也要注意量纲归一化