解决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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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