gymnasium
gymnasium a.k.a gym
- gym: 오픈AI가 개발한 강화학습 환경을 위한 라이브러리
- 2021년부터 gymnasium으로 포크하여 Farama 재단이 관리
설치
!pip install gymnasium
임포트
import gymnasium as gym
- 대부분의 자료가 여전히 gym을 기준으로 작성되어 있으므로, gymnasium의 이름을 gym으로 임포트
밴딧 보행 bandit walk
- 밴딧 환경: 끝나지 않는(non-terminal) 상태가 오직 1개인 환경
- 밴딧 보행에서는 왼쪽-오른쪽 2가지 행동만 가능
- 시작 상태는 항상 가운데(상태 1)
- 결정론적 전이 함수: 왼쪽으로 가면(행동) 왼쪽으로 가고(다음 상태), 오른쪽으로 가면 오른쪽으로 감
- 왼쪽 상태 0에 도달하면 보상 0을 받고 종료
- 오른쪽 상태 2에 도달하면 보상 +1을 받고 종료

격자 세계 grid world
- 2차원 격자(grid) 형태의 환경
- 행위자가 할 수 있는 행동이 좌우 또는 동서남북 형태인 종류의 환경
- 강화학습 교육 및 연구에서 예제로 흔히 사용
- 밴딧 보행은 격자 세계를 사용
밴딧 보행 환경 구현하기
class BanditWalk(gym.Env):
def __init__(self):
self.action_space = gym.spaces.Discrete(2) # 행동 공간(0: 왼쪽, 1: 오른쪽)
self.observation_space = gym.spaces.Discrete(3) # 관찰 공간(위치: 0, 1, 2)
self.state = 1 # 시작 위치는 1번
def reset(self):
self.state = 1
return self.state, {}
def step(self, action):
if action == 0: # 왼쪽으로 가면
reward = 0 # 보상이 0점
self.state = 0 # 0번 위치로 이동
else: # 오른쪽으로 가면
reward = 1 # 보상이 1점
self.state = 2 # 2번 위치로 이동
return self.state, reward, True, False, {}
Discrete
- 정수의 유한한 부분집합
- 예시:
Discrete(2)
Discrete(3, start=-1)
- n: 요소의 수
- start: 가장 작은 값
space = gym.spaces.Discrete(2)
for _ in range(10):
print(space.sample())
MultiDiscrete
MultiDiscrete([2, 3])
Box
- n개의 닫힌 구간의 데카르트 곱
- 예시:
Box(low=-1.0, high=2.0, shape=(3, 4), dtype=np.float32)
Box(low=np.array([-1.0, -2.0]), high=np.array([2.0, 4.0]), dtype=np.float32)
- low: 구간의 하한
- high: 구간의 상한
- shape: 모양은 기본적으로 (1,)
- dtype: 자료형
무작위 전략
env = BanditWalk() # 환경을 설정
returns = []
for i in range(100): # 100번 반복
env.reset() # 환경을 초기화
terminated = False # 종료 안함
while not terminated: # 종료할 때까지 반복
action = env.action_space.sample() # 무작위로 행동을 고름
obs, reward, terminated, truncated, info = env.step(action) # 환경에 반영
else:
returns.append(reward) # 종료하면 보상을 기록
import numpy as np
np.mean(returns) # 이때까지 받은 보상의 평균
버전 간 차이
- reset: gym 신버전은 info를 반환하도록 변경
obs = env.reset() # 구버전
obs, info = env.reset() # 신버전
- step: gym 신버전은 done을 terminated와 truncated로 구분
obs, reward, done, info = env.step(action) # 구버전
obs, reward, terminated, truncated, info = env.step(action) # 신버전
- 책, 인터넷 등에 구버전 기준으로 되어 있는 자료들이 많으므로 주의가 필요
퀴즈
gymnasium은 어떤 목적의 라이브러리입니까?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.