为Reversi / Othello游戏创建negamax / minimax节点

时间:2012-12-04 19:47:06

标签: java artificial-intelligence nodes

我为逆转游戏编写AI播放器,我决定使用NegaMax或MiniMax。 Pseodocode:

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 α

但是我需要将Node发送给这个函数,我该如何创建这个节点?就像创建节点,所有可能的移动状态,然后创建子节点为每个人可能移动节点?

如果你可以帮助α,β值......

1 个答案:

答案 0 :(得分:1)

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

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

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