我正在为一个学校项目制作一个 AI 控制的 alpha-beta 算法,但我的算法非常不一致。有时它会成功阻止我的所有动作,有时它会忽略我的连续 3 个动作,如此处所示。这怎么会发生,我该如何解决这个问题?
int alphaBeta(const State board, int alpha, int beta, const Player player, int depth)
{
//Max player = Player::O
//Min player = Player::X
std::vector<Move> possibleMoves = getMoves(board);
if(eval(board)==Player::X){return 9999-depth;} //Player X wins
else if(eval(board)==Player::O){return -9999+depth;} //Player O wins
else if(possibleMoves.size()==0){return 0;} //Tie
else{ //Zoek verder
depth++;
State nextBoard = board;
int result;
if(player==Player::O){
for (Move move: possibleMoves) {
nextBoard = doMove(nextBoard, move);
result = alphaBeta(nextBoard, alpha, beta, Player::X, depth);
if (result > alpha){
alpha = result;
if (depth == 1){
choice = move; //The actual move he will do
}
}
else if (alpha >= beta){
return alpha;
}
}
return alpha;
}
else{
for (Move move: possibleMoves) {
nextBoard = doMove(nextBoard, move);
result = alphaBeta(nextBoard, alpha, beta, Player::O, depth);
if (result < beta){
beta = result;
if (depth == 1){
choice = move;
}
}
else if (beta <= alpha){
return beta;
}
}
return beta;
}
}
}