[Deep RL Course] Q-Learning 실습(2) - Taxi

2025. 1. 8. 16:00·강화학습
728x90

이 글은 Deep RL Course를 학습하고 정리한 글입니다.

 

 

 

 

 

Taxi-v3 환경 생성 및 이해하기

 

 

Taxi-v3는 그리드 월드 환경에서 에이전트가 택시를 운전하며 승객을 특정 위치에서 태워 목적지에 데려다주는 강화학습 환경입니다. 

 

 

Taxi-v3 환경에는 R(빨강), G(초록), Y(노랑), B(파랑)의 네 가지 지정된 위치가 있습니다. 에피소드 시작 시 택시는 랜덤한 위치에서 시작하며 승객은 랜덤한 위치에 있습니다. 택시는 승객을 태워 목적지로 이동시킨 뒤 승객을 내리면 에피소드가 종료됩니다.

env = gym.make("Taxi-v3", render_mode="rgb_array")

 

 

 

 

 

상태 공간 (State space)

 

상태 공간은 총 500개의 상태로 구성됩니다. 25개의 택시 위치, 5개의 승객 위치(승객이 택시 안에 있는 경우 포함), 4개의 목적지 위치로 구성됩니다. 

state_space = env.observation_space.n
print("There are ", state_space, " possible states")
There are  500  possible states

 

 

 

 

 

행동 공간 (Action space)

 

에이전트는 0(아래로 이동), 1(위로 이동), 2(오른쪽으로 이동), 3(왼쪽으로 이동), 4(승객 태우기), 5(승객 내리기)의 6개의 이산적인 행동을 수행할 수 있습니다. 

action_space = env.action_space.n
print("There are ", action_space, " possible actions")
There are  6  possible actions

 

 

 

 

 

보상 함수 (Reward function)

 

  • +1: 매 스텝마다 기본적으로 받는 보상
  • +20: 승객을 목적지에 성공적으로 데려다주었을 때
  • -10: 잘못된 "승객 태우기" 또는 "승객 내리기" 행동을 수행했을 때

 

 

 

 

 

 

 

 

 

 

Q- 테이블 생성

 

 

Q-테이블을 상태 공간(500개)과 행동 공간(6개)을 기반으로 생성됩니다.

Qtable_taxi = initialize_q_table(state_space, action_space)

print(Qtable_taxi)
print("Q-table shape: ", Qtable_taxi .shape)
[[0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 ...
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]]
Q-table shape:  (500, 6)

 

 

 

 

 

 

 

 

 

 

하이퍼파라미터 정의

 

 

학습 관련 하이퍼파라미터

n_training_episodes = 25000
learning_rate = 0.7

 

 

 

 

 

평가 관련 하이퍼파라미터

n_eval_episodes = 100

eval_seed = [
    16, 54, 165, 177, 191, 191, 120, 80, 149, 178, 48, 38, 6, 125, 174, 73, 50, 172, 100,
    148, 146, 6, 25, 40, 68, 148, 49, 167, 9, 97, 164, 176, 61, 7, 54, 55, 161, 131, 184,
    51, 170, 12, 120, 113, 95, 126, 51, 98, 36, 135, 54, 82, 45, 95, 89, 59, 95, 124, 9,
    113, 58, 85, 51, 134, 121, 169, 105, 21, 30, 11, 50, 65, 12, 43, 82, 145, 152, 97,
    106, 55, 31, 85, 38, 112, 102, 168, 123, 97, 21, 83, 158, 26, 80, 63, 5, 81, 32, 11,
    28, 148
]

 

 

 

 

 

환경 관련 하이퍼파라미터

env_id = "Taxi-v3"
max_steps = 99
gamma = 0.95

 

 

 

 

 

탐험 관련 하이퍼파라미터

max_epsilon = 1.0  
min_epsilon = 0.05 
decay_rate = 0.005

 

 

 

 

 

 

 

 

 

 

Q-Learning 에이전트 학습

 

 

학습 함수 train을 사용하여 Q-테이블을 학습합니다. 

Qtable_taxi = train(n_training_episodes, min_epsilon, max_epsilon, decay_rate, env, max_steps, Qtable_taxi)
print(Qtable_taxi)
array([[  0.        ,   0.        ,   0.        ,   0.        ,
          0.        ,   0.        ],
       [  2.75200369,   3.94943225,   2.75200359,   3.94947757,
          5.20997639,  -5.05052243],
       [  7.93348504,   9.40366769,   7.93349184,   9.40367562,
         10.9512375 ,   0.40367562],
       ...,
       [ 10.9512375 ,  12.58025   ,  10.9512375 ,   9.40367562,
          1.9512375 ,   1.95123749],
       [ -3.59310716,  -3.39674194,  -3.26342599,   6.53681725,
        -11.17787492, -11.0719525 ],
       [  9.260552  ,   9.45174854,  -1.3755    ,  18.        ,
         -9.1       ,   2.85648565]])

 

 

 

 

 

 

 

 

 

 

Hugging Face Hub에 모델 업로드

 

 

모델 딕셔너리 생성

 

모델의 하이퍼파라미터와 Q-테이블을 포함한 딕셔너리를 생성합니다. 

model = {
    "env_id": env_id,
    "max_steps": max_steps,
    "n_training_episodes": n_training_episodes,
    "n_eval_episodes": n_eval_episodes,
    "eval_seed": eval_seed,
    "learning_rate": learning_rate,
    "gamma": gamma,
    "max_epsilon": max_epsilon,
    "min_epsilon": min_epsilon,
    "decay_rate": decay_rate,
    "qtable": Qtable_taxi,
}

 

 

 

 

 

Hugging Face Hub에 업로드

 

username = "RangDev"  # Hugging Face 사용자 이름
repo_name = "q-Taxi-v3"

push_to_hub(repo_id=f"{username}/{repo_name}", model=model, env=env)
Your model is pushed to the Hub. You can view your model here:  https://huggingface.co/RangDev/q-Taxi-v3

 

 

 

 

 

 

 

 

 

 

728x90

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

[파이썬(Python)] Deep Q-Network (DQN)  (0) 2025.01.10
[Deep RL Course] Q-Learning에서 Deep Q-Learning으로  (0) 2025.01.09
[Deep RL Course] Q-Learning 실습(1) - Frozen Lake  (0) 2025.01.08
[Deep RL Course] Q-Learning 예제  (0) 2025.01.07
[Deep RL Course] Q-Learning  (0) 2025.01.07
'강화학습' 카테고리의 다른 글
  • [파이썬(Python)] Deep Q-Network (DQN)
  • [Deep RL Course] Q-Learning에서 Deep Q-Learning으로
  • [Deep RL Course] Q-Learning 실습(1) - Frozen Lake
  • [Deep RL Course] Q-Learning 예제
랑뎁
랑뎁
  • 랑뎁
    RangDev.
    랑뎁
  • 전체
    오늘
    어제
    • 분류 전체보기 (270)
      • 취준 (59)
        • 경제신문스크랩 (59)
      • 파이썬 (2)
      • 코딩테스트 대비 (168)
      • 수학 (2)
      • 머신러닝 (0)
      • 컴퓨터비전 (1)
      • 강화학습 (33)
      • Git (3)
      • 자격증 (1)
        • 한국사 능력 검정 1급 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.2
랑뎁
[Deep RL Course] Q-Learning 실습(2) - Taxi
상단으로

티스토리툴바