시뮬레이션은 규칙을 요구한다
MCTS의 Expand 단계를 의사코드로 다시 쓰면:
def expand(node, game):
for a in legal_actions(node.state):
s_next = game.next_state(node.state, a) # ← 여기!
node.children.append(Node(state=s_next))
📖 game.next_state(s, a)의 의미
"상태 s에서 행동 a를 했을 때 다음 상태는?" 이 질문에 답하는 함수다.
바둑·체스·틱택토는 이 함수가 명시적으로 존재한다. 게임 규칙이 곧 이 함수다.
- 바둑: 빈 점에 돌 놓고, 따낼 돌 처리, 패 검사 → 다음 보드
- 체스: 말 이동, 캐슬링·앙파상 규칙 → 다음 포지션
- 틱택토: 빈 칸에 X 또는 O 놓기 → 다음 보드
🎯 왜 이 함수가 필수인가
MCTS는 본질적으로 "미리 둬보고 좋아 보이는 수 고르기"다.
"미리 둬본다" = 머릿속 시뮬레이션. 시뮬레이션을 하려면 "이렇게 두면 다음에 이렇게 되겠지"를 알아야 한다.
이걸 모르면 트리를 만들 수 없다. 트리가 없으면 MCTS가 없다. MCTS가 없으면 AlphaZero가 없다.
💡 정리
AlphaZero는 "규칙을 함수로 표현할 수 있는 환경"에서만 작동한다.
이걸 학술적으로는 "perfect simulator를 가정한다"고 한다.
"완벽한 시뮬레이터" = 다음 상태를 정확하게 계산해주는 함수.