解决Connect 4游戏的代码与最小最大值算法的独特问题

我在寻找解决Connect 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在完美对局中获胜)。你可以在基于知识的Connect-Four方法中阅读有关解决方案的所有信息。这是一篇非常引人入胜的文章,因为他们在计算资源非常有限的时代完成了这项工作。

总体思路是构建一个已知价值位置的庞大数据库,然后使用最小最大值算法和alpha-beta剪枝,直到达到数据库中的某个位置。由于当时的计算和存储资源有限,构建这个数据库非常困难,但你现在可能可以用更少的努力实现类似的结果。

虽然这并没有直接回答你的问题,但希望这个参考资料能成为你研究的良好起点,因为它包括了Connect 4中许多常见情况的分析,你可以利用这些来改进你的评估函数。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注