使用 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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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