코드: MCTS 노드 클래스
MCTS 노드의 핵심 필드:
game— 이 노드의 게임 상태parent, children— 트리 구조untried_moves— 아직 자식으로 안 만들어진 수들 (Expand에서 골라감)visits— 이 노드 방문 횟수wins— 누적 승수 (UCB1의 분자)ucb1()— UCB1 점수 계산 메서드
📖 ucb1() 메서드의 두 케이스
- visits == 0: ∞ 반환 — 안 가본 노드를 무조건 먼저 가게 함. 모든 자식이 적어도 한 번씩 방문되도록.
- visits > 0: w/n + c·√(ln(parent.visits)/n) — 표준 UCB1.
이 단순한 트릭으로 "초기에 모든 자식을 한 번씩 시도"가 자동 처리.
💡 wins의 정확한 의미
wins는 "이 노드의 부모 입장에서의 승수". 왜 부모 입장?
UCB1로 자식을 고를 때 부모가 결정하잖아. 부모는 자기한테 유리한 자식을 고름. 그래서 wins가 "부모에게 유리한 결과"의 횟수로 정의되어야.
구체적으로: 부모 차례가 X면, wins는 X 승 횟수. 부모 차례가 O면, wins는 O 승 횟수.
다음 페이지에서 4단계를 메서드로 구현.
PYTHON