정답을 알려주는 사람은 없어요. 🎯 도착 +10, 💀 함정 −10, 한 걸음 −0.1 — 오직 보상만으로 로봇이 시행착오 끝에 스스로 길을 찾아냅니다.
초록 = 기대 보상이 좋은 칸, 빨강 = 나쁜 칸 (진할수록 확신), 화살표 = 그 칸에서의 최선 행동이에요. S에서 출발한 🤖가 🎯(+10)을 찾아가요. 💀(−10)에 빠지면 그 판은 끝, 검은 칸은 벽. 초록이 🎯 근처부터 S쪽으로 번져 오는 걸 관찰해 보세요.
에피소드가 지날수록 선이 내려오면(스텝 수 감소) 학습이 되고 있는 거예요. 실패한 판(함정·60스텝 초과)은 60으로 표시돼요.
한 에피소드 = S에서 출발해 목표/함정/60스텝으로 끝나는 한 판이에요. 최단 경로는 10스텝 — 평균 스텝이 여기에 가까워질수록 잘 배운 거예요.
import numpy as np
Q = np.zeros((5, 7, 4)) # Q테이블: 세로 5 × 가로 7 × 행동 4
alpha, gamma, eps = 0.5, 0.9, 0.2 # 학습률, 할인율, 탐험률
for episode in range(500):
y, x = 4, 0 # 시작 칸 S
for step in range(60): # 최대 60스텝
if np.random.rand() < eps: # 탐험: 가끔은 아무 방향
a = np.random.randint(4)
else: # 활용: 지금까지의 최선
a = np.argmax(Q[y, x])
(ny, nx), r, done = env_step(y, x, a) # 한 칸 이동, 보상 받기
target = r if done else r + gamma * np.max(Q[ny, nx])
Q[y, x, a] += alpha * (target - Q[y, x, a]) # 예상을 조금 수정
y, x = ny, nx
if done: # 목표 도착/함정이면 한 판 끝
break