使用 Alpha-beta 剪枝的 Minimax 算法,获取结果

我遵循了维基百科文章中的伪代码,并且我认为我已经让它工作了。然而,它返回的是分数,当我想知道我应该采取什么行动时,这并没有什么帮助。

我尝试了一种我认为可以获得最佳行动的方法,但我不认为它有效,因为当我真正尝试与它对战(象棋)时,人工智能会做出一些有点愚蠢的举动,而深度等级为 3。

这是我的函数:

public static function alphaBeta(node, depth, alph, beta, team, tellTheMove:Boolean = false):* {        var pointer:ChessMove;        if (depth == 0) {            return scoreOf(node);        }        var childrenOf:Vector.<ChessMove >  = returnPossibleMoves(node,team);        if (childrenOf.length == 0) {            return scoreOf(node);        }        if (team == 0) {            for (var i in childrenOf) {                var that:Number = alphaBeta(childrenOf[i],depth - 1,alph,beta,1);                if(tellTheMove){                }                if (that > alph) {                    alph = that;                    if(tellTheMove){                        pointer = childrenOf[i];                    }                }                if (beta <= alph) {                    break;                }            }            if(tellTheMove){                return pointer; //Returns the move that's score last exceeded alpha.            }            return alph;        } else {            for (var j in childrenOf) {                var that2:Number = alphaBeta(childrenOf[j],depth - 1,alph,beta,0);                if (that2 < beta) {                    beta = that2;                }                if (beta <= alph) {                    break;                }            }            return beta;        }    }

回答:

对于像象棋这样的问题,深度 3 太浅了。在这个深度上,大部分能力取决于你的最终评估函数。以一种能够有效预测棋盘价值的方式来完成这个评估函数是非常困难的。

尝试一些更简单的东西,可以在较低的深度有效解决。井字棋是第一次尝试 Min-Max 算法的绝佳游戏。这是因为最终结果是众所周知的。如果你的算法正确,你应该根本无法击败它。如果你玩井字棋并且算法输了,你就知道你犯了一个错误。

还要注意的是,在某些情况下,Min-Max 算法会发挥最佳水平,但对人类对手来说仍然显得很愚蠢。例如,如果没有获胜的机会,Min-Max 算法将开始随机发挥并做出非常愚蠢的举动。这是因为 Min-Max 算法期望对手也完美发挥,但人类通常并非如此。可以对算法进行一些简单的更改来改变这种行为,并使 Min-Max 算法在这种情况下“不那么愚蠢”。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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