OpenAI Gym: gym.make() не ссылается на обновленный код Env

Вопрос или проблема

Я создаю свою кастомную среду Gym, и до сих пор всё работало хорошо, следуя инструкциям, распространённым по интернету. Однако сейчас я нахожусь на этапе, когда часто происходят изменения в классе среды (наследуя gym.Env), и их нужно тестировать. После последних изменений в коде методов reset() и step() оказывается, что теперь gym.make() возвращает объект среды, который выполняет старый код, который был действителен ранее.

Так что мой вопрос: Как решить эту проблему?
Я не сторонник увеличения версии, например, до v1, так как исходная v0 всё ещё находится в разработке.

Файл __init__.py на уровне пакета содержит следующее:

from importlib.metadata import version
from gym.envs.registration import register

__version__ = version("wksim")
register(id="WkEnv-v0", entry_point="wksim.wkenv:WkEnv")

Примечание: класс WkEnv находится в файле wkenv.py

В следующем исполняемом файле я тестирую следующим образом:

import gym
from wksim.wkenv import WkEnv

if __name__ == "__main__":
    env_config = {
        "cli_mode": True,
        "cache_trace": True,
        "instance": "minimal",
        "UNIFORM_TIME_SLOT_LENGTH": 0.05,
    }

    env = gym.make("WkEnv-v0", config=env_config)
    initial_state = env.reset()

Примечание: я узнал, что кастомный класс среды должен быть импортирован, иначе gym.make() не найдёт идентификатор среды.

Эта проблема была решена даже с gym 0.21.0, но также и теперь после обновления до gymnasium. Коренная причина заключалась в том, как был установлен весь пакет. Использование pip install -e решило эту проблему.

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

Сначала я попробовал pip install -e . в каталоге gym, содержащем setup.py. Не знаю, что это делает, но после этого я открываю python в той же папке и успешно импортирую gym_XYZ для своей игры.

Затем я поднимаюсь на уровень вверх в каталоге, где находится мой учебный код. Теперь python не может импортировать gym_XYZ, поэтому мне нужно добавить следующее:

import sys
sys.path.insert(0, './gym-XYZ')
import gym_XYZ

И тогда это работает.

Ответ или решение

Проблема с обновлением кода окружения в OpenAI Gym: Решения и рекомендации

Если вы столкнулись с ситуацией, когда вызов gym.make() возвращает объект окружения, который использует старый код, вероятнее всего, проблема кроется в способе установки или обновления вашего кастомного окружения. Эта проблема может возникнуть даже при частых изменениях в классе окружения, основанном на gym.Env. Вот подробный анализ и рекомендации для решения данной проблемы.

1. Проблема обновления окружения

Когда вы вносите изменения в методы reset() или step(), но gym.make() продолжает возвращать старую версию окружения, это говорит о том, что ваше окружение не обновляется должным образом. Это может произойти, если:

  • Окружение было установлено некорректно.
  • Вы работаете с кэшем старых версий библиотек или модулей.

2. Рекомендации по установке

Чтобы убедиться, что ваша последняя версия окружения используется, выполните следующие шаги:

Установка в режиме разработки

Используйте команду pip install -e . в корневой директории вашего проекта, где находится setup.py. Это позволит вам установить пакет в режиме разработки, предоставляя доступ к изменениям в коде сразу без необходимости повторной установки пакета. В результате ваши изменения будут видны сразу же при каждом запуске программы.

Пример команд
cd /path/to/your/project
pip install -e .

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

3. Импорт окружения

Не забудьте, что ваш класс окружения должен быть импортирован, прежде чем вы сможете его использовать через gym.make(). Например:

from wksim.wkenv import WkEnv

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

4. Проверка каталога Python

Если после установки в режиме разработки вы все еще сталкиваетесь с проблемами, проверьте, правильно ли настроен ваш sys.path. Убедитесь, что путь к вашему пакету добавлен перед импортом:

import sys
sys.path.insert(0, './path/to/your/environment')
import wksim

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

5. Кэширование и окружение

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

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...