Ho un'implementazione di base di potatura alfa-beta ma non ho idea di come migliorare l'ordine di spostamento. Ho letto che può essere fatto con una ricerca superficiale, approfondimento iterativo o memorizzazione dei migliori passaggi alla tabella di transizione.Ordine di spostamento alfa-beta
Qualche suggerimento su come implementare uno di questi miglioramenti in questo algoritmo?
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;
}
}
dato il codice di esempio nella domanda, potresti fornire una possibile implementazione o l'ordinamento per favore (quindi sia l'ordinamento che la chiamata in modo ricorsivo nella lista ordinata)? Sono confuso su come implementarlo. – FedericoCapaldo