2014-03-26 2 views
0

저는 C++로 체스 엔진을 만들고 있는데이 알고리즘을 사용하면 최대 깊이를 1로 설정하여 예상 한 플레이를 얻을 수 있습니다.하지만 그 이상으로 위험에 처한 부분은 무시하고 기꺼이 놓는 것처럼 보입니다 위험에 처해있다.Negamax가 깊이 1을 넘어서 작동하지 않음

int negamax(int depth, int alpha, int beta) 
{ 
    int max = -INFINITY; 

    MoveList legalMoves; 
    MoveGeneration::generateCaptureMoves(&legalMoves); 
    MoveGeneration::generateQuietMoves(&legalMoves); 

    // No legal moves 
    if(legalMoves.count == 0) 
    { 
     if(Position::isCheck()) 
     { 
      // Checkmate 
      if(Position::activeColor == WHITE) 
       return VAL_VICTORY; 
      else 
       return -VAL_VICTORY; 
     } 
     else 
     { 
      // Stalemate 
      return 0; 
     } 
    } 

    // Go through legal moves 
    for(int i = 0; i < legalMoves.count; i++) 
    { 
     // Get move score 
     Position::doMove(legalMoves[i]); 

     int score; 
     if(depth == 0) 
      score = quiescence(MAX_QUIESCENCE_DEPTH, alpha, beta); 
     else 
      score = -negamax(depth - 1, alpha, beta); 

     Position::undoMove(); 

     // Pruning 
     if(Position::activeColor == WHITE && score > beta) break; 
     if(Position::activeColor == BLACK && score < alpha) break; 

     if(Position::activeColor == WHITE && score > alpha) alpha = score; 
     if(Position::activeColor == BLACK && score < beta) beta = score; 

     // Best so far? 
     if(score > max) 
     { 
      max = score; 

      if(depth == MAX_DEPTH) 
       bestMove = legalMoves[i]; 
     } 
    } 
    return max; 
} 

답변

1

시도 :

score = -negamax(depth - 1, -beta, -alpha); 
다음

내 코드입니다
관련 문제