이 글은 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
'강화학습' 카테고리의 다른 글
[파이썬(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 |