마이그레이션 가이드 - v0.21에서 v1.0.0으로¶
Gymnasium은 `OpenAI Gym v0.26 <https://github.com/openai/gym/releases/tag/0.26.2>`_의 포크이며, `Gym v0.21 <https://github.com/openai/gym/releases/tag/v0.21.0>`_에서 대대적인 파괴적 변경이 있었습니다. 이 가이드에서는 많은 튜토리얼이 작성된 Gym v0.21에서 Gym v0.26 (및 1.0.0을 포함한 이후 버전)으로의 API 변경 사항을 간략하게 설명합니다. v0.21 API에 여전히 묶여 있는 환경의 경우 `가이드 </content/gym_compatibility>`를 참조하십시오.
v0.21 예제 코드¶
import gym
env = gym.make("LunarLander-v3", options={})
env.seed(123)
observation = env.reset()
done = False
while not done:
action = env.action_space.sample() # agent policy that uses the observation and info
observation, reward, done, info = env.step(action)
env.render(mode="human")
env.close()
v0.26 및 이후 버전(v1.0.0 포함) 예제 코드¶
import gym
env = gym.make("LunarLander-v3", render_mode="human")
observation, info = env.reset(seed=123, options={})
done = False
while not done:
action = env.action_space.sample() # agent policy that uses the observation and info
observation, reward, terminated, truncated, info = env.step(action)
done = terminated or truncated
env.close()
시드 및 난수 생성기¶
``Env.seed()``는 환경 재설정 시에만 시드를 변경할 수 있도록 Gym v0.26 환경에서 ``Env.reset(seed=seed)``로 대체되어 제거되었습니다. ``seed``를 제거한 결정은 일부 환경이 에피소드 내에서 난수 생성기를 변경할 수 없고 새로운 에피소드 시작 시에만 변경해야 하는 에뮬레이터를 사용하기 때문입니다. 난수 생성기를 제어하는 것이 중요한 경우가 있음을 인지하고 있으며, 이러한 경우 환경이 내장 난수 생성기를 사용하는 경우 사용자는 속성 :attr:`np_random`을 사용하여 수동으로 시드를 설정할 수 있습니다.
Gymnasium v0.26은 사용자 지정 난수 생성기 대신 ``numpy.random.Generator``를 사용하도록 변경되었습니다. 이는 ``randint``와 같은 여러 함수가 ``integers``로 대체되어 제거되었음을 의미합니다. 일부 환경에서는 외부 난수 생성기를 사용할 수 있지만, 래퍼 및 외부 사용자가 접근하고 활용할 수 있는 속성 :attr:`np_random`을 사용하는 것을 권장합니다.
환경 재설정¶
v0.26+에서는 reset`이 두 개의 선택적 매개변수를 받고 하나의 값을 반환합니다. 이는 매개변수를 받지 않고 ``None``을 반환하는 v0.21과 대조됩니다. 두 매개변수는 난수 생성기 설정을 위한 ``seed``와 재설정 시 환경에 추가 데이터를 전달할 수 있는 ``options``입니다. 예를 들어, 클래식 제어에서는 이제 ``options`()
매개변수를 통해 사용자가 상태 경계의 범위를 수정할 수 있습니다. 자세한 내용은 원본 `PR <https://github.com/openai/gym/pull/2921>`_을 참조하십시오.
:meth:`reset`은 또한 :meth:`step`에서 반환된 ``info``와 유사하게 ``info``를 반환합니다. 이는 ``info``가 다음 단계에서 사용되거나 저장되는 메트릭 또는 유효한 행동 마스크를 포함할 수 있기 때문에 중요합니다.
이전 환경을 업데이트하려면, :meth:`reset`의 첫 번째 줄에서 ``super().reset(seed=seed)``를 호출하는 것을 강력히 권장합니다. 이렇게 하면 시드 값으로 :attr:`np_random`이 자동으로 업데이트됩니다.
환경 스텝¶
v0.21에서 :meth:`step`의 타입 정의는 다음 관찰, 스텝에서의 보상, 에피소드가 완료되었는지 여부 및 스텝에서의 추가 정보를 나타내는 ``tuple[ObsType, SupportsFloat, bool, dict[str, Any]``입니다. 곧 블로그 게시물에서 자세히 설명될 재현성 문제로 인해, 추가적인 불리언 값을 추가하여 타입 정의를 ``tuple[ObsType, SupportsFloat, bool, bool, dict[str, Any]]``로 변경했습니다. 이 추가 불리언은 이제 `terminated`와 `truncated`로 변경된 이전의 `done`에 해당합니다. 이러한 변경 사항은 Gym `v0.26 <https://github.com/openai/gym/releases/tag/0.26.0>`_에서 도입되었습니다 (``v25 <https://github.com/openai/gym/releases/tag/0.25.0>`_에서는 기본적으로 비활성화).
업데이트를 원하는 사용자의 경우, 대부분의 경우 :meth:`step`에서 ``done``을 ``terminated``와 ``truncated=False``로 바꾸면 대부분의 문제를 해결할 수 있습니다. 그러나 종료가 아닌 에피소드 중단의 이유가 있는 환경은 관련 `PR <https://github.com/openai/gym/pull/2752>`_을 자세히 읽어야 합니다. 환경을 반복하는 사용자는 예제 코드에 표시된 대로 ``done = terminated or truncated``를 수정해야 합니다. 학습 라이브러리의 경우, 주된 차이점은 부트스트래핑이 발생해야 하는지 여부를 나타내는 ``done``을 ``terminated``로 변경하는 것입니다.
TimeLimit 래퍼¶
v0.21에서 TimeLimit
래퍼는 에이전트가 터미널 상태에 도달하지 않고 시간 제한에 도달할 때마다 info
딕셔너리에 ``TimeLimit.truncated``라는 추가 키를 추가했습니다.
v0.26+에서는 이 정보가 이전 섹션에서 설명된 truncated 반환 값을 통해 대신 전달됩니다. 이는 에이전트가 터미널 상태에 도달했는지 여부와 관계없이 시간 제한에 도달하면 `True`입니다. 이전 딕셔너리 항목은 ``truncated and not terminated``와 동일합니다.
환경 렌더링¶
v0.26에서는 새로운 렌더 API가 도입되어 일부 환경에서는 즉석에서 렌더 모드 변경을 허용하지 않으므로 초기화 시 렌더 모드가 고정됩니다. 따라서 사용자는 위 v0.26+ 예제 코드에 표시된 것처럼 이제 gym.make
내에서 :attr:`render_mode`를 지정해야 합니다.
변경 사항에 대한 더 자세한 설명은 `요약 <https://younis.dev/blog/render-api/>`_을 참조하십시오.
제거된 코드¶
GoalEnv - 이 기능은 제거되었습니다. 필요한 사용자는 환경을 다시 구현하거나 이 환경의 구현이 포함된 Gymnasium Robotics를 사용해야 합니다.
from gym.envs.classic_control import rendering
- 이 기능은 사용자가 자체 렌더링 시스템을 구현하도록 장려하기 위해 제거되었습니다. Gymnasium 환경은 pygame을 사용하여 코딩됩니다.로봇 환경 - 로봇 환경은 Gymnasium Robotics 프로젝트로 이동되었습니다.
Monitor 래퍼 - 이 래퍼는 두 개의 별도 래퍼인 :class:`RecordVideo`와 :class:`RecordEpisodeStatistics`로 대체되었습니다.