将 4 个代码与 min max 连接起来,找到独特的问题
Connect 4 code with min max find uniqe problem
我正在寻找解决连接 4 的方法,现在尝试使用深度为 6 的最小最大值,它不起作用并保持相同的列(第一个)。
我很绝望,所以如果你能找到错误,我会很高兴。
public int findBestMove() {
ArrayList<ArrayList<Integer>> myMoves = new ArrayList<ArrayList<Integer>>();
for (int i = 0; i < mWidth; i++) {
if (isColumnAvailable(i)) {
ArrayList<Integer> t = new ArrayList<>();
t.add(i);
t.add(MinMax(6, mBoard, false));
myMoves.add(t);
}
}
int maxMoveScore = -10000;
int bestMove = 0;
for (int i = 0; i < myMoves.size(); i++) {
int score = myMoves.get(i).get(1);
if (score > maxMoveScore) {
maxMoveScore = tryit;
bestMove = myMoves.get(i).get(0);
}
}
return bestMove;
}
private int MinMax(int depth,int[][] board, boolean maximizingPlayer) {
if (depth <= 0)
return 0;
int winner =checkForWin() ;
if (winner == 2)
return depth;
if (winner == 1)
return -depth;
if (isBoardFull()) {
return 0;
}
int bestValue;
if (maximizingPlayer)
bestValue = -1;
else
bestValue = 1;
for (int i = 0; i < mWidth; i++) {
if (!isColumnAvailable(i))
continue;
int v = MinMax(depth - 1, board, !maximizingPlayer);
bestValue = maximizingPlayer ? Math.max(bestValue, v) : Math.min(bestValue, v);
}
return bestValue;
}
2-是AI的编号
1- 是人类玩家
0- 为空
Connect 4 是一款已解决的游戏(剧透,玩家 1 在完美玩的情况下获胜)。您可以在 A Knowledge-based Approach of Connect-Four 中阅读有关解决方案如何完成的所有信息。这是一本非常有趣的读物,因为他们是在计算资源更难获得的时候这样做的。
总体思路是建立一个巨大的已知值位置数据库,然后使用 alpha-beta 剪枝进行 min-max 直到到达数据库中的一个位置。由于发生这种情况时的计算和存储资源,构建这个数据库很困难,但你今天可以用更少的努力实现类似的东西。
虽然这不能直接回答您的问题,但希望该参考资料是您开始研究的好地方,因为它包括对 connect 4 中许多常见情况的分析,您可以使用这些分析来帮助您改进评估函数。
我正在寻找解决连接 4 的方法,现在尝试使用深度为 6 的最小最大值,它不起作用并保持相同的列(第一个)。
我很绝望,所以如果你能找到错误,我会很高兴。
public int findBestMove() {
ArrayList<ArrayList<Integer>> myMoves = new ArrayList<ArrayList<Integer>>();
for (int i = 0; i < mWidth; i++) {
if (isColumnAvailable(i)) {
ArrayList<Integer> t = new ArrayList<>();
t.add(i);
t.add(MinMax(6, mBoard, false));
myMoves.add(t);
}
}
int maxMoveScore = -10000;
int bestMove = 0;
for (int i = 0; i < myMoves.size(); i++) {
int score = myMoves.get(i).get(1);
if (score > maxMoveScore) {
maxMoveScore = tryit;
bestMove = myMoves.get(i).get(0);
}
}
return bestMove;
}
private int MinMax(int depth,int[][] board, boolean maximizingPlayer) {
if (depth <= 0)
return 0;
int winner =checkForWin() ;
if (winner == 2)
return depth;
if (winner == 1)
return -depth;
if (isBoardFull()) {
return 0;
}
int bestValue;
if (maximizingPlayer)
bestValue = -1;
else
bestValue = 1;
for (int i = 0; i < mWidth; i++) {
if (!isColumnAvailable(i))
continue;
int v = MinMax(depth - 1, board, !maximizingPlayer);
bestValue = maximizingPlayer ? Math.max(bestValue, v) : Math.min(bestValue, v);
}
return bestValue;
}
2-是AI的编号
1- 是人类玩家
0- 为空
Connect 4 是一款已解决的游戏(剧透,玩家 1 在完美玩的情况下获胜)。您可以在 A Knowledge-based Approach of Connect-Four 中阅读有关解决方案如何完成的所有信息。这是一本非常有趣的读物,因为他们是在计算资源更难获得的时候这样做的。
总体思路是建立一个巨大的已知值位置数据库,然后使用 alpha-beta 剪枝进行 min-max 直到到达数据库中的一个位置。由于发生这种情况时的计算和存储资源,构建这个数据库很困难,但你今天可以用更少的努力实现类似的东西。
虽然这不能直接回答您的问题,但希望该参考资料是您开始研究的好地方,因为它包括对 connect 4 中许多常见情况的分析,您可以使用这些分析来帮助您改进评估函数。