Frage

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 α

Wenn das Obige mein Negamax-Code ist (aus Wikipedia kopiert) und er wie folgt aufgerufen wird:

negamax(origin, depth, -inf, +inf, 1)

Gibt diese Funktion dann immer einen positiven Wert zurück, unabhängig davon, mit welcher Tiefe wir die Funktion aufrufen.Dies setzt voraus, dass der heuristische Wert an sich immer positiv ist.

War es hilfreich?

Lösung

Ja, wenn die Bewertungsbewertung des Blattknotens positiv ist, wird von negamax ein positiver Wert zurückgegeben.Das ist es, was die Multiplikation mit dem Farbwert bewirkt. Sie stellt sicher, dass es immer eine Gegennegation gibt, um die endgültige Negation umzukehren, wenn es eine ungerade Anzahl von rekursiven Negamax-Aufrufen gibt.Dies liegt daran, dass bei einer ungeraden Anzahl von rekursiven Aufrufen die Farbe immer -1 ist.Wenn es eine gerade Anzahl von rekursiven Aufrufen gibt, werden alle Negationen abgebrochen und die Farbe ist 1, wodurch der zurückgegebene Wert nicht beeinflusst wird.

Wenn Sie Negamax mit Farbe== -1 aufrufen (die andere Seite ist an der Reihe, sich zu bewegen), müssen Sie diesen Aufruf negieren, um den richtigen Wert zu erhalten.Das heißt:

-negamax(origin, depth, -inf, +inf, -1)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top