Algoritmi e giochi combinatori Panoramica

Algoritmi e strutture dati
Algoritmi e giochi combinatori
V. Bonifaci 2006
Algoritmi e strutture dati
Panoramica
– Giochi combinatori
– Programmi che giocano
– Albero di un gioco
– L’algoritmo Minimax
V. Bonifaci 2006
1
Algoritmi e strutture dati
Perché studiare i giochi?
• Problemi che coinvolgono agenti in
competizione tra loro
• Problemi interessanti e ardui, facili da
descrivere
• Definiscono spesso spazi di ricerca molto
ampi
• Divertente
V. Bonifaci 2006
Algoritmi e strutture dati
Giochi combinatori
• Giochi a 2 giocatori
• I giocatori alternano le proprie mosse
• Somma zero: un giocatore vince nella misura in cui l’altro
perde
• Informazione perfetta: i due giocatori conoscono
completamente lo stato del gioco ogni volta che muovono;
nessuna informazione è nascosta ad uno dei due giocatori.
• Deterministici: nessun elemento di casualità
• Finiti: il numero di scelte possibili ad ogni mossa è finito, e il
gioco dura un numero finito di mosse
V. Bonifaci 2006
2
Algoritmi e strutture dati
Giochi combinatori e non
Solitario
Non è finito
Non è
deterministico
Ok
Informazione
incompleta
Troppi giocatori
Ok
V. Bonifaci 2006
Algoritmi e strutture dati
Stato dell’arte
• Che livello raggiungono i migliori
algoritmi?
– Scacchi:
• Deep Blue batte Garry Kasparov nel 1997
• Garry Kasparov vs. Deep Junior (Feb 2003): patta!
• Kasparov vs. X3D Fritz (Nov 2003): patta!
– Dama: Chinook è stato campione del mondo.
– Go: programmi appena sufficienti
V. Bonifaci 2006
3
Algoritmi e strutture dati
Come giocare
• Un possibile approccio ad un gioco combinatorio:
– Considera tutte le mosse ammissibili nello stato attuale
– Calcola la nuova posizione risultante da ogni mossa
– Valuta ogni posizione risultante e determina la migliore
– Gioca la mossa corrispondente
– Attendi la mossa dell’avversario e ricomincia
• Difficoltà:
– Rappresentazione della “scacchiera”
– Generazione di tutte le posizioni risultanti
– Valutazione di una posizione
V. Bonifaci 2006
Algoritmi e strutture dati
Funzione di valutazione
• Una funzione di valutazione viene usata per
stimare la “bontà” di una situazione di gioco
• Per l’assunzione di somma nulla, una singola
funzione è sufficiente a valutare la situazione di
entrambi i giocatori
– f(s) > 0: la posizione s è buona per il primo giocatore e
cattiva per il secondo
– f(s) < 0: la posizione s è cattiva per il primo giocatore e
buona per il secondo
– f(s) = 0: la posizione s è neutra
V. Bonifaci 2006
4
Algoritmi e strutture dati
Esempi di funzioni di valutazione
• Esempio di funzione di valutazione per il gioco del Tris:
f(s) = [# di tris possibili per A] - [# di tris possibili per B]
• Una funzione di valutazione per gli scacchi:
– f(s) = w(s)/b(s) dove
w(s) = somma del valore dei punti dei pezzi bianchi
b(s) = somma del valore dei punti dei pezzi neri
• Spesso le funzioni di valutazione sono la somma pesata di
singole caratteristiche della posizione:
f(s) = w1*car1(s) + w2*car2 (s) + ... + wk*cark(s)
• Esempi di caratteristiche per gli scacchi: numero di pezzi,
piazzamento dei pezzi, caselle controllate, ecc.
• Deep Blue aveva oltre 8000 caratteristiche nella sua
funzione di valutazione
V. Bonifaci 2006
Algoritmi e strutture dati
Albero di un gioco
• Lo spazio di ricerca di un gioco è
rappresentabile da un albero
• Un nodo rappresenta una posizione
di gioco; il giocatore decide quale
singola mossa eseguire portando
così ad un determinato nodo figlio
• La funzione di valutazione assegna
un valore ad ogni nodo
• Gli archi rappresentano le mosse ammissibili per un giocatore
• Se è il turno del primo giocatore, il nodo è etichettato MAX,
altrimenti MIN
• Dato che i giocatori alternano le proprie mosse, su ogni cammino
dalla radice ad una foglia le etichette si alternano
V. Bonifaci 2006
5
Algoritmi e strutture dati
L’algoritmo Minimax
•
•
•
•
Crea un nodo radice di tipo MAX con la posizione iniziale
Espandi i nodi fino ad una certa profondità nel gioco
Applica la funzione di valutazione ai nodi foglia
Calcola induttivamente all’indietro i valori dei nodi interni
fino ad arrivare alla radice:
– Ai nodi MIN, poni il valore al minimo dei valori
associati a ciascun nodo figlio.
– Ai nodi MAX, poni il valore al massimo dei valori
associati a ciascun nodo figlio.
• L’arco (=mossa) scelto a ciascuno nodo è quello il cui
figlio ha valore pari al valore del nodo
V. Bonifaci 2006
Algoritmi e strutture dati
L’algoritmo Minimax
2
1
2
2
7
1
8
2
7
1
8
2
1
2
7
1
8
2
Mossa selezionata
da Minimax
2
Valutazione delle posizioni
1
MAX
MIN
2
7
1
8
V. Bonifaci 2006
6
Algoritmi e strutture dati
L’albero del gioco del Tris
• f(s) = +1 se la posizione è
vincente per X.
• f(s) = -1 se la posizione è
vincente per O.
• f(s) = 0 se la posizione è
una patta.
V. Bonifaci 2006
Algoritmi e strutture dati
Pseudocodice per Minimax
function MAX-VALUE (state)
if TERMINAL(state) then return UTILITY(state)
v := -∞
for each s in SUCCESSORS (state) do
v := MAX (v, MIN-VALUE (s))
end
return v
function MIN-VALUE (state)
if TERMINAL(state) then return UTILITY(state)
v := +∞
for each s in SUCCESSORS (state) do
v := MIN (v, MAX-VALUE (s))
end
return v
V. Bonifaci 2006
7
Algoritmi e strutture dati
Potatura alfa-beta
• Possiamo migliorare l’efficienza dell’algoritmo minimax
con la potatura alfa-beta
• Idea di base: “Se hai un’idea che di certo non è buona,
non perdere tempo per capire quanto sia cattiva.”
MAX
MIN
>=2
=2
• Non abbiamo bisogno di
valutare questo nodo.
<=1
MAX
2
7
1
• A prescindere dal suo valore,
non potrà influenzare il
valore della radice.
?
V. Bonifaci 2006
Algoritmi e strutture dati
Potatura alfa-beta
• Visita l’albero del gioco in profondità
• Ad ogni nodo MAX s, alfa(s) = massimo valore trovato finora
• Ad ogni nodo MIN s, beta(s) = minimo valore trovato finora
– I valori alfa partono da -infinito e possono solo crescere, mentre i
valori beta partono da +infinito e possono solo diminuire.
• Soglia Alfa: taglia la ricerca su un nodo s di tipo MIN se beta(s) <=
alfa(i) per qualche nodo i di tipo MAX che sia antenato di s.
• Soglia Beta: taglia la ricerca su un nodo s di tipo MAX se alfa(s) >=
beta(i) per qualche nodo i di tipo MIN che sia antenato di s.
V. Bonifaci 2006
8
Algoritmi e strutture dati
Potatura alfa-beta: esempio
3
MAX
3
MIN
3
12
8
14 1 - taglia
2 - taglia
2
14
1
V. Bonifaci 2006
Algoritmi e strutture dati
L’algoritmo alfa-beta
function MAX-VALUE (state, α, β)
// α = MAX attuale; β = MIN attuale
if TERMINAL-TEST (state) then return UTILITY(state)
v := -∞
for each s in SUCCESSORS (state) do
v := MAX (v, MIN-VALUE (s, α, β))
if v >= β then return v
α := MAX (α, v)
end
return v
function MIN-VALUE (state, α, β)
if TERMINAL-TEST (state) then return UTILITY(state)
v := ∞
for each s in SUCCESSORS (state) do
v := MIN (v, MAX-VALUE (s, α, β))
if v <= α then return v
β := MIN (β, v)
end
return v
V. Bonifaci 2006
9
Algoritmi e strutture dati
L’efficacia di alfa-beta
• Alfa-beta calcola sempre lo stesso valore di Minimax
• Caso peggiore: nessuna potatura, esamina O(bd) nodi dove
d è la profondità della ricerca e b il numero massimo di
figli di ogni nodo
• Nel caso migliore, esamina solo O(bd/2) nodi
• In Deep Blue, l’uso della potatura alfa-beta ha portato il
fattore di branching medio da 35 a 6 !
V. Bonifaci 2006
10