Mam podstawową implementację przycinania alfa-beta, ale nie mam pojęcia, jak poprawić porządek przenoszenia. Czytałem, że można to zrobić za pomocą płytkiego wyszukiwania, iteracyjnego pogłębiania lub przechowywania tabeli bestMoves to transition.Alfa-beta move ordering
Wszelkie sugestie, jak wdrożyć jedną z tych ulepszeń w tym algorytmie?
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;
}
}
biorąc pod uwagę przykładowy kod w pytaniu, czy mógłbyś podać możliwą implementację lub sortowanie proszę (dlatego zarówno sortowanie i wywoływanie rekursywnie na posortowanej liście)? Jestem zdezorientowany, jak to wdrożyć. – FedericoCapaldo