Tôi thực hiện cơ bản việc cắt xén alpha-beta nhưng tôi không biết cách cải thiện thứ tự di chuyển. Tôi đã đọc rằng nó có thể được thực hiện với một tìm kiếm nông, làm sâu sắc lặp đi lặp lại hoặc lưu trữ các bestMoves để chuyển đổi bảng.Đặt hàng di chuyển Alpha-beta
Bất kỳ đề xuất nào về cách triển khai một trong những cải tiến này trong thuật toán này?
public double alphaBetaPruning(Board board, int depth, double alpha, double beta, int player) {
if (depth == 0) {
return board.evaluateBoard();
}
Collection<Move> children = board.generatePossibleMoves(player);
if (player == 0) {
for (Move move : children) {
Board tempBoard = new Board(board);
tempBoard.makeMove(move);
int nextPlayer = next(player);
double result = alphaBetaPruning(tempBoard, depth - 1, alpha,beta,nextPlayer);
if ((result > alpha)) {
alpha = result;
if (depth == this.origDepth) {
this.bestMove = move;
}
}
if (alpha >= beta) {
break;
}
}
return alpha;
} else {
for (Move move : children) {
Board tempBoard = new Board(board);
tempBoard.makeMove(move);
int nextPlayer = next(player);
double result = alphaBetaPruning(tempBoard, depth - 1, alpha,beta,nextPlayer);
if ((result < beta)) {
beta = result;
if (depth == this.origDepth) {
this.bestMove = move;
}
}
if (beta <= alpha) {
break;
}
}
return beta;
}
}
public int next(int player) {
if (player == 0) {
return 4;
} else {
return 0;
}
}
được cung cấp mẫu mã trong câu hỏi, bạn có thể vui lòng cung cấp triển khai hoặc sắp xếp có thể (do đó cả sắp xếp và gọi đệ quy trên danh sách được sắp xếp)? Tôi bối rối về cách thực hiện điều đó. – FedericoCapaldo