Clever Pacman - Nicole Alicia Rossini
Transcript
Clever Pacman - Nicole Alicia Rossini
UNIVERSITÀ DEGLI STUDI DI MILANO Facoltà di Scienze Naturali, Fisiche e Matematiche Corso di Laurea Magistrale in Informatica Corso di Sistemi Intelligenti Professor Alberto Borghese Clever Pacman a.a. 2010/2011 Quadri Christian Matricola 755348 Rossini Nicole Alicia Matricola 772006 Indice 1 Introduzione 1.1 Descrizione del problema . . . . . . . . . . . . . . . . . . . . . 3 3 2 I Ghost 2.1 Azioni . . . . . . . 2.1.1 Shy . . . . . 2.1.2 Random . . 2.1.3 Hunting . . 2.1.4 Defence . . 2.2 Modellazione Fuzzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 5 5 5 6 6 3 Il Pac-Man 3.1 Fuzzy Q-Learning . . . . . . . . . . 3.1.1 Stati Aggregati . . . . . . . 3.1.2 Le modifiche al Q-Learning 3.2 Azioni . . . . . . . . . . . . . . . . 3.2.1 Go to Pill . . . . . . . . . . 3.2.2 Go to Power Pill . . . . . . 3.2.3 Avoid Ghost . . . . . . . . . 3.2.4 Go to Ghost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 8 8 8 10 10 11 11 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Implementazione . . . . . . . . . . . . 12 5 Risultati 13 5.1 Ghost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 5.2 Pac-Man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 6 Conclusioni e Sviluppi Futuri 21 2 1 Introduzione Ms. Pacman è un gioco prodotto originalmente dalla Midway nel 1981. L’agente Pac-Man si muove in un labirinto cosparso di pillole (pill) e il suo scopo è mangiarle tutte. Ogni pill vale 10 punti. Il livello termina quando tutte le pill sono state mangiate. Nel labirinto sono presenti anche 4 agenti nemici: i ghost. Lo scopo dei ghost è ostacolare il Pac-Man, mangiandolo. Il Pac-Man possiede 3 vite per ogni partita. Nel labirinto sono presenti anche 4 pillole speciali: le power pill. Ogni power pill vale 50 punti e rende i ghost mangiabili dal Pac-Man per un intervallo di tempo limitato. Finché dura l’effetto della power pill i nemici tendono a scappare dal Pac-Man. Durante questo intervallo il Pac-Man ottiene 200 punti per il primo ghost mangiato, 400 per il secondo, 600 per il terzo, 800 per il quarto. Per cui la scelta di mangiare più fantasmi in sequenza si dimostra una strategia vincente per accumulare velocemente punti. 1.1 Descrizione del problema Il gioco Ms. Pac-Man è un ambiente non-deterministico utilizzato in letteratura per lo studio di tecniche di decisione e di apprendimento. L’aspetto non-deterministico di questo gioco deriva dal fatto che ogni agente deve decidere quale comportamento attuare per raggiungere il suo scopo, non potendo fare assunzioni sul comportamento dell’agente antagonista. In altre parole, il Pac-Man non è in grado di prevedere le future azioni intraprese dai ghost e viceversa. Un’ulteriore problematica di questo ambiente è l’elevato numero di stati possibili, che induce a studiare tecniche per l’aggregazione degli stati. In questa applicazione abbiamo utilizzato due approcci diversi dei sistemi intelligenti. I ghost sono stati totalmente modellati utilizzando un motore d’inferenza fuzzy. Invece per il Pac-Man abbiamo utilizzato un algoritmo di apprendimento con rinforzo classico, il Q-Learning, e un approccio fuzzy per la modellazione degli stati. Questo algoritmo, introdotto da [3], viene chiamato Fuzzy Q-Learning. 2 I Ghost L’implementazione classica dei ghost in Pac-Man prevede che i quattro ghost abbiano personalità e comportamenti diversi. Dall’intervista al progettista del gioco originale Toru Iwatani, leggiamo: 4 INTERVIEWER: What was the most difficult part of designing the game? IWATANI: The algorithm for the four ghosts who are the enemies of the Pac Man getting all the movements lined up correctly. It was tricky because the monster movements are quite complex. This is the heart of the game. I wanted each ghostly enemy to have a specific character and its own particular movements, so they weren’t all just chasing after Pac Man in single file, which would have been tiresome and flat. One of them, the red one called Blinky, did chase directly after Pac Man. The second ghost is positioned at a point a few dots in front of Pac Man’s mouth. That is his position. If Pac Man is in the center then Monster A and Monster B are equidistant from him, but each moves independently, almost sandwiching him. The other ghosts move more at random. That way they get closer to Pac Man in a natural way. [5] Ma questi comportamenti portano a tre implementazioni diverse. Per gli algoritmi dei ghost ci siamo ispirati all’articolo di Shaout, King e Reisner [2], che utilizzano le tre diverse azioni per tutti i fantasmi, i quali decidono, tramite un algoritmo fuzzy, quale comportamento adottare di volta in volta. Viene quindi preservata la caratteristica dei tre comportamenti, ma la scelta non è specifica a seconda del ghost, ma a seconda delle condizioni di gioco. Il comportamento di ogni ghost deve comprendere sia fasi di attacco che fasi di difesa. I ghost inizialmente nascono al centro del labirinto. Dovendo difendere le pillole dal Pac-Man, cercano di distribuirsi lungo i corridoi. Se il Pac-Man si avvicina cercano di mangiarlo, mentre se è attiva la power-pill, cioè se il Pac-Man che può causare la loro stessa morte, scappano. Più il gioco progredisce, più i ghost cercano di fermare il Pac-Man. 2.1 Azioni I tre comportamenti sono codificati nelle azioni: • Shy • Random • Hunting • Defence 5 2.1.1 Shy Questa azione si basa sull’allontanamento dall’agente più vicino. In condizioni di gioco normali i ghost si allontanano tra loro, coprendo quindi l’intero labirinto. Invece, se l’effetto della power-pill è ancora attivo, i ghost si allontanano dal Pac-Man per evitare di essere mangiati, adottando così un comportamento di sopravvivenza. L’implementazione da noi realizzata è una ricerca ad un passo che massimizza la distanza tra l’agente stesso e l’agente ad esso più vicino. Il ghost ipotizza di spostarsi di una casella nelle quattro direzioni possibili (nord, est, sud, ovest), escludendo ovviamente le caselle occupate dai muri, misura la distanza che otterrebbe scegliendo quella direzione e sceglie di muoversi nella direzione che porta alla massima distanza. Nel caso ci fossero più direzioni ottimali inizialmente i ghost preferivano la prima direzione in ordine di valutazione. Per evitare questo, abbiamo randomizzato l’ordine di valutazione delle direzioni: ogni ghost, prima di iniziare la valutazione, scambia di posizione nell’ordine di valutazione due direzioni scelte a caso. In questo modo l’ordine di valutazione varia costantemente per tutto il tempo d’esecuzione e dà origine ad un comportamento casuale. 2.1.2 Random Questa azione rispetta il comportamento originario di due dei quattro ghost, ciò dà origine al classico comportamento altalenante, con inversioni di direzione improvvise. Inoltre offre una chance di sopravvivenza al Pac-Man nel caso i ghost adottino il comportamento Hunting (2.1.3) L’implementazione è semplice: viene scelta in modo casuale una delle celle adiacenti all’agente che non contengano un muro. 2.1.3 Hunting Questa è l’azione d’attacco. Il ghost insegue attivamente il Pac-Man, cercando di mangiarlo. Con questo comportamento il ghost sceglie sempre il percorso minimo per raggiungere il Pac-Man. In questo modo tutti i fantasmi si allineano dietro ad esso. Per poter uscire da questa situazione è necessario compiere un passo random (2.1.2), così da adottare un comportamento sub-ottimale e poter accerchiare il Pac-Man. L’implementazione di questa azione sfrutta l’algoritmo di Floyd-Warshall [6] per i cammini minimi in un grafo. L’algoritmo viene valutato una sola volta all’inizializzazione del livello per inizializzare una tabella di lookup. Il ghost richiede il cammino minimo per raggiungere il Pac-Man e compie il primo passo del cammino. Essendo il Pac-Man un agente in movimento è 6 necessario ripetere l’operazione ad ogni passo di decisione per ottenere sempre il cammino minimo reale. 2.1.4 Defence Questa azione prevede che il ghost si diriga verso la zona con la maggior densità di pillole e attenda che il Pac-Man si diriga verso di lui. L’implementazione prevede di dividere il labirinto in 9 zone sovrapposte, scegliere quella con la maggior densità di pillole e dirigersi verso la pillola centrale della zona. Le 9 zone sono la combinazione di 3 segmenti sovrapposti definiti per entrambi gli assi x e y nel modo seguente: • da 0 a 1 2 • da 1 4 a 3 4 • da 1 2 a1 La pillola centrale della zona si individua scorrendo la zona e fermandosi quando il numero di pillole incontrate corrisponde alla metà del numero totale di pillole contenute. Se il ghost si trova nella casella della pillola centrale non può restare fermo, ma è costretto a muoversi in una delle celle adiacenti. 2.2 Modellazione Fuzzy Per decidere quale azione compiere, i ghost devono valutare lo stato attuale del gioco in cui si trovano ed agire di conseguenza. Considerata la vastità dell’insieme degli stati possibili, abbiamo scelto la logica fuzzy per estrapolare dal contesto le informazioni significative per la corretta valutazione dello stato corrente e quindi capacità decisionale. Le variabili fuzzy considerate per definire lo stato, in linea con [2], sono: la distanza del ghost dal Pac-Man, la distanza del ghost dal ghost più vicino, la frequenza con cui il Pac-Man mangia le pillole e il tempo di vita del PacMan, cioè la sua abilità. In aggiunta viene considerata una variabile booleana classica per indicare se i ghost possono essere mangiati dal Pac-Man, che resta attiva per tutta la durata dell’effetto della power pill. Per ogni variabile sono state definite 3 classi fuzzy: low, medium, high. Le funzioni di membership associate hanno la seguente forma descritta in figura 1. Per l’elencazione dettagliata delle regole della F AM rimandiamo a [2]. Evidenziamo il fatto che nella fase di defuzzyficazione entrano in gioco 4 parametri, uno per ogni azione, che rendono possibile modificare il comportamento desiderato per ogni ghost: aumentare il parametro associato all’azione 7 Figura 1: classi fuzzy delle distanze Hunting (2.1.3) aumenta il livello di abilità del ghost. La parametrizzazione rende possibile ottenere le differenze di comportamento da un ghost all’altro, come nel gioco originale. La deffazzyficazione viene effettuata scegliendo l’azione con il valore massimo, tale scelta verrà poi tradotta in un movimento del tipo nord, sud, ovest, est. Tuttavia, per questa simulazione abbiamo deciso di inizializzare tutti i ghost con gli stessi parametri, nel tentativo di mettere in difficoltà il PacMan, poiché tutti i ghost hanno come azione “preferita” l’azione Hunting (2.1.3) con un rapporto di 4 : 1 rispetto a tutte le altre azioni. 3 Il Pac-Man Il Pac-Man è l’attore principale di questo gioco, il suo scopo è collezionare il maggior numero di punti mangiando le pillole oppure i ghost, quando è attiva la power-pill. Per lo sviluppo dell’intelligenza del Pac-Man abbiamo utilizzato l’algoritmo Fuzzy Q-Learning [3] che era alla base del lavoro svolto da Lore L. DeLooze e Wesley R. Viner [1] nell’ambito dell’intelligenza artificiale in ambiente Non-deterministico. Il Fuzzy-Q-Learning, che descriveremo in dettaglio in questa sezione, si è rivelato una scelta vincente in quanto il numero di coppie stato-azione è assai elevato per una trattazione computazionalmente efficiente dell’algoritmo del Q-Learning. 8 3.1 Fuzzy Q-Learning Quando il numero di coppie stato-azione risulta molto elevato, come nel caso del gioco del Pac-Man, l’utilizzo diretto dell’algoritmo del Q-Learning diventa intrattabile dal punto di vista computazionale. L’algoritmo Fuzzy QLearning utilizza invece il concetto di stato aggregato fuzzy, il quale consente una rappresentazione compatta, aggregando gli stati utilizzando la logica fuzzy. Tale approccio permette di ridurre notevolmente il numero di stati in quanto le posizioni dei singoli fantasmi o delle pillole, vengono aggregate in un concetto di distanza dall’agente Pac-Man. 3.1.1 Stati Aggregati Entriamo ora più nel dettaglio degli stati aggregati e della relativa modifica all’algoritmo del Q-Learning. Nel modello utilizzato per l’implementazione dell’intelligenza del PacMan sono state utilizzate 3 distanze modellate attraverso logica fuzzy: distanza dal fantasma più vicino, distanza dalla pillola più vicina e distanza dalla power-pill più vicina. La distanza viene calcolata in base alla lunghezza del cammino minimo, calcolato con l’algoritmo Floyd Warshall [6], dal Pac-Man al fantasma, pillola o power-pill più vicini. Lo stato aggregato fuzzy è rappresentato da una n-pla, dove n rappresenta il numero di classi variabili fuzzy del modello. Ogni variabile possiede le sue classi e nello specifico abbiamo considerato 3 classi: low, medium, high. L’insieme di tutti gli stati aggregati si ottiene semplicemente generando tutte le possibili n-ple di classi fuzzy per ciascuna variabile. In Tabella 1 sono rappresentati i 27 stati aggregati. 3.1.2 Le modifiche al Q-Learning Ora analizziamo le modifiche apportate all’algoritmo del Q-Learning, in particolare alla formula di aggiornamento, al fine di poter utilizzare il modello degli stati aggregati appena descritto. La formula di aggiornamento del Q-Learning [4] è la seguente: Q(s, a) ← Q(s, a) + α[r + γ max Q(s0 , a0 ) − Q(s, a)] 0 a (1) dove r rappresenta il reward, mentre α e γ rappresentano rispettivamente il learning rate e il discount rate. Indichiamo con F l’insieme degli stati aggregati fuzzy (la prima colonna della Tabella 1) e per ogni stato calcoliamo la funzione membership fuzzy µ(k), dove k ∈ F . Calcolando µ(k) otteniamo il grado di appartenenza dello 9 Stati aggregati fuzzy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 fantasma low low low low low low low low low medium medium medium medium medium medium medium medium medium high high high high high high high high high pillola low low low medium medium medium high high high low low low medium medium medium high high high low low low medium medium medium high high high power-pill low medium high low medium high low medium high low medium high low medium high low medium high low medium high low medium high low medium high Tabella 1: Gli stati aggregati stato reale, cioè uno specifico stato con degli specifici valori delle 3 distanze (3.1.1), ad uno stato aggregato. Ridefiniamo ora la coppia stato-azione Q(s, a), nella formula (1), ponendo s = hk1 , k2 , ..., kn i dove n è la cardinalità dell’insieme F, cioè suddividiamo lo stato s in n stati aggregati. La formula di aggiornamento del Fuzzy Q-Learning è la seguente: q(k, a) ← q(k, a) + µ(k)αk,a [r + γ maxa0 Q(s0 , a0 ) − q(k, a)] ∀k ∈ F (2) dove il valore da aggiornare viene pesato per µ(k), cioè il valore di membership dello stato aggregato k. Il valore Q(a) nella formula (2) viene calcolato dalla seguente formula: Q(s, a) = n 1X µ(k)q(k, a) n k=1 (3) dove il valore della coppia stato aggregato-azione q(k, a) viene pesato per la membership µ(k). Come si è può notare nelle formule (2) e (3) ogni valore viene pesato per µ(k), e questo è in accordo gli stati aggregati, che in virtù della loro natura fuzzy si sovrappongono tra loro con un differente grado di membership. La funzione µ(k) permette di pesare in modo opportuno i valori, accentuando l’aggiornamento dove il grado di membership è maggiore (lo stato reale s è vicino allo stato aggregato k ) e diminuendo l’aggiornamento dove il grado di membership è minore (lo stato reale s è lontano allo stato aggregato k ). 10 Il learning rate αk,a ,specifico per ogni stato aggregato è definito dalla seguente formula: 1 (4) αt (k, a) = Pt−1 τ =0 µτ (k, a) che è l’estensione naturale agli stati aggregati dell’implementazione incre1 mentale del metodo della media campionaria αt (s, a) = ts,a [4], per ambienti stazionari. Nella formula (4) il denominatore rappresenta il grado di visita di uno specifico stato aggregato k al passo t. 3.2 Azioni L’algoritmo fuzzy Q-Learning per il Pac-Man si basa su quattro azioni differenti: 1. Go to Pill 2. Go to Power Pill 3. Avoid Ghost 4. Go to Ghost ma le ultime due sono mutuamente esclusive. In ogni stato il Pac-Man ha a disposizione solo tre azioni: se l’effetto della power pill è attivo, la terza azione disponibile è l’azione Go to Ghost, altrimenti è disponibile l’azione Avoid Ghost. Dal momento che nello stesso istante possono esistere sia fantasmi mangiabili sia fantasmi non mangiabili (nel caso in cui siano stati mangiati e siano già rinati) la decisione si basa sullo stato del ghost più vicino. Ogni azione deve poi essere tradotta in un movimento effettivo di tipo Nord, Est, Sud oppure Ovest, traduzione lasciata all’implementazione effettiva dell’azione. In [1] non vengono specificate le implementazioni delle azioni. Abbiamo verificato che il comportamento del Pac-Man e la sua abilità di gioco dipendono fortemente da queste euristiche. Abbiamo cercato di dare sia delle implementazioni basilari, che delle implementazioni più complesse. 3.2.1 Go to Pill Quando il Pac-Man compie questa azione si dirige verso la pillola più vicina, incurante del fatto che sul suo cammino potrebbero esserci dei ghost. Per implementare questa azione sfruttiamo la lookup table creata dall’algoritmo Floyd-Warshall [6]. Scorriamo la lista delle pillole esistenti cercando quella a distanza minima e prendiamo il cammino minimo per raggiungerla. Se ci 11 sono più pillole alla stessa distanza ne scegliamo una in modo casuale, in modo che l’agente si muova liberamente nel labirinto. Senza questa modifica a ogni inizio partita l’agente tendeva a muoversi verso l’angolo nord-ovest del labirinto, poiché l’analisi sequenziale delle pillole portava a favorire le prime della lista. 3.2.2 Go to Power Pill Questa azione è identica alla precedente, ma viene considerata la lista delle power pill presenti nel labirinto. Quando tutte le power pill sono state mangiate, l’azione non è più disponibile. 3.2.3 Avoid Ghost Nella valutazione dello stato aggregato non vengono presi in considerazione tutti i fantasmi, ma solo il fantasma più vicino, cioè il fantasma più pericoloso. Per questa azione abbiamo studiato quattro diverse implementazioni mentre procedevamo nello sviluppo e nel testing dell’applicazione, migliorando di volta in volta le prestazioni dell’agente. Tutte le implementazioni hanno come obbiettivo la massimizzazione della distanza dal ghost più vicino con un ottica ad un passo. Questo porta in ogni caso ad adottare comportamenti subottimali. Uno sviluppo futuro potrebbe considerare strategie di fuga a più passi (6). La prima implementazione ingenua prevedeva di scegliere la casella adiacente alla casella attuale che permettesse di accrescere la distanza dal ghost più vicino, scegliendo in modo casuale la direzione nel caso esistessero due caselle equivalenti. Così facendo però, la maggior parte delle volte agli incroci il Pac-Man scappava dal ghost inseguitore, ma andava incontro ad un altro ghost che si avvicinava nella direzione opposta. Ma in una situazione di gioco reale, un umano sceglierebbe la distanza che massimizza la distanza tra tutti i ghost. La seconda implementazione prendeva atto di questa strategia: la casella scelta era quella che massimizzava la media pesata delle distanze da tutti i ghost. Il comportamento del Pac-Man però era insoddisfacente e “poco intelligente”, poiché tendeva a chiudesi negli angoli estremi del labirinto, senza allontanarsene mai. Euristiche Migliorate La terza implementazione rimedia a questo problema definendo un area di allerta intorno al Pac-Man. Nella media pesata delle distanze dai ghost vengono considerati solo i ghost che si trovano all’interno di quest’area, cioè si scappa da tutti i ghost considerati “vicini” o 12 che potrebbero diventarlo. Con questa modifica abbiamo introdotto il concetto di densità di ghost, senza complicare la funzione Q(s, a) con l’aggiunta di una variabile fuzzy che avrebbe portato il numero degli stati aggregati k da 27 a 81, beneficiando tuttavia di un comportamento migliore grazie ad un’euristica migliorata. Nella quarta implementazione abbiamo introdotto un secondo criterio di scelta. Nel caso esistano più celle che offrono la possibilità di interporre la stessa distanza dai ghost, non viene più scelta una cella in maniera casuale, ma viene scelta la casella che permette di avvicinarsi maggiormente alla power pill più vicina. Abbiamo deciso di introdurre questo secondo criterio poiché negli stati finali del gioco i ghost utilizzano maggiormente l’azione Hunting (2.1.3), quindi il Pac-Man si trova in una situazione in cui ha ragionevolmente imparato a scappare per sopravvivere, ma l’azione Go to Pill (3.2.1) gli consentirebbe di porre fine al livello. Il livello terminava, dunque, solo quando il Pac-Man si imbatteva casualmente nelle poche pillole restanti, dopo innumerevoli cambi di direzione dettate solo dal comportamento randomico. Il secondo criterio subentra a questo punto per svincolarsi da un comportamento non ragionato, senza influire sul criterio di fuga. 3.2.4 Go to Ghost Anche questa azione si basa sull’algoritmo Floyd-Warshall [6]. inseguito è sempre quello più vicino al Pac-Man. 4 Il ghost Implementazione Il software è stato realizzato interamente utilizzando il linguaggio Java ed abbiamo implementato ex-novo il gioco del Pac-Man al fine di poter utilizzare il modello fuzzy per i ghost (sezione 2.2). La nostra implementazione considera solo le situazioni di gioco di base e l’unico bonus implementato è la Power Pill. Non abbiamo considerato i frutti bonus che compaiono per breve tempo all’interno del labirinto, come per altro nell’implementazione di [1]. Inoltre, in implementazioni derivate dal gioco originale, questi frutti provocano modifiche al comportamento dei Ghost quali: rallentamento, allontanamento forzato, congelamento, etc... che non abbiamo preso in considerazione. Inoltre, la nostra implementazione utilizza una sola mappa, riutilizzando la stessa ad ogni passaggio di livello. Il codice è predisposto per l’inclusione di altre mappe, ma per rendere più semplice l’analisi dell’algoritmo abbiamo preferito re-instanziare la stessa per ogni livello. 13 La mappa del livello è stata organizzata in celle, diversamente da quando avviene nel gioco originale dove invece il movimento avviene in un spazio continuo. Ad ogni passo, ogni agente sceglie un’azione che lo condurrà un’altra cella della mappa. Volendo simulare il giocatore umano che osserva lo schermo, avendo così una visione completa delle posizioni di tutti i fantasmi, l’implementazione permette ad ogni agente di conoscere tutte le posizioni degli altri agenti, così da poter valutare correttamente la situazione di gioco. Durante la realizzazione del codice delle azioni degli agenti, ci si è accorti che se la decisione avveniva ad ogni passo, il comportamento era molto instabile e poco efficace, in quanto ad ogni passo avveniva spesso un cambio di strategia che comportava all’agente di rimanere in un limitato intorno di celle. La soluzione, adottata anche da [1], è stata quella di introdurre una persistenza di passi sull’azione, ovvero, al passo tk veniva scelta una determinata e veniva mantenuta fino al tempo tk+n , dove n rappresenta il numero di passi di persistenza. Nel nostro caso è stato scelto il valore di n = 5, suggerito dai risultati sperimentali. Sempre durante i test ci si è accorti che, in alcune fasi del gioco, la persistenza impediva agli agenti di rilevare un sostanziale cambiamento di situazione, ad esempio il ghost si è avvicinato (distanza in celle minore o uguale a 2) al Pac-Man mentre quest’ultimo stava mangiando le pillole. In questi casi la persistenza viene annullata forzando l’agente a scegliere una nuova azione, potenzialmente anche la precedente, in funzione del nuovo stato. In alcune situazioni però, la persistenza non bastava, ad eliminare le situazione di stallo in un piccolo intorno di celle. Abbiamo così introdotto il concetto di taboo (a un passo) , che consiste nel negare all’agente al passo t la possibilità di scegliere la cella dove si trovava al passo t − 1. Come la persistenza, il taboo viene eliminato a fronte di particolari cambiamenti di situazione. 5 Risultati In questa sezione presentiamo alcuni risultati ottenuti con diverse parametrizzazioni degli agenti. 5.1 Ghost Il testing dei ghost è stato svolto nella fase iniziale dello sviluppo dell’applicazione, lasciando che il Pac-Man si muovesse con una politica casuale ad ogni passo di decisione. 14 Il testing è stato utilizzato per trovare la giusta parametrizzazione dei ghost. Iniziando con tutti i parametri delle azione fissati a 1.0, abbiamo modificato i valori tramite incrementi successivi, finché abbiamo ottenuto un comportamento visivo soddisfacente. Inizialmente i ghost decidevano raramente di cacciare attivamente il Pac-Man, abbassando notevolmente il livello di difficoltà. Abbiamo quindi aumentato notevolmente il peso per questa azione. A questo punto però l’azione Hunting causava l’accodarsi dei ghost all’inseguimento del Pac-Man, situazione che, ancora una volta, abbassava il livello di difficoltà, poiché era sufficiente evitare il fantasma più vicino. Abbiamo quindi aggiunto la possibilità di muoversi su un percorso sub-ottimale, per consentire al ghost di avvicinarsi al Pac-Man con percorsi diversi, dando luogo ad un accerchiamento dello stesso. 5.2 Pac-Man Fissato il comportamento dei ghost e l’implementazione delle azioni del PacMan, abbiamo effettuato diverse serie di test per valutare l’apprendimento. Osservando i risultati ottenuti in [1], abbiamo introdotto anche noi un parametro chiamato “reward factor” ρ ∈ (0, 1] tale che reward = punteggio ∗ ρ. Figura 2: Risultati Random e ρ = 1 distanze differenti In primo luogo abbiamo dovuto scegliere il valore del reward da attribuire nel caso di morte del Pac-Man. Già in fase di sviluppo è risultato chiaro che 15 valori inferiori a −500 non contrastavano sufficientemente i reward positivi. Invece, valori troppo negativi causavano un comportamento troppo prudente da parte del Pac-Man che preferiva in ogni caso l’azione Avoid Ghost (3.2.3), preferendo la sopravvivenza al raggiungimento di punteggi più elevati. Abbiamo quindi eseguito una serie di test con il reward in caso di morte a −500 e a −1000 e abbiamo notato un sostanziale incremento dei punteggi nel secondo caso. Abbiamo quindi fissato per tutti i test successivi il reward a −1000. I successivi test in fase di apprendimento si sono concentrati sul parametro ρ, sulla scelta della policy da adottare in fase di apprendimento e sulla parametrizzazione delle classi fuzzy. Per ogni diversa parametrizzazione abbiamo eseguito un certo numero di partite di apprendimento per generare la funzione Q(s, a) e l’abbiamo testata eseguendo 1000 partite utilizzando una politica totalmente greedy. Abbiamo osservato che, mediamente ogni partita dà luogo a 400-500 passi di apprendimento. Per prima cosa abbiamo cercato di fissare dei parametri per le classi fuzzy. Per fare ciò abbiamo provato a spostare gli estremi delle classi fuzzy (figura 1). La massima distanza tra due celle all’interno del labirinto è calcolata come la distanza tra gli angoli opposti. Considerando che questa è una situazione estrema, abbiamo individuato come intervallo possibile per l’estremo , ricordando che le distanze sono superiore della classe high un intorno di 57 2 calcolate rispetto all’elemento o agente più vicino. Invece per l’estremo inferiore della classe low ci siamo basati sui punteggi ottenuti, che sono risultati peggioranti per valori minori di 5. Riportiamo in figura 2 i due test più significativi, generati utilizzando in fase di apprendimento una policy random (in accordo con [1]) e ρ = 1, per un numero di partite d’apprendimento che varia da 10 a 150000. I migliori risultati sono stati ottenuti con la parametrizzazione low = 5 med = 12 high = 25. Successivamente abbiamo confrontato l’utilizzo in fase di apprendimento di diverse policy. Abbiamo confrontato la policy random con una -greedy con = 0.1. Abbiamo generato tre differenti Q-function per ogni set di partite d’apprendimento. Per la policy random abbiamo ottenuto medie stabili per tutte e tre le prove, dal momento che le azioni vengono scelte con una distribuzione uniforme, vedi figura 3. Invece, con la policy -greedy abbiamo notato una forte instabilità della velocità di convergenza, dovuta alla casualità dei primi reward negativi (agente non istruito), che limitano la scelta dell’azione alla sola probabilità definita dall’. Nel caso in cui venga penalizzata per prima un azione non ottima, la velocità di convergenza aumenta, poiché la policy tenderà a non selezionare tale azione (se non nel caso random), preferendo azioni migliori. Nel caso contrario invece, quando viene 16 penalizzata un’azione che a convergenza si dimostrerà vincente, la velocità di convergenza rallenta notevolmente, poiché tale azione verrà scelta solo grazie all’. Come si vede in figura 5 in un caso fortuito abbiamo ottenuto una media di 9000 punti con sole 20 partite d’apprendimento. Per ovviare a questo problema abbiamo utilizzato la tecnica Optimistic Initial Values [4], in modo da ripartire l’effetto sopra-citato su tutte le azioni, invece che sulla prima selezionata. Abbiamo poi variato il parametro ρ e riportiamo in figura 4 e in figura 5 i due casi limite, rispettivamente ρ = 0.1 e ρ = 1. Abbiamo notato un leggero miglioramento nel caso ρ = 1. In figura 6 riportiamo le medie dei risultati ottenuti in fase di apprendimento con le diverse parametrizzazioni. In figura 7 confrontiamo il massimo delle medie ottenute con le varie parametrizzazioni. Inoltre presentiamo i risultati che si ottengono utilizzando una policy random con l’agente non istruito (colonna 1) e i risultati ottenuti con un agente prudente (colonna 2): utilizza esclusivamente l’azione Avoid Ghost (3.2.3), sostituita dall’azione Go to Ghost in presenza di power pill attiva. In figura 8 abbiamo riportato i valori finali della Q-f unction risultante dopo 10000 partite di apprendimento. Figura 3: Risultati Random e ρ = 1 17 Figura 4: Risultati -greedy = 0.1 e ρ = 0.1 18 Figura 5: Risultati -greedy = 0.1 e ρ = 1 Figura 6: Risultati con le diverse parametrizzazioni 19 Figura 7: Risultati: parametrizzazioni Massimo delle medie ottenute con le diverse 20 Figura 8: Valori della Q-function dopo 10000 partite 21 6 Conclusioni e Sviluppi Futuri In conclusione l’approccio fuzzy per la rappresentazione degli stati si è dimostrato vincente e ha reso trattabile un problema che altrimenti, in virtù dell’elevato numero di stati, non avrebbe permesso un’implementazione efficiente del Q-Learning. Il nostro Pac-Man ha superato, in media, i risultati ottenuti da [1], che si aggiravano attorno ai 4300 punti. Resta comunque il fatto che noi non abbiamo utilizzato l’implementazione originale di ghost, pur avendo utilizzato la stessa mappa del gioco originale Ms. Pac-Man. Inoltra l’approccio fuzzy per la modellazione dei ghost ha portato ad un’implementazione semplice, tuttavia efficace, e rassomigliante all’implementazione originale. Un possibile sviluppo potrebbe aggiungere la nozione di densità di pillole e la nozione di densità di ghost nel vettore di stato, poiché un giocatore reale non basa la sua strategia solo sulla posizione degli elementi più vicini, ma utilizza un’ampia visione d’insieme. Con la nostra strategia di fuga 3.2.3 abbiamo raddoppiato la media dei punteggi rispetto all’implementazione originaria, ma ,per lo stesso motivo, potrebbe dimostrarsi vincente migliorare l’azione Avoid Ghost 3.2.3. La nostra strategia si basa sulla massimizzazione della distanza ad un passo, ottenendo un comportamento subottimale in quanto greedy, che, alle volte, può portare il Pac-Man verso situazioni in cui resta intrappolato tra 2 ghost senza possibili via di fuga . Il Pac-Man dovrebbe poter ideare delle strategie di fuga a n passi, che prendano in considerazione sia la conformazione del labirinto, sia le possibili traiettorie dei ghost (tramite algoritmi di tipo min-max oppure tramite metodi di ottimizzazione). Inoltre la nostra implementazione semplificata non considera i frutti bonus e le situazioni speciali di gioco che ne derivano. L’unica alterazione considerata è quella dovuta all’attivazione power pill. Punteggi ancora maggiori potrebbero derivare da questa implementazione. Una sfida interessante potrebbe essere l’implementazione delle versioni derivate dal gioco originale in cui i frutti bonus provocano modifiche allo stato e al comportamento dei ghost come: rallentamento, allontanamento forzato, congelamento, etc... 22 Riferimenti bibliografici [1] DeLooze, L.L.; Viner, W.R.; Fuzzy Q-learning in a nondeterministic environment: developing an intelligent Ms. Pac-Man agent, Computational Intelligence and Games, 2009. CIG 2009. IEEE Symposium on , vol., no., pp.162-169, 7-10 Sept. 2009 [2] Shaout,A.; King, B.; Reisner, L.; Real-Time Game Design of PacMan Using Fuzzy Logic, The International Arab Journal of Information Technology, Vol.3 No.4, October 2006 [3] Berenji, H.R.; Vengerov, D.; Cooperation and coordination between fuzzy reinforcement learning agents in continuous state partially observable Markov decision processes, Fuzzy Systems Conference Proceedings, 1999. FUZZ-IEEE ’99. 1999 IEEE International , vol.2, no., pp.621-627 vol.2, 1999 [4] Sutton, R.S.; Barto, A.G.; Reinforcement Learning: An Introduction, MIT Press, 1998 [5] Susan Lammers; Interview with Toru Iwatani, the designer of Pac-Man, Programmers at Work 1986 [6] M. Fischetti; Lezioni di Ricerca Operativa, Edizioni Libreria Progetto Padova 23