我想弄清楚如何提高這個算法的速度。它完美適用於兩款遊戲(2人遊戲,CPU vs人類),但問題是當我分配三個以上的樁(包含許多寶石,因此每個玩家可以拾取多於一個),計算機播放器永遠需要計算的招式:如何加快Java中的minimax算法?
public Object[] minimax(int depth, int player) {
if(hasPlayer1Won(player)){
return new Object[]{get_default_input(1),1};
}else if(hasPlayer2Won(player)){
return new Object[]{get_default_input(1),-1};
}
List<T> movesAvailable = getNextStates();
if(movesAvailable.isEmpty()){
return new Object[]{get_default_input(0), 0};
}
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
T computersMove = getNextStates().get(0);
int i = 0;
for (T move: movesAvailable) {
makeAMove(move, player);
Object[] result = minimax(depth + 1, player == G.PLAYER1 ? G.PLAYER2 : G.PLAYER1);
int currentScore = (int)result[1];
if(player == G.PLAYER1){
max = Math.max(currentScore, max);
if(currentScore >= 0 && depth == 0) {
computersMove = move;
}
if(currentScore == 1){
resetMove(move);
break;
}
if(i==movesAvailable.size() - 1 && max < 0){
if (depth == 0){
computersMove = move;
}
}
}else{
min = Math.min(currentScore, min);
if(min == -1) {
resetMove(move);
break;
}
}
i++;
resetMove(move);
}
return new Object[]{computersMove, player == G.PLAYER1 ? max: min};
}
你知道[alpha-beta修剪](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning)嗎? –
改進minimax算法的經典方法是用alpha-beta修剪 https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning – TheFooBarWay
好的問題,但「永遠」多久? – djechlin