计算机博弈-最大最小搜索,Alpha-Beta搜索

来源:互联网 发布:画立体几何的软件 编辑:程序博客网 时间:2024/06/06 19:07

最大最小搜索:

int MinMax(int depth){    if(SideToMove() == WHITE)    {        return Max(depth);//白方是"最大者"    }    else    {        return Min(depth);//黑方是"最小者"    }}int Max(int depth){    int best = -INFINITY;    if(depth <= 0)    {        return Evaluate();    }    GenerateLegalMoves();    while(MovesLeft())    {        MakeNextMove();        val = Min(depth-1);        UnmakeMove();        if(val > best)        {            best = val;        }    }    return best;}int Min(int depth){    int best = INFINITY;//区别与Max()    if(depth <= 0)    {        return Evaluate();    }    GenerateLegalMoves();    while(MovesLeft())    {        MakeNextMove();        val = Max(depth-1);        UnmakeMove();        if(val < best)        {            best = val;        }    }    return best;}


改进的最大最小搜索:

int MaxMinSearch(int depth,int player_mode){    int best = INFINITY;    if(depth <= 0)    {        return evaluate();//评估函数    }    GenerateLegalMoves();//生成当前所有着法    while(MovesLeft())//遍历所有着法    {        MakeNextMove();//实施着法        val = -MaxMin(depth-1);//换位思考        UnmakeMove();//撤销着法        if(val > best)        {            best = val;        }    }    return best;}


Alpha-Beta搜索:

int AlphaBeta(int depth,int alpha,int beta){    if(depth == 0)    {        return Evaluate();    }    GenerateLegalMoves();//生成所有着法    while(MovesLeft())//遍历所有着法        {        MakeNextMove();//实施着法          val = -AlphaBeta(depth-1,-beta,-alpha);//换位        UnmakeMove();//撤销着法        if(val >= beta)        {            return beta;        }        if(val > alpha)        {            alpha = val;        }    }    return alpha;}


原创粉丝点击