(3) 更為標準的建立Gym環境的方式(一個PIP包的形式)——學習筆記

永不言棄的小穎子發表於2020-10-23
  1. 搭建框架,首先確定檔案結構:
custom-gym/
|-- README.md
|-- setup.py
|-- custom_gym/
|  |-- __init__.py
|  |-- envs/
|  |  |-- __init__.py
|  |  |-- custom_env.py
|  |  |-- custom_env_extend.py

一級目錄為custom-gym. 你可以取任何不衝突的名字。包含setup.py(安裝), README.md(說明書)custom_gym資料夾(環境主體)。

二級目錄為custom_gym.包含init.py(初始化)envs資料夾(環境指令碼)

三級目錄為envs.包含init.py(初始化)和兩個測試環境指令碼custom_env.pycustom_env_extend.py(當然你也可以只測試一個或者多加幾個試試)。

  1. 配置給個檔案
    (1) custom-gym/README.md 可以空著,等寫好壞境再寫描述。
    (2) custom-gym/setup.py 應該包含:
from setuptools import setup

setup(name='custom_gym',        # Secondary directory
    version='0.1',
    install_requires=['gym']    # And any other dependencies needs
)

(3) custom-gym/custom_gym/init.py 應該包含:

from gym.envs.registration import register

register(
    id='custom_env-v0',                                   # Format should be xxx-v0, xxx-v1....
    entry_point='custom_gym.envs:CustomEnv',              # Expalined in envs/__init__.py
)
register(
    id='custom_env_extend-v0',
    entry_point='custom_gym.envs:CustomEnvExtend',
)

(4) custom-gym/custom_gym/envs/init.py 應該包含:

from custom_gym.envs.custom_env import CustomEnv
from custom_gym.envs.custom_env import CustomEnvExtend

(5) custom-gym/custom_gym/envs/custom_env.py 應該長這個樣子:

import gym

class CustomEnv(gym.Env):
    def __init__(self):
        print('CustomEnv Environment initialized')
    def step(self):
        print('CustomEnv Step successful!')
    def reset(self):
        print('CustomEnv Environment reset')
# 這裡省去了render,close等模組

(6) 同理,custom-gym/custom_gym/envs/custom_env_extend.py 應該長這個樣子:

import gym

class CustomEnvExtend(gym.Env):
    def __init__(self):
        print('CustomEnvExtend Environment initialized')
    def step(self):
        print('CustomEnvExtend Step successful!')
    def reset(self):
        print('CustomEnvExtend Environment reset')
  1. 安裝與測試
    開啟Anaconda Prompt, 切換目錄到一級目錄custom-gym,就是包含setup.py這個資料夾。然後執行:pip install -e .
    接下來就可以愉快的測試了:
import gym
import custom_gym

env = gym.make('custom_env-v0')
env.step()
env.reset()

env2 = gym.make('custom_env_extend-v0')
env2.step()
env2.reset()

參考:https://www.zhihu.com/collection/581976137

相關文章