Domanda

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 α

Quindi, se quanto sopra è il mio codice negamax (copiato da wikipedia), e si chiama come segue:

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

Quindi, questa funzione restituirà sempre un valore positivo indipendentemente dalla profondità con cui chiamiamo la funzione.Questo presuppone che il valore euristico di per sé sia sempre positivo.

È stato utile?

Soluzione

Sì, se il punteggio di valutazione del nodo foglia è positivo, negamax restituirà un valore positivo.Questo è ciò che ottiene la moltiplicazione per il valore del colore, assicura che ci sia sempre una negazione di contrasto per invertire la negazione finale se c'è un numero dispari di chiamate negamax ricorsive.Questo perché con un numero dispari di chiamate ricorsive, il colore sarà sempre -1.Se è presente un numero pari di chiamate ricorsive, tutte le negazioni vengono annullate e il colore sarà 1, il che lascerà inalterato il valore restituito.

Nota che se chiami negamax con il colore== -1 (è il turno dell'altra parte di muoversi), devi negare quella chiamata per ottenere il valore corretto.Ovvero:

-negamax(origin, depth, -inf, +inf, -1)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top