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

ノードは、単一の状態を表すことを意図している可能性があります。ゲームでは、これはボードの状態です(Othelloの場合、ピースの配置、移動など)。一般に、アルファ/ベータプルーニングを使用するゲームでは、次のすべての状態を生成することは可能ですが、すべての可能な位置に対してすべての状態を生成することはできません。

Javaを使用している場合、NodeオブジェクトにはgetChildren()メソッドがあり、その状態から可能なすべての移動を生成することができます。それ自体がNodeオブジェクトです。

α、βの値は、Integer.MIN_VALUEとInteger.MAX_VALUEで初期化されます。

于 2012-12-04T20:00:00.030 に答える