https://github.com/nestedsoftware/tictac/tree/master/tictac

MINIMAX

결국 색을 플레이어가 고르는데, 흑 고르면 플레이어 두고, (current_player == -1 이면, ai 불러서 값 뱉어내고 그 값을 이제 그냥 두는)

# depth 처음에는 3으로 하고, 4~5까지 늘려보기 (걸리는 시간)

import math

def minimax(depth, node_index, maximizing_player, values, alpha, beta):
		# depth 추후에 수정하기
    if depth == 3:
        return values[node_index]

    if maximizing_player:
        best = -math.inf
        for i in range(2):
		        # opponent's turn
            val = minimax(depth + 1, node_index * 2 + i, False, values, alpha, beta)
            best = max(best, val)
            alpha = max(alpha, best)
            if beta <= alpha:
                break
        return best
    else:
        best = math.inf
        for i in range(2):
            val = minimax(depth + 1, node_index * 2 + i, True, values, alpha, beta)
            best = min(best, val)
            beta = min(beta, best)
            if beta <= alpha:
                break
        return best

DEEP LEARNING

최종 방식 요약 (MCTS + Value/Policy Network)

구성 요소 설명
MCTS 둘을 바탕으로 시뮬레이션과 트리 확장을 진행
정책망 (Policy Net, π(s)) 유망한 수를 제시함 (어떤 수부터 탐색할지 힌트 줌)
가치망 (Value Net, V(s)) 시뮬레이션 대신 상태의 가치를 바로 추정
  1. 트리 탐색 시: 정책망으로 유망한 수부터 확장
  2. 시뮬레이션 시: 무작위 시뮬레이션 대신 가치망이 상태의 품질을 추정
  3. 역전파 시: Q-value 대신 V-value를 사용할 수 있음

단계별 진행 순서

1단계: 기본 MCTS 오목 AI