Я сделал негамакс-алгоритм для игры, похожей на шахматы, и я хочу знать, как использовать окончательный результат значения доски. Я понимаю, что окончательный результат алгоритма негамакс представляет собой значение доски после того, как игрок сделает свой лучший возможный ход, но это не совсем полезная информация. Мне нужно знать, что это за ход, это, а не его ценность.
Вот код:
public int negamax(Match match, int depth, int alpha, int beta, int color) {
if(depth == 0) {
return color*stateScore(match);
}
ArrayList<Match> matches = getChildren(match, color);
if(matches.size() == 0) {
return color*stateScore(match);
}
int bestValue = Integer.MIN_VALUE;
for(int i = 0; i != matches.size(); i++) {
int value = -negamax(matches.get(i), depth-1, -beta, -alpha, -color);
if(value > bestValue) {
bestValue = value;
}
if(value > alpha) {
alpha = value;
}
if(alpha >= beta) {
break;
}
}
return bestValue;
}
public void getBestMove(Match match, int color) {
int bestValue = negamax(match, 4, Integer.MIN_VALUE, Integer.MAX_VALUE, color);
// What to do with bestValue???
}
Я подумал о переоценке дочерних элементов текущего состояния совпадения после определения bestValue. Затем я перебираю их и нахожу, у какого из этих дочерних элементов stateScore равен bestValue. Но это не сработает, потому что многие из них все равно будут иметь одинаковый stateScore, важно то, к чему они могут привести...