1차시에서는 시간이 2주밖에 안되고 기존 스터디원과 합을 맞추는 과정이라 생각했기에 이전에 해결했던 문제로 진행합니다.


첫번째 문제는 Cartpole입니다. 좌우로 움직일 수 있는 카트가 있고, 고정되어 있는 막대를 떨어뜨리지 않고 균형을 잘 잡을 수 있어야 합니다. Cartpole의 environment는 gymnasium 라이브러리를 이용합니다. 해당 라이브러리의 자세한 설명은 해당 링크의 Description을 읽어보세요.

Gymnasium Documentation

사용자 조종 환경 구성

강화학습 모델이 게임하지 않고, 사용자 입력을 받아 게임을 진행합니다. 1차시이므로 코드를 제공합니다.

"""
CartPole-v1 게임을 플레이하는 코드입니다.
키보드의 k와 l을 눌러서 왼쪽과 오른쪽으로 이동할 수 있습니다.
"""

import gymnasium as gym
import time

action = 0

##############################################
# 키보드 입력을 받아 action을 결정하는 코드
from pynput import keyboard  # pip install pynput

def left():
    global action
    action = 0

def right():
    global action
    action = 1

listener = keyboard.GlobalHotKeys({
    'k': left,  # k는 왼쪽으로 이동
    'l': right  # l은 오른쪽으로 이동
})

listener.start()
##############################################

env = gym.make('CartPole-v1', render_mode="human")
env.reset()
print("READY!")
time.sleep(2)

score = 0

while True:
    # env.step 진행
    _, _, done, _, _ = env.step(action)

    if done:
        print("GAME OVER! score: {}".format(score))
        time.sleep(1)
        break

    score += 1
    time.sleep(0.1)

학습

cartpole을 학습할 수 있는 코드를 만듭니다.

학습을 마치면 인퍼런스에 사용할 모델을 세이브 합니다.

인퍼런스

세이브 한 모델을 불러와서 잘 작동하는지 확인해봅니다.