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