Negamax dovrebbe sempre restituire un valore positivo?
-
28-10-2019 - |
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.
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)