0

알파 베타 제거 기능이있는 미니 맥스 알고리즘을 사용하여 게임용 AI 플레이어를 만들려고합니다. 제대로 구현하려고하는데 문제가 있습니다. 내가 작업 할 수있는 두 가지 함수가 있습니다. 하나는 주어진 플레이어 (점수를 반환)에 대한 보드의 현재 상태를 평가하는 것이고, 다른 하나는 가능한 모든 이동에 의해 생성 된 모든 보드 상태를 반환하는 것입니다 (주어진 보드 상태에서 주어진 플레이어) getPossibleBoards.Java - minimax 구현을위한 알파 베타 제거하기

AI가 처음에 alphaBeta를 호출하여 현재 보드 상태를 전달하여 이동합니다. 그런 다음 alphaBeta 함수가 재귀 적으로 수정 한 변수 'bestBoard'에서 새 보드 상태를 설정합니다. 여기에 내 코드 내 alphaBeta 기능입니다 :

static int MAX = -1; 
static int MIN = 1; 
Board node; 
Board bestBoard; 

public int alphaBeta(Board node, int depth, int alpha, int beta, int player) { 

    if (depth == 0 || node.gameFinished()) { 
     return node.getBoardScore(player); 
    } 

    ArrayList<Board> childNodes = node.getPossibleBoards(player); //All valid moves from current the board state 
    if (player == MAX) { 
     for (Board currentBoard: childNodes) { 
      int result = alphaBeta(currentBoard, depth-1, alpha, beta, -player);  
      if (alpha < result) { 
       alpha = result; 
        bestBoard = currentBoard; 
      } 
      if (beta <= alpha) { 
       break; //alpha cut-off        
      } 
     }      
    return alpha; 
    } 
    else { 
     for (Board currentBoard: childNodes) { 
      int result = alphaBeta(currentBoard, depth-1, alpha, beta, -player); 
      if (beta > result) { 
       beta = result; 
        bestBoard = currentBoard; 
      } 
      if (beta <= alpha) { 
        break; //alpha cut-off 
      }        
     } 
     return beta; 
    } 
} 

내 문제는 그냥 상태 (그리고 최적의 하나)에서보고 마지막으로 보드에 내 bestBoard 변수를 설정하는 점이다. 내 bestBoard 변수를 어디에 설정해야 하는지를 파악할 수 없습니다 (또는 설정하기 전에 조건이 있어야하는 경우). 누구든지 올바른 방향으로 나를 가리킬 수 있을까요? 감사합니다

+0

검색의 끝에서 bestBoard는 무엇이 포함되어야합니까? 이 방법으로 문제를 해결할 수는 없지만 minamax 공식을 사용하면 min과 max에 대해 거의 동일한 코드 조각 두 개를 사용하는 것이 좋습니다. –

답변

0

나는 문제가 당신이 검색의 첫 번째 층에있는 경우에만 bestBoard을 저장해야한다는 것입니다 생각합니다.

관련 문제