如何让minimax算法返回正确的移动?

时间:2016-02-09 18:30:58

标签: java algorithm artificial-intelligence alpha-beta-pruning minmax

我发现以前曾经问过这个问题,但我还是被困住了。我已经使用了另一个答案中建议的包装类,但每次算法发现"更好的"节点,即使它不是max所做的移动,而是min。

 private int alphaBetaSearch(Node currentNode, int depth,int alpha,int beta, boolean maxPlayer){

    if (depth == 0){

        return bestValue = currentNode.getValue();
    }

    if(maxPlayer){

        bestValue = Integer.MIN_VALUE;

        for(Node child:currentNode.getChildren()){
            bestValue = Integer.max(bestValue, alphaBetaSearch(child, depth-1, alpha, beta, false));
            currentNode.setValue(bestValue);
            alpha = Integer.max(alpha, bestValue);

            if(beta<= alpha) 
                break;

        }
        return bestValue;
    }

    else{

        bestValue = Integer.MAX_VALUE;

        for(Node child:currentNode.getChildren()){
            bestValue = Integer.min(bestValue, alphaBetaSearch(child, depth-1, alpha, beta, true));
            currentNode.setValue(bestValue);
            beta = Integer.min(beta, bestValue);

            if (beta<=alpha) 
                break;

        }
        return bestValue;
    }

}

任何优化或更正也将受到赞赏。谢谢! 同样抱歉genSuccessors()函数。我知道布尔参数没有意义,但相信我它有效。

0 个答案:

没有答案