繁体   English   中英

获取字符串中的极小极大移动

[英]Get minimax move in string

我正在按照这个伪代码在 Java 中编写我的代码。 除了实际捕捉到最佳动作外,一切都很清楚并且按预期工作。 似乎我在最大化玩家条件中添加的if 条件返回了当前棋盘中的最后一个可玩动作。 所以它总是淡化。 我怎样才能跟踪最好的移动?

这是伪代码

function minimax(position, depth, alpha, beta, maximizingPlayer)
    if depth == 0 or game over in position
        return static evaluation of position
 
    if maximizingPlayer
        maxEval = -infinity
        for each move of validMoves
            eval = minimax(child, depth - 1, alpha, beta false)
            maxEval = max(maxEval, eval)
            alpha = max(alpha, eval)

            if depth == 3
                bestmove = move (Is this correct?)

            if beta <= alpha
                break
        return maxEval
 
    else
        minEval = +infinity
        for each move of validMoves
            eval = minimax(child, depth - 1, alpha, beta true)
            minEval = min(minEval, eval)
            beta = min(beta, eval)
            if beta <= alpha
                break
        return minEval
 
 
// initial call
minimax(currentPosition, 3, -∞, +∞, true)

您实际上并没有检查该动作是否比其他动作更好,因此您只是获得了最后一步。

您需要检查移动的分数是否高于之前看到的其他分数。 由于您已经拥有包含迄今为止最高分数的maxEval ,因此您可以在更新bestmove之前简单地添加eval == maxEval的检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM