3

我已经按照维基百科文章上的伪代码,我想我得到了它的工作。但是,它会返回分数,当我想知道我想采取什么行动时,这并没有帮助。

我尝试了一种我认为是获得最佳移动的方法,但我认为它不起作用,因为当我真正尝试与它(国际象棋)下棋时,人工智能会做出一些深度级别为 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;
        }
    }
4

1 回答 1

4

对于象棋这样的问题,深度 3 非常小。在这个深度,大部分功能取决于您的最终评估功能。这种评估函数很难以有效地预测棋盘价值的方式进行。

尝试一些更简单的,可以在较低深度有效解决的问题。Tic-Tac-Toe 是一款非常适合首次尝试 Min-Max 的游戏。这是因为最终结果是众所周知的。如果你的算法正确,你应该根本无法击败它。如果你玩井字游戏并且算法失败了,你就知道你犯了一个错误。

另请注意,在某些情况下,Min-Max 发挥最佳效果,但对于人类对手来说仍然显得迟钝。例如,如果没有获胜的机会,Min-Max 将开始随机播放并做出非常愚蠢的动作。情况就是这样,因为 Min-Max 期望对手也能完美发挥,而人类通常不是这样。在这种情况下,可以对算法进行一些简单的更改以改变这种行为并让最小-最大发挥“不那么迟钝”。

于 2011-10-26T08:05:39.373 回答