Minimax采用Alpha-beta修剪,获得结果

时间:2011-10-26 07:01:08

标签: actionscript-3 algorithm artificial-intelligence chess minimax

我已经关注维基百科文章中的pseducode,我想我已经开始工作了。但是,它会返回分数,当我想知道我想要做什么动作时,这并不完全有用。

我尝试了我认为可以获得最佳动作的方法,但我认为它不起作用,因为我实际上尝试对抗它(国际象棋)时,AI会使深度级别的某些延迟动作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;
        }
    }

1 个答案:

答案 0 :(得分:4)

深度3对象国际象棋这样的问题很少。在这个深度,大部分功率取决于您的最终评估功能。这种评估功能非常难以有效地预测电路板的价值。

尝试更简单的东西,可以在更低的深度有效地解决。 Tic-Tac-Toe是Min-Max第一次尝试的非常好的比赛。这是因为最终结果众所周知。如果你正确地得到你的算法,你根本就不应该打败它。如果你做Tic-Tac-Toe并且算法失败了,你知道你有错误。

另外请注意,在某些情况下,Min-Max会发挥最佳效果,但仍会看起来迟钝于人类对手。例如,如果没有获胜的机会,Min-Max将开始随机播放并做非常愚蠢的动作。情况就是这样,因为Min-Max希望对手也能发挥出色,这通常不是人类的情况。可以对算法进行一些简单的更改以更改此行为,并在这种情况下使min-max播放“减少”。