Page 1 - Università degli Studi di Parma

Transcript

Page 1 - Università degli Studi di Parma
Dipartimento di Ingegneria dell’Informazione
Università degli Studi di Parma
I Giochi
w I giochi sono stati uno dei primi campi in cui è stata applicata
l’IA.
Intelligenza Artificiale
w La presenza di un avversario rende più complicato il problema
della ricerca dato che l’avversario introduce incertezza.
Risoluzione dei Problemi (parte 4)
w La caratteristica che spesso li distingue è il grandissimo spazio
di ricerca.
Agostino Poggi
Stefano Cagnoni
Risoluzione dei Problemi
I Giochi
w Un gioco per due persone può essere definito come un
problema di ricerca con le seguenti componenti:
2
Gli scacchi
w Ad esempio gli scacchi hanno un fattore di ramificazione circa
uguale a 35 e le partite spesso arrivano a 50 mosse per
giocatore.
s Lo stato iniziale.
w Quindi per il gioco degli scacchi abbiamo uno spazio di ricerca
di 35100 (in realtà le posizioni legali sono solo 1040).
s Gli operatori, le mosse legali.
s Un test di terminazione.
s Una funzione di utilità (utility or payoff function) indicante il risultato
della partita.
Risoluzione dei Problemi
w Occorre quindi una funzione di valutazione. Ad esempio, si
potrà dare un peso a ciascun pezzo, ma questo non è
sufficiente.
3
Risoluzione dei Problemi
Funzione di Valutazione
w Una funzione di valutazione in genere si basa sull’importanza
dei pezzi, ma l’importanza di un pezzo non è costante, ma varia
in base alla posizione e alla fase della partita.
w Ad esempio per un cavallo:
s
s
s
s
s
Le posizioni centrali pesano di più di quelle agli angoli.
Le posizioni a distanza due da un pezzo nemico pesano di più.
La posizione favorevoli rispetto ai pedoni nemici pesano di più.
La distanza dal re pesa in modo negativo.
Il peso del cavallo diminuisce con l’avanzamento della partita.
Risoluzione dei Problemi
4
Deep Blue
w Il 10/5/1997, a New York, una macchina, Deep Blue, ha battuto in un
match di sei partite (2-1 e tre patte) il campione del mondo Kasparov.
w In particolare, Deep Blue utilizza una macchina parallela general-purpose
a 32 processori più 512 chip specializzati per la generazione di mosse e
valutazione.
w Deep Blue arriva a esplorare alberi profondi 12/14 semimosse (~ 1011
posizioni) in circa 3 minuti.
w Deep Blue consulta anche librerie di aperture (ci sono un centinaio di
aperture ormai completamente esplorate e che possono condizionare tutta
la partita).
5
Page 1
Risoluzione dei Problemi
6
L’Algoritmo Minimax
L’Algoritmo Minimax
w L’algoritmo Minimax calcola la mossa ottima per il primo
giocatore (Max) supponendo che l’avversario (Min) giochi una
partita perfetta.
w L’algoritmo è composto da 4 passi:
1
-1
s Genera l’albero completo del gioco.
s Applica la funzione di utilità a tutti gli stati terminali (foglie).
s Partendo dalle foglie assegna ricorsivamente agli stati intermedi:
1
Max
1
-1
1
Min
1
1
Max
Ÿ Il massimo della funzione di utilità degli stati figli se i figli corrispondono a una
mossa di Max.
1
Ÿ Il minimo della funzione di utilità degli stati figli se i figli corrispondono a una
-1
1
1
-1
Min
mossa di Min.
s L’algoritmo termina con l’assegnazione a Max della prima mossa, che
corrisponde al massimo della funzione di utilità al primo livello.
Risoluzione dei Problemi
7
Risoluzione dei Problemi
L’Algoritmo Minimax
w Possiamo definire l’algoritmo Minimax come segue:
L’Algoritmo Minimax
w L’algoritmo Minimax si basa sull’ipotesi che sia possibile
generare tutti gli stati terminali.
w Questo è di solito impraticabile, anche per giochi non molto
complicati.
w E’ necessario un criterio che faccia generare una mossa
all’algoritmo Minimax senza dover esplorare tutto l’albero di
ricerca.
w Questo si può ottenere introducendo una funzione euristica di
valutazione, che valuterà la bontà anche di stati non terminali, e
un test di terminazione (Cutoff-Test) per decidere a che livello
di mosse terminare la ricerca.
function Minimax(game) {
for each op in operator
Value[op] = Minimax-value(apply(op, game), game);
return ‘the op with highest Value’;
}
function Minimax-Value(state, game) {
if Terminal-Test[game](state) return Utility[game](state);
else if ‘Max is to move’
return ‘the highest Minimax-Value of state’s successors’
else return ‘the lowest Minimax-Value of state’s successors’
}
Risoluzione dei Problemi
8
9
Risoluzione dei Problemi
10
L’Algoritmo Minimax
L’algoritmo Minimax
w La funzione di valutazione dà una stima della bontà della
mossa.
w Ad esempio negli scacchi la stima può essere data in base al
valore dei pezzi in possesso dei due giocatori.
w Il test di terminazione cerca di interrompere la ricerca ad un
livello d tale che sia rispettato il limite di tempo fissato per il
gioco.
w Tuttavia un test di terminazione così semplice può fornire
pessimi risultati se associato a una funzione di valutazione non
molto sofisticata.
w Per superare questi problemi bisogna arrestare la ricerca in
configurazioni quiescenti, cioè in cui le prime mosse
successive (quelle entro l’orizzonte di valutazione) non
cambiano sensibilmente il valore della funzione di valutazione.
Risoluzione dei Problemi
w Un problema difficilmente superabile è il problema
dell’orizzonte, cioè la previsione di mosse avversarie di grande
rilevanza che per il limite spaziale dello spazio di ricerca non
sono raggiungibili e quindi sono invisibili all’algoritmo.
11
Page 2
Risoluzione dei Problemi
12
Alpha-Beta Pruning
Alpha-Beta Pruning
w L’associazione di una buona funzione di valutazione e un buon
test per decidere dove interrompere l’espansione dell’albero di
ricerca può non essere sufficiente a realizzare un programma
Minimax che possa giocare entro limiti temporali accettabili.
w È tuttavia possibile decidere una mossa corretta senza dover
controllare tutti i nodi che l’algoritmo Minimax controlla.
Questo viene fatto usando la tecnica della potatura alpha-beta:
0,8
0,9
s se un giocatore può muoversi in un nodo n, ma ha una migliore scelta
m in un nodo di livello più elevato nell’albero, allora il nodo n non
sarà mai raggiunto.
0,8
0,1 0,8
13
0,7
0,5
w Possiamo definire l’algoritmo di ricerca alpha-beta con le funzioni MaxValue e Min-Value.
w Max-Value ha la forma:
0,7
0,1
0,8
Max
0,7
Min
Max
14
Alpha-Beta Pruning
function Min-Value(state, game, alpha, beta) {
if Cutoff-Test(state)
return Eval(state);
for each s in Successor(state) {
beta = Min(beta, Max-Value(s, game, alpha, beta));
if (beta <= alpha)
return alpha;
}
return beta;
}
w Se si trova un beta minore di alpha si può uscire perché sicuramente Max
potrà eseguire almeno una mossa di valore alpha.
w Se si trova un alpha maggiore o uguale a beta si può uscire perché
sicuramente Min potrà eseguire almeno una mossa di valore beta.
15
Alpha-Beta Pruning
w L’efficienza della potatura alpha-beta dipende fortemente
dall’ordine in cui i nodi sono esaminati.
w Se i nodi fossero bene ordinati il numero di nodi da esaminare
sarebbe O(bd/2) invece di O(bd).
w Questa riduzione di nodi corrisponde a passare da una
complessità d alla sua radice quadrata. Questo, in giochi simili
agli scacchi, permette ad esempio di esplorare sequenze di
mosse lunghe il doppio.
Risoluzione dei Problemi
0,1
0,8
w Min-Value ha la forma:
function Max-Value(state, game, alpha, beta) {
if Cutoff-test(state)
return Eval(state);
for each s in Successor(state) {
alpha = Max(alpha, Min-Value(s, game, alpha, beta));
if (alpha >= beta)
return beta; }
return alpha;
}
Risoluzione dei Problemi
0,8
Risoluzione dei Problemi
Alpha-Beta Pruning
Min
0,7
0,6
Risoluzione dei Problemi
Max
0,8
17
Page 3
Risoluzione dei Problemi
16