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()

Result :실패 - 구멍에 빠짐 False True 12

 

실행 시 랜덤으로 실행되는것을 확인 할 수 있습니다.

 

'강화학습' 카테고리의 다른 글

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

+ Recent posts