1주차: Reinforcement Learning 소개

[Reinforcement Learning이란?]

1. 정의

2. 주요 구성 요소

3. Reinforcement Learning의 목표

4. 정책(Policy)

5. 개발 환경 설정 (Google Colab 기준)

[실습1: PyTorch 텐서 기본 사용법]

1. 텐서 생성

import torch

x = torch.tensor([1.0, 2.0, 3.0])
print(x)
tensor([1., 2., 3.])

2. 텐서 연산

y = x + 2
print(y)
tensor([3., 4., 5.])

3. 텐서의 크기 확인

print(x.shape)
torch.Size([3])

4. 텐서의 데이터 타입 확인

print(x.dtype)
torch.float32

5. 텐서의 연산 기기 확인

print(x.device)
cpu

6. GPU 사용 가능 여부 확인 및 텐서 이동

if torch.cuda.is_available():
  device = torch.device('cuda')
  print('GPU 사용 가능')
else:
  device = torch.device('cpu')
  print('GPU 사용 불가능')

x = x.to(device)
print(x.device)
GPU 사용 불가능
cpu

7. 텐서의 요소 접근 및 변경

print(x[0])

x[0] = 10.0
print(x)
tensor(1.)
tensor([10.,  2.,  3.])

8. 텐서의 차원 변경

x = x.view(1, 3)  # (1, 3) 형태로 변환
print(x)
print(x.shape)
tensor([[10.,  2.,  3.]])
torch.Size([1, 3])

9. 텐서의 요소 합 및 최대값

print(torch.sum(x))

print(torch.max(x))
tensor(15.)
tensor(10.)

10. 텐서를 NumPy 배열로 변환 및 NumPy 배열을 텐서로 변환

x_np = x.cpu().numpy()
print(x_np)

x_tensor = torch.from_numpy(x_np)
print(x_tensor)
[[10.  2.  3.]]
tensor([[10.,  2.,  3.]])

[실습2: CartPole-v1 환경에서 랜덤 행동 수행하기]

1. 라이브러리 임포트

import gymnasium as gym
import random

2. 환경 생성

env = gym.make('CartPole-v1')

3. 에피소드 반복

for episode in range(10):  # 10개의 에피소드 실행
    observation, _ = env.reset()  # 환경 초기화
    done = False  # 에피소드가 종료되었는지 여부를 나타내는 변수를 초기화
    total_reward = 0  # 에피소드 동안 얻은 총 보상을 초기화

    while not done:  # 에피소드가 종료될 때까지 반복
        # 랜덤 행동 선택 (0: 왼쪽, 1: 오른쪽)
        action = env.action_space.sample()

        # 선택한 행동을 환경에 적용하고 다음 상태, 보상, 에피소드 종료 여부, 추가 정보를 반환
        next_observation, reward, terminated, truncated, info = env.step(action)
        done = terminated or truncated

        total_reward += reward  # 에피소드 동안 얻은 보상을 누적
        observation = next_observation  # 다음 상태 업데이트

        # 환경 렌더링 (주석 처리하면 렌더링을 비활성화)
        # env.render()

    # 각 에피소드가 종료될 때 총 보상을 출력
    print(f"Episode {episode + 1}: Total reward = {total_reward}")
Episode 1: Total reward = 30.0
Episode 2: Total reward = 19.0
Episode 3: Total reward = 38.0
Episode 4: Total reward = 19.0
Episode 5: Total reward = 14.0
Episode 6: Total reward = 18.0
Episode 7: Total reward = 11.0
Episode 8: Total reward = 33.0
Episode 9: Total reward = 51.0
Episode 10: Total reward = 33.0

4. 환경 종료

env.close()