코드: 1번의 MCTS Iteration
드디어 진짜 MCTS! 한 번의 iteration이 4줄 함수:
def mcts_iteration(root):
leaf = select(root) # ① 트리 따라 내려감
new_child = expand(leaf) # ② 새 자식 추가
winner = simulate(new_child) # ③ Rollout
backup(new_child, winner) # ④ 결과 역전파
500번 iteration 후 결과:
- 가운데 (1,1)에 90번 방문, 승률 75% — 가장 많이 시도되고 가장 강함
- 코너들 (0,0), (0,2), (2,2): 49~74번 방문, 61~71%
- 변들 (0,1), (1,0), (1,2), (2,1): 39~54번 방문, 55~64%
- 약한 자리 (2,0): 34번만 방문 — UCB1이 별로라 판단
🎯 Pure Monte Carlo와의 차이
지난 챕터 Pure MC: 모든 자리에 1000번씩 균등 시도 (9000번 총). 가운데 70.7% 발견.
지금 MCTS: 500번만 시도. 가운데에 90번 (가장 많이) 시도하면서 75% 발견. 1/18의 시도로 더 정확한 답.
이게 UCB1의 힘 — 좋은 수에 더 많은 자원 자동 집중.
💡 visits가 더 신뢰할 만한 지표
약한 자리 (2,0)의 승률이 54%로 나오는데, 시도가 34번뿐이라 통계적으로 의미 약함. UCB1이 별로라 판단해 덜 시도.
그래서 MCTS에서 최선의 수는 "승률 최고"가 아니라 "visits 최고". 위 결과에서 (1,1)이 압도적 최다 → 정답.
다음 페이지에서 더 많은 iteration으로 정확도를 높이고, 다양한 보드에 적용.
PYTHON