본문 바로가기
IT

OpenAI GYM 환경을 이용한 강화 학습 실습

by 작은비움 2024. 7. 17.
728x90
반응형
SMALL

이번 글에서는 OpenAI GYM 환경을 활용하여 강화 학습을 실습하는 방법을 소개합니다. 특히, Frozen Lake 게임을 통해 에이전트가 최적의 경로를 찾아가는 과정을 살펴보겠습니다. 먼저, OpenAI GYM과 TensorFlow를 설치하고, 환경을 초기화한 후, 에이전트가 직접 키보드 입력을 통해 환경을 탐험하는 예제를 통해 강화 학습의 기본 개념을 이해해보겠습니다.

https://www.youtube.com/watch?v=xvDAURQVDhk

 

OpenAI GYM과 TensorFlow 설치

먼저, OpenAI GYM과 TensorFlow를 설치해야 합니다. 이를 위해 다음 명령어를 사용합니다:

pip install gym tensorflow
 
 

설치가 완료되면, Python 인터프리터에서 제대로 설치되었는지 확인합니다:

 

import gym
import tensorflow as tf

print("OpenAI GYM and TensorFlow installed successfully!")

 

이제 OpenAI GYM 환경을 활용하여 강화 학습을 실습할 준비가 완료되었습니다.

 

환경 설정 및 초기화

Frozen Lake 환경 설정

Frozen Lake는 에이전트가 얼음 위를 이동하여 목표 지점에 도달하는 환경입니다. 이 환경에서 에이전트는 좌우상하로 이동할 수 있으며, 구멍에 빠지지 않고 목표 지점에 도달해야 합니다.

python
코드 복사
 
import gym

env = gym.make('FrozenLake-v0')
state = env.reset()

환경 초기화

환경을 초기화하여 첫 번째 상태를 얻습니다. 이 상태에서 에이전트는 행동을 선택하고, 그 결과를 확인하며 학습을 진행합니다.

python
코드 복사
 
state = env.reset()

키보드 입력을 통한 에이전트 제어

이번 예제에서는 키보드 입력을 통해 에이전트가 환경을 탐험하는 방법을 소개합니다. 이를 통해 강화 학습 환경에서 에이전트가 어떻게 행동을 선택하고, 그 결과를 학습하는지 이해할 수 있습니다.

키보드 입력 처리

Python에서 키보드 입력을 처리하여 에이전트를 제어하기 위해 다음 코드를 사용합니다:

python
코드 복사
 
import sys
import gym
import termios
import tty

def get_key():
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    try:
        tty.setraw(sys.stdin.fileno())
        ch = sys.stdin.read(1)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
    return ch

actions = {
    'w': 3,  # up
    's': 1,  # down
    'a': 0,  # left
    'd': 2   # right
}

에이전트 제어

이제 키보드 입력을 통해 에이전트를 제어하는 코드를 작성합니다. 에이전트가 키 입력에 따라 행동을 선택하고, 그 결과를 출력합니다:

python
코드 복사
 
env = gym.make('FrozenLake-v0')
state = env.reset()
env.render()

while True:
    key = get_key()
    if key not in actions:
        print("Game terminated!")
        break

    action = actions[key]
    next_state, reward, done, info = env.step(action)
    env.render()
    print(f"State: {next_state}, Reward: {reward}, Done: {done}, Info: {info}")

    if done:
        print("Episode finished!")
        state = env.reset()
        env.render()
 

이 코드는 에이전트가 키보드 입력에 따라 움직이며, 각 행동에 따른 결과를 출력합니다.

 

강화 학습 알고리즘 적용: Q-러닝

Q-러닝 알고리즘 개요

Q-러닝은 상태-행동 쌍의 가치를 학습하여 최적의 행동을 선택하는 강화 학습 알고리즘입니다. Q-러닝 알고리즘은 다음과 같은 순서로 진행됩니다:

  1. 초기화: Q-테이블을 모든 상태-행동 쌍에 대해 0으로 초기화합니다.
  2. 에피소드 반복: 각 에피소드마다 상태를 초기화합니다.
  3. 행동 선택: 현재 상태에서 최적의 행동을 선택하거나 랜덤하게 선택합니다.
  4. 행동 수행: 선택한 행동을 환경에서 수행하고, 새로운 상태와 보상을 얻습니다.
  5. Q-값 업데이트: Q-값을 업데이트합니다.
  6. 상태 갱신: 새로운 상태로 현재 상태를 갱신합니다.
  7. 종료 조건: 에피소드가 종료되면 다음 에피소드를 시작합니다.

Q-러닝 알고리즘 구현

다음은 Q-러닝 알고리즘을 사용하여 Frozen Lake 환경을 학습하는 예제 코드입니다:

python
코드 복사
 
import numpy as np
import gym

env = gym.make('FrozenLake-v0')
Q = np.zeros([env.observation_space.n, env.action_space.n])
alpha = 0.1
gamma = 0.99
epsilon = 0.1

for episode in range(1000):
    state = env.reset()
    done = False
    while not done:
        if np.random.rand() < epsilon:
            action = env.action_space.sample()
        else:
            action = np.argmax(Q[state, :])
        
        next_state, reward, done, info = env.step(action)
        Q[state, action] = Q[state, action] + alpha * (reward + gamma * np.max(Q[next_state, :]) - Q[state, action])
        state = next_state

print("Q-테이블")
print(Q)
 

이 코드는 1000번의 에피소드를 반복하며 Q-테이블을 학습합니다. 학습이 완료된 후, Q-테이블을 출력합니다.

 

결론

OpenAI GYM은 강화 학습 알고리즘을 개발하고 테스트하는 데 매우 유용한 도구입니다. 다양한 환경을 제공하여 RL 알고리즘을 쉽게 실습할 수 있으며, 이를 통해 RL의 기본 원리와 응용 방법을 이해할 수 있습니다. Q-러닝과 같은 알고리즘을 통해 간단한 문제를 해결하는 방법을 배워보세요.

태그

강화학습, OpenAIGYM, 머신러닝, 인공지능, 프로즌레이크, Q러닝, 자율주행, 로봇제어, 게임AI, 추천시스템

728x90
반응형
LIST