Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中构建minimax位置树_Javascript_Tree_Artificial Intelligence_Minimax_Alpha Beta Pruning - Fatal编程技术网

如何在JavaScript中构建minimax位置树

如何在JavaScript中构建minimax位置树,javascript,tree,artificial-intelligence,minimax,alpha-beta-pruning,Javascript,Tree,Artificial Intelligence,Minimax,Alpha Beta Pruning,对于Connect4游戏,我需要将此AlphaBeta算法转换为AlphaBetaWithMemory算法,由Aske Plaat在其MTD(f)算法中解释: 因此,我需要一些关于如何构建可能移动的minimax树板位置的提示,以便能够以与AlphaBetaWithMemory相同的方式循环通过其子节点 我真的希望你们能给我一些建议 多谢各位 Game.prototype.alphabeta = function( board, depth, alpha, beta, maximizingPla

对于Connect4游戏,我需要将此AlphaBeta算法转换为AlphaBetaWithMemory算法,由Aske Plaat在其MTD(f)算法中解释:

因此,我需要一些关于如何构建可能移动的minimax树板位置的提示,以便能够以与AlphaBetaWithMemory相同的方式循环通过其子节点

我真的希望你们能给我一些建议

多谢各位

Game.prototype.alphabeta = function( board, depth, alpha, beta, maximizingPlayer ) {

    // Call score of our board
    var score = board.score();

    // Break
    if (board.isFinished(depth, score)) return [null, score];

    if( maximizingPlayer )
    {
        // Column, Score
        var max = [null, -99999];

        // POSSIBLE MOVES
        for (var column = 0; column < that.columns; column++) 
        {
            var new_board = board.copy(); // Create new board

            if (new_board.place(column)) {

                that.iterations++; // Debug

                var next_move = that.alphabeta( new_board, depth-1, alpha, beta, false ); // Recursive calling

                // Evaluate new move
                if (max[0] == null || next_move[1] > max[1]) {
                    max[0] = column;
                    max[1] = next_move[1];
                    alpha = next_move[1];
                }

                if (alpha >= beta) return max;
            }
        }

        return max; 
    }
    else
    {
        // Column, score
        var min = [null, 99999];

        // POSSIBLE MOVES
        for (var column = 0; column < that.columns; column++) {
            var new_board = board.copy();

            if (new_board.place(column)) {

                that.iterations++;

                var next_move = that.alphabeta(new_board, depth-1, alpha, beta, true );

                if (min[0] == null || next_move[1] < min[1]) {
                    min[0] = column;
                    min[1] = next_move[1];
                    beta = next_move[1];
                }

                if (alpha >= beta) return min;
            }
        }
        return min;
    }
}
Game.prototype.alphabeta=函数(棋盘、深度、alpha、beta、最大化玩家){
//我们董事会的点名得分
var score=board.score();
//中断
如果(board.isFinished(深度,分数))返回[null,分数];
如果(最大化玩家)
{
//列、分数
var max=[null,-99999];
//可能的行动
for(var column=0;column最大值[1]){
max[0]=列;
max[1]=下一步移动[1];
alpha=下一步[1];
}
如果(α>=β)返回最大值;
}
}
返回最大值;
}
其他的
{
//列、分数
var min=[null,99999];
//可能的行动
for(var column=0;column=β)返回最小值;
}
}
返回最小值;
}
}
该算法是一种标准的alpha-beta算法,使用

因此,如果您的alpha-beta算法有效,您只需添加一个换位表来存储以前搜索的信息。如果没有换位表,MTD(f)仍然是正确的,但效率不是很高。

该算法是标准的alpha-beta算法,使用

因此,如果您的alpha-beta算法有效,您只需添加一个换位表来存储以前搜索的信息。如果没有换位表,MTD(f)仍然是正确的,但效率不是很高