Gymnasium — OpenAI Gym v0.21 에서 마이그레이션

Gymnasium 마이그레이션 가이드

Gymnasium 은 OpenAI Gym v0.26 의 포크이며, Gym v0.21 에서의 API 변화를 다루는 마이그레이션 가이드입니다.

출처: Gym Migration Guide — 공식문서

왜 API 가 바뀌었나

  • 모호한 에피소드 종료 — 단일 done 플래그가 '작업 완료'와 '시간 제한'을 구분하지 못함.
  • 일관성 없는 시딩 — 재현이 어려웠음.
  • 렌더링 복잡성 — 시각 모드 전환이 복잡했음.

핵심 변화 표

컴포넌트 v0.21 (Old) v0.26+ (New)
임포트 import gym import gymnasium as gym
리셋 obs = env.reset() obs, info = env.reset()
시딩 env.seed(42) env.reset(seed=42)
스텝 obs,reward,done,info obs,reward,terminated,truncated,info
에피소드 종료 while not done: while not (terminated or truncated):
렌더 모드 env.render(mode="human") gym.make(env_id, render_mode="human")

terminated / truncated 분리

obs, reward, terminated, truncated, info = env.step(action)
if terminated:
    target = reward                    # 자연 종료
elif truncated:
    target = reward + discount * value_function(next_obs)  # 시간 제한 → 가치 추정

terminated 는 작업 완료/실패(자연 종료), truncated 는 시간 제한 등 외부 제약으로 끝난 경우를 뜻하며, 값 부트스트래핑의 정확성에 핵심입니다.

렌더 모드

렌더 모드는 만들 때 고정합니다.

env = gym.make("CartPole-v1", render_mode="human")   # 시각
env = gym.make("CartPole-v1", render_mode=None)      # 빠른 훈련

더 알아보기