OpenAI Gym은 강화학습을 공부할 때, 간단한 API와 시뮬레이션 환경을 제공해 강화학습을 시험하고, 학습할 수 있는 라이브러리입니다.
- Gym은 다양한 환경을 제공하므로, 연구자나 개발자는 알고리즘을 비교하고 실험할 수 있습니다. 예를 들어, Q-Learning, DQN(Deep Q-Network), PPO(Proximal Policy Optimization) 등의 알고리즘을 여러 환경에서 테스트할 수 있습니다.
- Gym은 강화학습을 배우고 실습할 수 있는 훌륭한 도구입니다. 환경을 통해 기초적인 알고리즘부터 고급 알고리즘까지 학습할 수 있습니다.
머신러닝을 공부할 때, 타이타닉이나 아이리스 같은 내장 데이터셋과 유사하게 , Gym은 강화학습(RL)에서 환경(environment)을 제공하는 라이브러리입니다.
Gym을 설치하고, 강화학습의 Hello world인 Frozen Lake 게임을 실행하는 법을 확인합니다.
Q-Learning을 하기전에 OpenAI Gym을 간단하게 확인해 보겠습니다.
OpenAI Gym설치
!pip install gym
!pip install pygame
!pip install gym[toy_text]
3개 패키지를 설치합니다.
OpenAI Gym 구성요소
- 상태(State): 환경의 현재 상태를 나타냅니다.
- 행동(Action): 에이전트가 환경에서 취할 수 있는 행동.
- 보상(Reward): 에이전트가 취한 행동에 대해 환경이 제공하는 피드백.
- 정책(Policy): 주어진 상태에서 어떤 행동을 선택할지 결정하는 전략.
- 에피소드(Episode): 환경에서 시작하여 종료까지의 일련의 상태-행동 상호작용을 의미합니다.
reset() 메서드:
- reset()은 환경을 초기 상태로 재설정합니다. 새로운 에피소드를 시작할 때 사용됩니다.
state, info = env.reset()
step() 메서드:
- step()은 환경에서 하나의 행동을 실행하고 결과를 반환하는 메서드입니다. 이 메서드는 행동(action)을 받아서 새로운 상태(state), 보상(reward), 종료 여부(terminated), 타임아웃 여부(truncated) 등을 반환합니다.
state, reward, terminated, truncated, info = env.step(action)
렌더링(Rendering): Gym은 환경을 시각적으로 렌더링하는 기능도 제공합니다. 이 기능은 render() 메서드를 사용하여 환경의 상태를 시각적으로 보여줍니다. 예를 들어, FrozenLake 환경에서는 상태를 텍스트로 표시할 수도 있고, rgb_array 모드를 통해 이미지로도 표시할 수 있습니다.
Froze Lake
Frozen Lake는 OpenAI Gym의 toy_text 환경 중 하나로, 강화학습 알고리즘을 실험할 수 있는 간단한 환경입니다.
이 환경은 격자 형태의 얼음판에서 빠지지 않고 에이전트가 목표 지점에 도달하려고 하는 문제를 모델링합니다.
4*4의 Environment로 Hello World같은 가장 간단한 강화학습 알고리즘을 테스트하고 학습하는 데 사용됩니다.
Frozen(F) 호수 위를 걸어가면서 Holes(H)에 빠지지 않고 Start(S)에서 골(G)까지 얼어붙은 호수를 건너는 것을 목표로 합니다.
Environment "4x4" 격자
S가 시작, F가 얼어있는곳, H: 구멍, G는 골입니다.
문자로 아래와 같이 표시됩니다.
"SFFF",
"FHFH",
"FFFH",
"HFFG"
State : 0~14까지로 15개의 state가 존재합니다. 좌표 정보가 상태(State)로 Agent에 전달됩니다.
Action : 왼쪽, 오른쪽, 위, 아래 4개의 action이 가능합니다.
Action Space : [0,1,2,3]
0: 왼쪽
1: 아래로
2: 오른쪽
3: 위로
Reward : 골에 도착하면 1, 구정에 빠지거나 얼음은 0이 보상됩니다.
(G:1, H:0, F:0)
코드작성
gym make으로 environ을 생성합니다. 인자로 미리 만들어진 환경을 전달합니다.
mode에 text와 rgb를 생성할 수 있습니다.
gym.make("FrozenLake-v1", render_mode="rgb_array")
env.reset으로 초기 state를 생성합니다. reset하면 0번 위치로 초기화됩니다.
action은 아직 강화학습 알고리즘을 적용하지 않아 랜덤으로 생성합니다.
env.action_space.sample()
실제 행동은 env.step()으로 수행하고, 결과로 state와 reward 그리고, 종료여부등이 반환됩니다.
state, reward, terminated, truncated, info = env.step(action) # 행동 실행
terminated가 true거나, truncated가 true이면 종료합니다.
terminated는 구멍에 빠지거나, gorl에 도착했을 때 True
truncated는 timeout 일 경우 True
import gym
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import clear_output
# FrozenLake 환경 생성
env = gym.make("FrozenLake-v1", render_mode="rgb_array")
# 환경 초기화
state, info = env.reset()
# 종료
done = False
while not done: # 골에 도달하면 종료
action = env.action_space.sample() # 랜덤 행동 선택
state, reward, terminated, truncated, info = env.step(action) # 행동 실행
plt.imshow(env.render()) # 현재 state를 이미지로 렌더링
plt.axis('off')
clear_output(wait=True) # 이전 출력을 지우기
plt.show()
# Timeout
if truncated:
done = True
print('Timeout :', truncated, terminated, state)
# 종료
if terminated:
done = True
result = '성공 - 골도착' if state == 15 else '실패 - 구멍에 빠짐'
print(f'Result :{result}', truncated, terminated, state)
env.close()
실행 시 랜덤으로 실행되는것을 확인 할 수 있습니다.
'강화학습' 카테고리의 다른 글
5. 강화학습 - DQN(Deep Q-Network) (0) | 2025.01.18 |
---|---|
4. 강화학습 - Q-Network (0) | 2025.01.15 |
3. 강화학습 Q-Learning (0) | 2025.01.13 |
1. 강화학습(Reinforcement Learning) 개요 및 용어 (0) | 2025.01.13 |