About AlphaBeta Algorithm

I tested the AlphaBeta algorithm with my own old chess engine, and now I'm trying to write a new engine, and I see that the algorithm is faced with beta cutoffs, but in my opinion this should never happen if I don't use a narrowed window. Am I mistaken? I use int.MaxValuefor beta and -int.MaxValuefor alpha, and what can cause beta cutoffs?

Edit:

Full code here.
    public Result Search(int maxDepth)
    {
        int alpha = -int.MaxValue, beta = int.MaxValue, ply = maxDepth;
        var bestLine = new Stack<Move>();

        var score = AlphaBeta(alpha, beta, ply, bestLine);

        return new Result(score, bestLine);
    }
    int AlphaBeta(int alpha, int beta, int ply, Stack<Move> bestLine)
    {
        if (ply <= 0) return Evaluation.Evaluate(Board);
        var moves = Board.GenerateMoves();
        foreach (var move in moves)
        {
            Board.MakeMove(move);

            eval = -AlphaBeta(-beta, -alpha, ply - 1, bestLine);

            Board.TakeBackMove(move);

            if (eval >= beta)
            {
                return beta;
            }
            if (eval > alpha)
            {
                alpha = eval;
                if (ply == 1) bestLine.Clear();

                bestLine.Push(move);
            }
        }
        return alpha;
    }
}
+3
source share
2 answers

Well, you're right about the MinValue / MaxValue stuff.

I'm a little rusty about NegaMax and AlphaBeta, but when I see

   if (eval >= beta)
   {
       return beta;
   }
   if (eval > alpha)
   {
   }

You are testing >for both limits, which seems wrong. Strike>

: , /. AlphaBeta() NegaMaxWithAlphaBeta(). - NegaMax MiniMax.

, -, , ,

, . - . if (eval >= beta) -.

.

, /-.

, , .

+1

, :

eval = -AlphaBeta(-beta, -alpha, ply - 1, bestLine);

, :

int AlphaBeta(int alpha, int beta, int ply, Stack bestLine)

, . , .

Alpha/Beta Negamax, , .

+1

Source: https://habr.com/ru/post/1756883/


All Articles