알파 베타 제거 기능이있는 미니 맥스 알고리즘을 사용하여 게임용 AI 플레이어를 만들려고합니다. 제대로 구현하려고하는데 문제가 있습니다. 내가 작업 할 수있는 두 가지 함수가 있습니다. 하나는 주어진 플레이어 (점수를 반환)에 대한 보드의 현재 상태를 평가하는 것이고, 다른 하나는 가능한 모든 이동에 의해 생성 된 모든 보드 상태를 반환하는 것입니다 (주어진 보드 상태에서 주어진 플레이어) getPossibleBoards.Java - minimax 구현을위한 알파 베타 제거하기
AI가 처음에 alphaBeta를 호출하여 현재 보드 상태를 전달하여 이동합니다. 그런 다음 alphaBeta 함수가 재귀 적으로 수정 한 변수 'bestBoard'에서 새 보드 상태를 설정합니다. 여기에 내 코드 내 alphaBeta 기능입니다 :
static int MAX = -1;
static int MIN = 1;
Board node;
Board bestBoard;
public int alphaBeta(Board node, int depth, int alpha, int beta, int player) {
if (depth == 0 || node.gameFinished()) {
return node.getBoardScore(player);
}
ArrayList<Board> childNodes = node.getPossibleBoards(player); //All valid moves from current the board state
if (player == MAX) {
for (Board currentBoard: childNodes) {
int result = alphaBeta(currentBoard, depth-1, alpha, beta, -player);
if (alpha < result) {
alpha = result;
bestBoard = currentBoard;
}
if (beta <= alpha) {
break; //alpha cut-off
}
}
return alpha;
}
else {
for (Board currentBoard: childNodes) {
int result = alphaBeta(currentBoard, depth-1, alpha, beta, -player);
if (beta > result) {
beta = result;
bestBoard = currentBoard;
}
if (beta <= alpha) {
break; //alpha cut-off
}
}
return beta;
}
}
내 문제는 그냥 상태 (그리고 최적의 하나)에서보고 마지막으로 보드에 내 bestBoard 변수를 설정하는 점이다. 내 bestBoard 변수를 어디에 설정해야 하는지를 파악할 수 없습니다 (또는 설정하기 전에 조건이 있어야하는 경우). 누구든지 올바른 방향으로 나를 가리킬 수 있을까요? 감사합니다
검색의 끝에서 bestBoard는 무엇이 포함되어야합니까? 이 방법으로 문제를 해결할 수는 없지만 minamax 공식을 사용하면 min과 max에 대해 거의 동일한 코드 조각 두 개를 사용하는 것이 좋습니다. –