チェスのようなゲーム用に negamax アルゴリズムを作成しましたが、最終的なボード値の結果を使用する方法を知りたいです。ネガマックス アルゴリズムの最終リターンは、プレイヤーが最善の手を打った後のボードの値を表していることは理解していますが、それは正確には有用な情報ではありません。私はその動きが何であるかを知る必要があります。
コードは次のとおりです。
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を持つため、それは機能しません。それは、それらがどのカウントにつながるかです...