首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Negamax的工作深度不超过1

Negamax的工作深度不超过1
EN

Stack Overflow用户
提问于 2014-03-27 04:01:05
回答 1查看 352关注 0票数 1

我正在用C++做一个国际象棋引擎,用这个算法,我得到了最大深度设置为1的预期下棋。然而,除此之外,它忽略了处于危险中的棋子,甚至似乎愿意把自己置于危险之中。

下面是我的代码:

代码语言:javascript
复制
int negamax(int depth, int alpha, int beta)
{
    int max = -INFINITY;

    MoveList legalMoves;
    MoveGeneration::generateCaptureMoves(&legalMoves);
    MoveGeneration::generateQuietMoves(&legalMoves);

    // No legal moves
    if(legalMoves.count == 0)
    {
        if(Position::isCheck())
        {
            // Checkmate
            if(Position::activeColor == WHITE)
                return VAL_VICTORY;
            else
                return -VAL_VICTORY;
        }
        else
        {
            // Stalemate
            return 0;
        }
    }

    // Go through legal moves
    for(int i = 0; i < legalMoves.count; i++)
    {
        // Get move score
        Position::doMove(legalMoves[i]);

        int score;
        if(depth == 0)
            score = quiescence(MAX_QUIESCENCE_DEPTH, alpha, beta);
        else
            score = -negamax(depth - 1, alpha, beta);

        Position::undoMove();

        // Pruning
        if(Position::activeColor == WHITE && score > beta) break;
        if(Position::activeColor == BLACK && score < alpha) break;

        if(Position::activeColor == WHITE && score > alpha) alpha = score;
        if(Position::activeColor == BLACK && score < beta) beta = score;

        // Best so far?
        if(score > max)
        {
            max = score;

            if(depth == MAX_DEPTH)
                bestMove = legalMoves[i];
        }
    }
    return max;
}
EN

回答 1

Stack Overflow用户

发布于 2014-03-28 09:23:59

尝试:

代码语言:javascript
复制
score = -negamax(depth - 1, -beta, -alpha);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22671823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档