0

我为黑白棋游戏编写 AI 播放器,我决定用 NegaMax 或 MiniMax 来做。伪代码:

function negamax(node, depth, α, β, color)
    if node is a terminal node or depth = 0
        return color * the heuristic value of node
    else
        foreach child of node
            val := -negamax(child, depth-1, -β, -α, -color)
            {the following if statement constitutes alpha-beta pruning}
            if val≥β
                return val
            if val≥α
                α:=val
        return α

但是我需要将节点发送到这个函数,我怎样才能创建这个节点?就像创建具有所有可能移动状态的节点,然后为每个可能的节点移动创建子节点?

如果您可以帮助了解 α、β 值...

4

1 回答 1

1

节点可能意味着表示单个状态。在游戏中,这是棋盘的状态(对于奥赛罗来说,棋子的位置,它是谁的移动等等)。通常在使用 alpha/beta 剪枝的游戏中,生成所有下一个状态是可能的,但生成所有可能位置的所有状态是不可能的。

如果您使用的是 Java,那么 Node 对象可能有一个方法 getChildren() 来从该状态生成所有可能的移动,它们本身就是 Node 对象。

至于 α、β 值,这些值在 Integer.MIN_VALUE 和 Integer.MAX_VALUE 处初始化

于 2012-12-04T20:00:00.030 回答