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