Gymnasium — OpenAI Gym v0.21 에서 마이그레이션
Gymnasium 마이그레이션 가이드
Gymnasium 은 OpenAI Gym v0.26 의 포크이며, Gym v0.21 에서의 API 변화를 다루는 마이그레이션 가이드입니다.
왜 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) # 빠른 훈련