11x11 보드로 Tic Tac Toe 게임을 만들기로 결정했습니다. 우승 조건은 5 셀 X
또는 O
연속 (세로, 가로 또는 대각선) 또는 보드가 꽉 찬 경우입니다 , 즉 이동이 불가능합니다.Tic Tac Toe의 미니 맥스 알고리즘에 대한 가능한 움직임 찾기
저는 미니 맥 알고리즘을 사용하여 보드에서 최상의 움직임을 찾는 AI 상대방을 만듭니다. (알파 - 베타 가지 치기와) 최소 최대의 의사 코드는 다음과 같다 :
function alphabeta(node, depth, α, β, maximizingPlayer)
if the game ends:
return the heuristic value of the current state
if maximizingPlayer
v := -∞
for each possible move in board // notice this
v := max(v, alphabeta(child, depth – 1, α, β, FALSE))
α := max(α, v)
if β ≤ α
break (* β cut-off *)
return v
else
....
원래, 틱택 토 보드의 크기가 루프 최소 최대에 빈 셀이 더 많이 없습니다 의미 만 3 × 3입니다. 하지만 11x11 보드에는 121 개의 셀이 있습니다!
예를 들어, 첫 번째 턴이 X
인 경우 O
은 120 개의 가능한 이동을가집니다. O는 최선의 가치를 찾기 위해 각 이동을 시도 할 것이기 때문에 함수의 실행 시간은 120의 계승입니다.
제 질문은 가능한 움직임을 어떻게 줄일 수 있습니까? 예를 들어, 첫 번째 플레이어가 중앙의 어딘가로 이동하면 일부 모서리 또는 가장자리 셀에 대해 minimax를 확인할 필요가 없습니다.
각 마킹 된 셀에 인접한 모든 셀을 선택하기 위해 "무어 인근"을 사용하는 방법을 발견했으며'possibleMoves'되도록 비워두면 시간 복잡성을 조금 줄일 수 있습니다. –