체스 용 미니 맥스 알고리즘을 쓰고 있습니다.알파 베타 프 루닝으로 다른 값을 반환하는 미니 맥스 알고리듬
알파 베타 제거 및 알파 베타 제거와 함께 미니 맥스에 대한 다른 최종 결과 값을 얻습니다.
내 의사 코드는 다음과 같습니다. 누구든지 나를 도울 수 있습니까?
최소 최대()
public int miniMax(int depth, Board b, boolean maxPlayer) {
if(depth == 0)
return evaluateBoard(b);
if(maxPlayer) {
int bestMoveVal = 0;
for(each Max player's moves) {
// make a move on a temp board
int eval = miniMax(depth - 1, tempBoard, false);
bestMoveVal = Math.max(bestMoveVal, eval);
}
return bestMoveVal;
}
else {
int bestMoveVal = 0;
for (each Min player's moves) {
// make a move on a temp board.
int eval = miniMax(depth - 1, tempBoard, true);
bestMoveVal = Math.max(bestMoveVal, eval);
}
return bestMoveVal;
}
}
alphabeta()는
public int alphabeta(int depth, Board b, int alpha, int beta, boolean maxPlayer) {
if(depth == 0)
return evaluateBoard(b);
if(maxPlayer) {
for(each max player's moves) {
// make a move on a temp board
int eval = alphabeta(depth - 1, temp, alpha, beta, false);
alpha = Math.max(alpha, eval);
if(beta <= alpha) //beta cut off;
break;
}
return alpha;
}
else {
for(each of min's moves) {
// make a move on a temp board
int eval = alphabeta(depth - 1, temp, alpha, beta, false);
beta = Math.min(beta, eval);
if(beta <= alpha)
break; // alpha cut off;
}
return beta;
}
}
보드 상기 기판을 나타낸다. 모든 이동에 대해, 나는 전달 된 Board 객체의 복사본을 이동 한 다음이 임시 보드를 추가 호출에 전달합니다.
evaluateBoard (Board b)는 보드를 가져 와서 주어진 보드 시나리오를 기반으로 점수를 계산합니다.
미니 플레이어는 min 기능을 호출해야합니다. – perreal