1
我想實現極小極小遊戲算法。也許我的前提是錯誤的,這不是應該嘗試的。是嗎?面對棋盤遊戲實現極大極小化的性能問題
的程序工作,但有一個很大的性能問題:
- 深度= 0,1或2的結果是立竿見影的。
- 深度= 3結果需要15秒。
- 深度= 4 - 尚未得到結果。
這是我實現:
private Move findBestMove(Chessboard chessboard, int depth,
boolean maximizingPlayer) {
if (depth == 0) {
return new Move(chessboard.calculateHeuristicValue());
} else {
Move bestMove;
if (maximizingPlayer) {
bestMove = new Move(Integer.MIN_VALUE);
for (Move possibleMove : findAllPossibleMoves(chessboard,
!(maximizingPlayer^whiteTurn))) {
Move move = findBestMove(
possibleMove.getResultChessboard(), depth - 1,
!maximizingPlayer);
if (move.getValue() > bestMove.getValue()) {
possibleMove.setValue(move.getValue());
bestMove = possibleMove;
}
}
} else {
bestMove = new Move(Integer.MAX_VALUE);
for (Move possibleMove : findAllPossibleMoves(chessboard,
!(maximizingPlayer^whiteTurn))) {
Move move = findBestMove(
possibleMove.getResultChessboard(), depth - 1,
!maximizingPlayer);
if (move.getValue() < bestMove.getValue()) {
possibleMove.setValue(move.getValue());
bestMove = possibleMove;
}
}
}
return bestMove;
}
}
也許有在算法的實現或對象的設計或在其使用中的故障。我不能把它放在手指上。所以,我想確保在嘗試優化代碼或調整程序的內存配置之前,我沒有看到任何重大問題。
注意:沒有內存分析的經驗。
minimax是指數型的。爲了減少探索的分支數量,你可以使用alphabeta修剪 – njzk2