Создание индивидуальной среды тренажерного зала для обучения с подкреплением

OpenAI Gym стал стандартным API для обучения с подкреплением. У них есть широкий выбор сред, из которых пользователи могут выбирать для тестирования новых алгоритмов и разработок. Кроме того, эти среды образуют набор для сравнительного анализа, и с ними взаимодействует все больше и больше готовых алгоритмов. По этой причине, если вы хотите создать свою собственную среду и использовать эти стандартные алгоритмы, вам необходимо упаковать свою среду, чтобы она соответствовала API OpenAI Gym. Позвольте мне показать вам, как это сделать.

TL;DR

Мы пошагово рассмотрим процесс настройки пользовательской среды для работы с OpenAI Gym. Если вам не нравится читать, посмотрите мое видео на YouTube.

Файловая структура

Наиболее важно отметить файловую структуру для настройки, потому что она очень специфична, но, к счастью, содержит только несколько ключевых компонентов.

custom_gym/
|--setup.py
|--envs/
|  |--__init__.py
|  |--custom_env_dir/
|  |  |--custom_env.py
|  |  |--__init__.py

В нашем случае каталог custom_gym/ - это просто каталог верхнего уровня, который мы будем использовать для организации наших сред.

setup.py имеет наши требования к установке.

envs/ содержит подкаталоги для наших сред, а envs/__init__.py содержит функции регистрации тренажерного зала (мы рассмотрим все эти детали всего через минуту).

Затем у нас есть custom_env_dir/, где содержатся сами среды. Если вы посмотрите OpenAI Gym на GitHub, вы увидите это с разбивкой по классам проблем, например classic_control, robotics, mujuco и так далее.

Внутри этих каталогов у нас есть наш custom_env.py, куда мы помещаем код для нашей среды, и еще один __init__.py, который будет содержать операторы импорта.

Пошаговая процедура

Мы собираемся создать нашу собственную среду, выполняя этот шаг за раз. Я собираюсь пройтись по ним так, как будто вы работаете из командной строки, но если нет, просто обратите внимание, что cd означает, что мы переходим в каталог, mkdir означает, что мы создаем новый каталог, а touch означает, что мы создание нового файла. Для установки вам понадобится доступ к командной строке, потому что в конце мы будем вызывать pip, но нам больше ничего не понадобится.

Итак, откройте свой терминал и приступайте к работе!

Главный каталог

Перейдите в каталог, в котором вы хотите создать среду, и запустите:

mkdir custom_gym

Затем войдите в него с помощью:

cd custom_gym

Затем создайте подкаталог для наших сред с помощью mkdir envs.

setup.py файл

Затем убедитесь, что вы создали свой setup.py файл с touch setup.py.

Откройте setup.py и добавьте следующий код:

from setuptools import setup
setup(name=’custom_env’,
    version=’0.1',
    install_requires=[‘gym’]
)

Это минимальное требование для работы. Убедитесь, что вы добавили любые другие необходимые пакеты помимо gym, если это необходимо для вашей установки. После этого сохраните и закройте файл.

envs подкаталог

В вашем custom_gym каталоге введите envs с cd envs.

Оказавшись внутри, мы можем сделать наш custom_env_dir каталог для хранения нашей среды, используя mkdir custom_env_dir. Также нам нужно создать __init__.py файл с touch __init__.py.

Откройте свой любимый текстовый редактор и откройте __init__.py. Внутри нам нужно добавить нашу регистрационную информацию, чтобы gym.make() распознал нашу новую среду. Внутри __init__.py нам нужно добавить:

from gym.envs.registration import register
register(id=’CustomEnv-v0',
    entry_point=’envs.custom_env_dir:CustomEnv’
)

Обратите внимание, что ваш id должен соответствовать соглашению name-vX. В коде регистрации есть регулярное выражение, которое проверяет, следует ли за вашим именем дефис, строчная буква «v» и число, в противном случае вы получите сообщение об ошибке.

Вы также можете включить в регистрацию другую информацию, например max_episode_steps, reward_threshold и kwargs. Посмотрите еще несколько идей в файле OpenAI Gym __init__.py.

custom_env_dir подкаталог

В нашем последнем подкаталоге мы добавим еще __init__.py и нашу новую среду.

Для пользовательской среды создайте файл с touch custom_env.py и откройте его в текстовом редакторе. Внутри нам нужно настроить нашу среду как класс с помощью нескольких основных методов: __init__(), step() и reset(). Окружение с голыми костями будет выглядеть так:

import gym
class CustomEnv(gym.Env):
    def __init__(self):
        print(‘Environment initialized’)
    def step(self):
        print(‘Step successful!’)
    def reset(self):
        print(‘Environment reset’)

Именно здесь происходит вся важная работа по созданию среды, в которой можно проводить интересные исследования. Однако, чтобы заставить это работать, нам нужен последний файл, наш __init__.py.

Для custom_gym/envs/custom_env_dir/__init__.py создайте __init__.py с touch __init__.py, затем откройте его в текстовом редакторе. Внутри у нас будет одна строка для импорта нашего настраиваемого класса среды.

from envs.custom_env_dir.custom_env import CustomEnv

Это просто импорт той среды, которую мы только что создали, чтобы gym.make() знал, что импортировать, когда мы ее запустим.

Установка

Когда все эти файлы будут размещены, мы сможем установить и протестировать нашу новую среду. Вернитесь в каталог envs, где находится ваш setup.py файл, и запустите:

pip install -e .

Все будет установлено в соответствии с вашим файлом, и вы будете готовы к работе.

Чтобы проверить и убедиться во всем этом, вы можете открыть интерпретатор Python и запустить:

import gym
import envs
env = gym.make('CustomEnv-v0')
env.step()
env.reset()

Если вы получили все значения, указанные выше, значит, вы все настроили правильно и готовы создавать пользовательские среды для RL Bliss!

Не беспокойтесь, если вы допустили ошибку, либо обновите и переустановите его после изменений, либо запустите: pip uninstall custom_env и попробуйте еще раз.

Если вы хотите, вы можете посмотреть видео ниже, чтобы увидеть этот процесс в реальном времени, или просто выполните каждый из шагов по очереди внизу моего сообщения здесь.