Teoria dei Giochi

Dama Italiana

 2. Algoritmo di ricerca

Il modulo di intelligenza artificiale utilizzato dal computer per decidere le mosse si basa sulla strategia MiniMax con il test di taglio e l'utilizzo della funzione di valutazione. Sono state applicate anche la proprietà di alpha-beta pruning e la ricerca di quiescenza [1], per ottimizzare sia i tempi richiesti per la ricerca, sia la bontà della valutazione.

La strategia MiniMax permette di scegliere la mossa migliore contro un avversario che si suppone giochi a sua volta in maniera ottimale. L'idea alla base della strategia consiste nel costruire l'andamento della partita provando tutte le mosse possibili alternativamente per ciascun giocatore fino a quando si ottengono configurazioni di vittoria di uno dei due giocatori o di patta.

L'andamento della partita viene ricreato in un albero di ricerca, ove ogni cammino rappresenta una possibile sequenza di combinazioni di mosse che portano dalla radice, che corrisponde alla configurazione iniziale del gioco, alle foglie con tutte le possibili terminazioni della partita. Quando si raggiunge una foglia dell'albero, facilmente si riesce a dare una valutazione dello stato raggiunto, utilzzando la funzione di utilità. Tale funzione restituisce il valore dello stato finale elaborato, che dipenderà dalla situazione della partita: patta o vittoria per uno dei due giocatori.

Durante la costruzione dell'albero di ricerca, il giocatore cui spetta il turno, che verrà chiamato MAX, sceglie la mossa corrispondente al cammino a lui più conveniente, ossia quello che lo conduce a terminazioni della partita migliori. Tale decisione deve essere presa percorrendo l'albero all'indietro a partire dalle foglie e considerando che anche il secondo giocatore, MIN, esegue una strategia ottima scegliendo le mosse a lui più convenienti nel proprio turno. Ad ogni nodo padre incontrato, che si trova ad un livello corrispondente al turno di MIN, si assegna un valore pari al minimo dei valori dei nodi figli; diversamente, se il nodo corrisponde ad un turno di MAX, si deve assegnare un valore pari al massimo dei valori associati ai figli.

Questo modo di attribuire i valori ai nodi dell'albero è spiegato dal fatto che ambedue i giocatori hanno lo scopo di vincere e l'albero è stato costruito dal punto di vista di MAX, per cui saranno assegnati valori positivi a situazioni a lui favorevoli e negativi altrimenti.

Questa idea, pur essendo una buona tecnica per ricavare le mosse migliori da eseguire, è applicabile con difficoltà anche a giochi molto semplici come il tris, e di conseguenza del tutto impraticabile per la dama a causa delle elevate dimensioni dell'albero di ricerca che si ottiene. Per limitare la profondità dell'albero è stato usato l'approccio standard del test di taglio o anche chiamato (cutoff). Arrivati ad una profondità fissata a priori nell'albero, il test di cutoff termina la ricerca, permettendo l'analisi di tutte le mosse possibili di ogni giocatore solo ad un numero limitato di ply.

Con il cutoff generalmente non si raggiungono le foglie ma nodi interni, pertanto in questo caso non è più possibile applicare la funzione di utilità, dato che non si può conoscere da questo livello l'esito della partita. Si conclude che è possibile ottenere solo una stima dello stato raggiunto e la si ricava tramite una funzione di valutazione. La bontà delle scelte che vengono fatte con tale strategia sono strettamente dipendenti dalla qualità della funzione di valutazione, quindi è necessario che fornisca dei valori attendibili. Per determinare a priori se una funzione di valutazione si comporta bene, deve rispettare alcune proprietà: essere in accordo con la funzione di utilità; non richiedere troppo tempo per eseguire il calcolo della valutazione, altrimenti sarebbe preferibile aumentare la profondità di ricerca, ottenendo dei risultati più sicuri; riflettere la reale condizione del giocatore in quella situazione.

Per quanto riguarda la tecnica di taglio, si deve decidere a che profondità arrivare con la ricerca prima di fermarsi, ossia il numero di ply per ciascun giocatore. Tale valore è stato deciso in modo da restituire una risposta in tempi ragionevoli, ritenuti inferiori ai 10 sec. Infatti il gioco non impone dei limiti superiori di tempo; un giocatore potrebbe eventualmente impiegare quanto tempo desiderato prima di decidere la mossa da fare, ma per il computer sono preferibili tempi di risposta contenuti e si è valutato quanto poteva essere un tempo medio accettabile. Provando con vari valori di profondità, si è fissato il limite massimo pari a 10 ply. Il gioco permette di giocare anche a livelli di difficoltà minori (2, 4, 6 e 8).

Inoltre sono state introdotte altre ottimizzazioni come l'alpha-beta pruning e la ricerca di quiescenza. La prima tecnica permette di evitare la ricerca in rami per i quali non vale la pena eseguire l'analisi in quanto è certo che non porteranno a situazioni migliori rispetto alla mossa ottimale scelta fino a quel momento. Si supponga di valutare un nodo ad una profondità che corrisponde al turno di MAX e che abbia valore 4. Dopo aver ottenuto tale valore, si deve continuare la valutazione nel nodo successivo. Tale nodo sarà ad un livello di profondità che corrisponde alla scelta della mossa da parte di MIN, e sarà scelto il minimo dei valori dei suoi nodi figli. Se il figlio associato al primo ramo di tale nodo ha valore 2, allora sicuramente questo nodo potrà assumere solo valori minori o uguali a 2. Quindi, dato che MAX deve massimizzare tali valori sceglierà valori maggiori o uguali a 4 ed il contributo apportato da tale nodo non risulta essere rilevante. Il vantaggio guadagnato applicando tale tecnica dipende dall'ordine con il quale si valutano i nodi.

La ricerca di quiescenza viene applicata a configurazioni della damiera che sono definite essere non quiescenti, ossia non stabili. Questa ulteriore ricerca è richiesta per evitare di eseguire valutazioni che non riflettono correttamente la situazione della partita. In alcuni casi, può accadere che si esegua il test di taglio su dei nodi che risultano essere a prima vista buone configurazioni per il gioco suggerendo quella particolare sequenza di mosse come la migliore. In realtà, esaminando qualche ply in più, si verifica una situazione opposta a quella che era apparsa in un primo momento e che risulta essere dannosa per il giocatore. Per come è stato pensato il test di taglio, in base alla profondità massima nell'albero di ricerca che si è deciso di valutare, non è possibile accertarsi che in futuro da quella configurazione possano verificarsi situazioni svantaggiose. Stati con tali caratteristiche vengono chiamati non quiescenti, per indicare che non sono stabili e se valutati possono fornire delle informazioni errate e fuorvianti. Dato che i problemi si verificano solo per stati non quiescenti, si è deciso di applicare la funzione di valutazione solo a quei nodi che, in seguito al cutoff si classificano come quiescenti, mentre per tutti i rimanenti si continua la ricerca fino a quando non viene ottenuta una configurazione quiescente da poter valutare. Questa ulteriore espansione dell'albero di ricerca, prende il nome di ricerca di quiescenza.