Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da...

86
Politecnico di Milano Facolt` a di Ingegneria dell’Informazione Corso di Laurea Specialistica in Ingegneria Informatica Dipartimento di Elettronica e Informazione Evoluzione della traiettoria ottimale in un simulatore di guida Relatore: Ing. Daniele LOIACONO Correlatori: Prof. Pier Luca LANZI Ing. Luigi CARDAMONE Tesi di laurea di: Matteo Botta matr. 739397 Vincenzo Gautieri matr. 739391 Anno Accademico 2010-2011

Transcript of Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da...

Page 1: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Politecnico di Milano

Facolta di Ingegneria dell’Informazione

Corso di Laurea Specialistica in Ingegneria Informatica

Dipartimento di Elettronica e Informazione

Evoluzione della traiettoria ottimale

in un simulatore di guida

Relatore: Ing. Daniele LOIACONO

Correlatori: Prof. Pier Luca LANZI

Ing. Luigi CARDAMONE

Tesi di laurea di: Matteo Botta matr. 739397

Vincenzo Gautieri matr. 739391

Anno Accademico 2010-2011

Page 2: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.
Page 3: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Indice

Elenco delle figure iii

Elenco delle tabelle vii

1 Introduzione 1

1.1 Organizzazione della tesi . . . . . . . . . . . . . . . . . . . . . . 2

1.2 Contributi Originali . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Stato dell’arte 5

2.1 L’intelligenza artificiale nei racing games . . . . . . . . . . . . . 6

2.1.1 TORCS . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.2 Il problema della racing line . . . . . . . . . . . . . . . . . . . . 8

2.2.1 Studi correlati . . . . . . . . . . . . . . . . . . . . . . . . 9

3 Rappresentazione della racing line 13

3.1 Le curve di Bezier . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.1.1 Definizione matematica della curva . . . . . . . . . . . . 14

3.1.2 Proprieta . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.1.3 Costruzione delle curve di Bezier . . . . . . . . . . . . . 16

3.2 Rappresentazione della racing line con curve di Bezier . . . . . . 18

3.2.1 Divisione del circuito in sezioni . . . . . . . . . . . . . . 18

3.2.2 Definizione della rappresentazione come curva di Bezier . 19

3.2.3 Identificazione del numero di punti di controllo necessari 22

3.2.4 Calcolo della curva di Bezier e conversione della rappre-

sentazione . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Page 4: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

INDICE

4 Ottimizzazione della traiettoria 27

4.1 Metodi di ottimizzazione . . . . . . . . . . . . . . . . . . . . . . 27

4.2 Codifica della soluzione . . . . . . . . . . . . . . . . . . . . . . . 28

4.3 Inizializzazione della popolazione . . . . . . . . . . . . . . . . . 30

4.4 Valutazione della bonta della Racing Line, il calcolo della fitness 30

4.4.1 Crossover delle traiettorie . . . . . . . . . . . . . . . . . 32

5 Analisi sperimentale 35

5.1 Validazione della rappresentazione del tracciato . . . . . . . . . 36

5.2 Scelte sperimentali . . . . . . . . . . . . . . . . . . . . . . . . . 37

5.2.1 Tracciati analizzati . . . . . . . . . . . . . . . . . . . . . 37

5.2.2 Scelta dei parametri della rappresentazione . . . . . . . . 38

5.2.3 Scelta dei parametri dell’algoritmo genetico . . . . . . . 40

5.3 Risultati sperimentali con fitness function simulata . . . . . . . 41

5.3.1 Evoluzione senza seeding . . . . . . . . . . . . . . . . . . 42

5.3.2 Evoluzione con seeding . . . . . . . . . . . . . . . . . . . 50

5.4 Risultati sperimentali con fitness function stimata . . . . . . . . 54

5.4.1 Studio delle inversioni . . . . . . . . . . . . . . . . . . . 54

5.4.2 Evoluzione con fitness stimata . . . . . . . . . . . . . . . 57

6 Conclusioni e sviluppi futuri 65

6.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

6.2 Sviluppi Futuri . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Bibliografia 69

A Configurazione del tool 75

ii

Page 5: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Elenco delle figure

2.1 Evoluzione dei racing game . . . . . . . . . . . . . . . . . . . . . 5

2.2 TORCS: schermata di gioco . . . . . . . . . . . . . . . . . . . . 7

2.3 Esempio di racing line . . . . . . . . . . . . . . . . . . . . . . . 8

2.4 Un esempio di come viene decomposto un tracciato basandosi

sulle intersezioni tra il cammino minimo (SP) e il cammino a

minima curvatura (MCP) . . . . . . . . . . . . . . . . . . . . . 11

3.1 Esempio di una curva di Bezier . . . . . . . . . . . . . . . . . . 14

3.2 Costruzione di una Bezier di secondo grado . . . . . . . . . . . . 16

3.3 Curve di Bezier di ordine superiore al secondo . . . . . . . . . . 17

3.4 Esempio di movimento di un punto di controllo (1) . . . . . . . 19

3.5 Esempio di movimento di un punto di controllo (2) . . . . . . . 20

3.6 Esempio di posizione dei punti di controllo . . . . . . . . . . . . 22

3.7 Tracciati calcolati con diversi valori dei punti di controllo . . . . 25

4.1 Sezione di un individuo, corrispondente al genoma in tabella 4.2 29

4.2 Diagramma rappresentante il calcolo della funzione di fitness . . 31

4.3 Due generiche traiettorie . . . . . . . . . . . . . . . . . . . . . . 32

4.4 Primo risultato Crossover . . . . . . . . . . . . . . . . . . . . . 33

4.5 Secondo risultato Crossover . . . . . . . . . . . . . . . . . . . . 33

5.1 Esempio di copia di una traiettoria . . . . . . . . . . . . . . . . 37

5.2 Ottimizzazione di racing line su A-speedway senza seeding, con

fitness function simulata. La curva riporta l’andamento di 5 run

evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Page 6: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

ELENCO DELLE FIGURE

5.3 Ottimizzazione di racing line su Alpine-2 senza seeding, con

fitness function simulata. La curva riporta l’andamento di 5

run evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

5.4 Ottimizzazione di racing line su CG-speedway senza seeding,

con fitness function simulata. La curva riporta l’andamento di

5 run evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

5.5 Ottimizzazione di racing line su Ruudskogen senza seeding, con

fitness function simulata. La curva riporta l’andamento di 5 run

evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

5.6 Ottimizzazione di racing line su Wheel-1 senza seeding, con fit-

ness function simulata. La curva riporta l’andamento di 5 run

evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

5.7 Traiettorie a confronto su particolari di pista. In rosso e rappre-

sentanta la racing line di Simplix, mentre in verde quella trovata

con la nostra rappresentazione . . . . . . . . . . . . . . . . . . . 45

5.8 Evoluzione delle traiettorie. Particolare di A-speedway . . . . . 46

5.9 Evoluzione delle traiettorie. Particolare di Alpine-2 . . . . . . . 47

5.10 Evoluzione delle traiettorie. Particolare di CG-speedway . . . . 47

5.11 Evoluzione delle traiettorie. Particolare di Ruudskogen . . . . . 48

5.12 Andamento di 10 punti di controllo durante l’evoluzoine . . . . 48

5.13 Posizione di 4 punti di controllo all’interno del tracciato e

relative deviazioni standard . . . . . . . . . . . . . . . . . . . . 49

5.14 Ottimizzazione di racing line su A-speedway con seeding, con

fitness function simulata. La curva riporta l’andamento di 3 run

evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

5.15 Ottimizzazione di racing line su Alpine-2 con seeding, con fitness

function simulata. La curva riporta l’andamento di 3 run evolutive 51

5.16 Ottimizzazione di racing line su CG-speedway con seeding, con

fitness function simulata. La curva riporta l’andamento di 3 run

evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

iv

Page 7: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

ELENCO DELLE FIGURE

5.17 Ottimizzazione di racing line su Ruudskogen con seeding, con

fitness function simulata. La curva riporta l’andamento di 3 run

evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.18 Ottimizzazione di racing line su Wheel-1 con seeding, con fitness

function simulata. La curva riporta l’andamento di 3 run evolutive 53

5.19 Schema per l’identificazione di un’inversione. . . . . . . . . . . . 55

5.20 Percentuale di inversioni per generazione . . . . . . . . . . . . . 56

5.21 Delta assoluto tra tempo stimato e tempo simulato su 100

generazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

5.22 Ottimizzazione di racing line su A-speedway senza seeding, con

fitness function stimata. La curva riporta l’andamento di 5 run

evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5.23 Ottimizzazione di racing line su Alpine-2 senza seeding, con

fitness function stimata. La curva riporta l’andamento di 5 run

evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5.24 Ottimizzazione di racing line su CG-speedway senza seeding,

con fitness function stimata. La curva riporta l’andamento di 5

run evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.25 Ottimizzazione di racing line su Ruudskogen senza seeding, con

fitness function stimata. La curva riporta l’andamento di 5 run

evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.26 Ottimizzazione di racing line su Wheel-1 senza seeding, con fit-

ness function stimata. La curva riporta l’andamento di 5 run

evolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

v

Page 8: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.
Page 9: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Elenco delle tabelle

4.1 Caratteristiche dei metodi di ottimizzazione . . . . . . . . . . . 28

4.2 Esempio di codifica di un genoma . . . . . . . . . . . . . . . . . 29

5.1 Tracciati utilizzati nella nostra analisi . . . . . . . . . . . . . . . 38

5.2 Variazione del numero di punti di controllo al variare dei parametri 39

5.3 Tabella riassuntiva dei tempi ottenuti su 5 run, senza seeding . . 42

5.4 Tabella riassuntiva contenente i migliori tempi ottenuti in 3 run,

utilizzando il seeding . . . . . . . . . . . . . . . . . . . . . . . . 50

5.5 Confronto tra tempi di lap stimati ed effettivi . . . . . . . . . . 61

5.6 Differenza tra i tempi computazionali medi di ogni run nelle due

tipologie di fitness. . . . . . . . . . . . . . . . . . . . . . . . . . 62

5.7 Tabella di confronto tra i tempi ottenuti tra le due tipologie di

analisi (funzione obiettivo simulata e stimata) . . . . . . . . . . 62

6.1 Risultati a confronto (i tempi sono misurati in secondi) . . . . . 66

Page 10: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.
Page 11: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Capitolo 1

Introduzione

Nel corso degli anni la tecnologia applicata ai videogame e sempre andata

migliorando. La possibilita di avere potenza di calcolo sempre maggiore, di

grafiche migliori, e di realizzare sfide multiplayer offline ed online, ha portato

ad avere videogiochi sempre piu complessi e coinvolgenti. Ultimamente l’enfasi

si e spostata sulla realizzazione di contenuti personalizzati, ossia permettere

all’utente di generare autonomamente feature specifiche per il gioco in questio-

ne. Nei racing game, per esempio, si e partiti dando la possibilita all’utente

di realizzare auto con livree personalizzate, fino ad arrivare alla creazione di

veri e propri tracciati. Ad oggi, la vera sfida consiste nel permettere all’utente

di sfidare, su questi nuovi tracciati, non solo se stessi o altri utenti, ma anche

intelligenze artificiali con vari livelli di difficolta. Questo e un problema di non

poco conto, poiche una volta creato il tracciato, non si ha automaticamente

una racing line buona da seguire, ma andrebbe calcolata analizzando le ca-

ratteristiche del tracciato e le peculiarita della macchina (aerodinamica, grip

etc.). Per la maggiore le case produttrici si avvalgono di esperti del settore i

quali si occupano di disegnare una traiettoria ottimale per ogni circuito [21].

Il nostro lavoro si inserisce proprio in questo ambito, in quanto l’obiettivo

finale e quello di riuscire a generare una racing line ottima automaticamente

partendo solamente dalle caratteristiche della pista e della macchina interes-

sata. Il simulatore scelto per gli esperimenti riportati in questa tesi e TORCS,

“The Open Racing Car Simulator”, un complesso simulatore di guida auto-

Page 12: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Introduzione

mobilistica open source. Le ragioni che hanno determinato questa scelta sono

la versatilita del gioco, la presenza di alcuni utili strumenti per la gestione dei

BOT e la possibilita di usare del codice open source. In particolare quest’ul-

tima caratteristica e stata molto importante per l’implementazione di alcune

modifiche che hanno permesso di adattare il simulatore al tipo di esperimen-

ti eseguiti in questa tesi. Inoltre TORCS, ad oggi, e lo standard in ambito

accademico per la ricerca e lo sviluppo dell’inteligenza artificiale applicata ai

racing game.

1.1 Organizzazione della tesi

Nel Capitolo 2 vengono presentati gli studi effettuati fino ad oggi nell’ambito

della generazione di racing line e TORCS, il simulatore usato per lo scopo di

questa tesi.

Nel Capitolo 3 vengono introdotti gli strumenti matematici utilizzati e le

assunzioni formulate per la creazione della rappresentazione da noi introdotta.

Nel Capitolo 4 viene descritto il processo evolutivo, esaminando in dettaglio i

principali componenti che permettono l’esecuzione dell’algoritmo genetico.

Nel Capitolo 5 vengono illustrati gli esperimenti effettuati e i risultati ottenuti

al variare dei parametri in gioco.

Nel Capitolo 6 vengono mostrate le conclusioni estrapolate ad esperimenti

terminati e vengono inoltre presentati alcuni interessanti sviluppi futuri.

1.2 Contributi Originali

• Abbiamo creato una nuova rappresentazione per la generazione di una

racing line basata interamente su curve di Bezier, integrandola in TORCS

e mostrando come sia possibile, ottimizzandola tramite un processo evo-

lutivo, ottenere dei lap time anche inferiori a quelli del miglior BOT

presente in TORCS.

2

Page 13: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

1.2 Contributi Originali

• Abbiamo valutato le prestazioni dell’algoritmo genetico in base all’uti-

lizzo di diverse strategie per l’inizializzazione della popolazione.

• Abbiamo valutato la bonta dello stimatore interno al BOT Simplix,

utilizzandolo come funzione di fitness alternativa.

3

Page 14: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.
Page 15: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Capitolo 2

Stato dell’arte

All’interno dei racing games il livello di realismo e decisamente aumentato

nell’arco degli ultimi 40 anni, passando da semplici giochi in cui l’obiettivo

era rimanere all’interno di un tracciato, a sfide sempre piu avvincenti contro

player umani e virtuali (fig. 2.1). Per far sı che l’utente possa giocare contro

player virtuali pero, e necessario che a questi venga fornita una traiettoria (o

racing line) da seguire durante la gara.

(a) Gran Track 10. (b) F1 2011.

Figura 2.1: Evoluzione dei racing game

In questo capitolo descriveremo innanzi tutto come l’intelligenza artificiale

e utilizzata all’interno dei racing games, in seguito TORCS, il simulatore usato

per lo scopo di questa tesi, ed infine illustreremo gli studi piu rilevanti effettuati

nell’ambito della generazione automatica di racing line.

Page 16: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Stato dell’arte

2.1 L’intelligenza artificiale nei racing games

All’interno dei racing games e necessario l’utilizzo di un’intelligenza artificiale

affinche il player abbia dei rivali virtuali che si comportino nel modo piu rea-

listico possibile, rendendo cosı l’esperienza di gioco dell’utente appassionante.

Alcuni dei piu recenti lavori relativi ai racing games e stato svolto da Togelius

et al. utilizzando un semplice car racing game 2D realizzato in java. In [34, 35],

Togelius et al. investigano su vari schemi di informazioni sensoriali (in prima

persona, in terza persona, etc.) studiando la capacita di generalizzazione dei

controllori evoluti. Piu recentemente, Cardamone et al. [7, 6] hanno applicato

la neuroevoluzione per addestrare un comportamento di guida e di sorpasso,

nell’ambito di un sofisticato simulatore di gare automobilistiche (TORCS ).

Il problema del sorpasso e stato inoltre considerato in [29] usando un’ar-

chitettura fuzzy modulare, e in [23] sfruttando un approccio di apprendimento

per rinforzo. Diversi lavori, come [26] [8] [36], applicano l’apprendimento per

imitazione partendo da dati relativi ad esseri umani in modo da generare stili

di guida piu realistici. In [37] e all’interno di [9], gli algoritmi genetici sono

stati applicati per ottimizzare il setup di un macchina da corsa, utilizzando

rispettivamente i giochi Formula One Challenge e TORCS.

Alcuni dei piu recenti lavori [31, 5, 28] riguardanti i racing game hanno

origine dalla partecipazione alla Simulated Car Racing Championship [22], una

competizione internazionale organizzata da Loiacono et al. dove l’obiettivo e

quello di sviluppare il miglior guidatore per TORCS capace di gareggiare da

solo e contro altri sfidanti.

2.1.1 TORCS

TORCS, The Open Racing Car Simulator, e un videogioco di corse 3D open

source basato su tecnologie OpenGL. Il progetto TORCS nacque nel 1997

grazie al lavoro di due programmatori francesi: Eric Espie e Christophe Guion-

neau. Scritto in C++, TORCS e stato sviluppato principalmente con l’idea di

permettere delle sfide tra programmatori nello sviluppo di robot. Il software

6

Page 17: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

2.1 L’intelligenza artificiale nei racing games

simula un ambiente tridimensionale completo e implementa un motore molto

complesso per la gestione della fisica, che considera tutti gli aspetti di una

vera auto da corsa, come l’entita dei danni, il consumo di carburante, l’uti-

lizzo della frizione, l’aerodinamica e molto altro. In questo aspetto, il gioco e

molto completo ed e in grado di competere allo stesso livello con molti giochi

commerciali attualmente sul mercato. Inoltre il software e ben strutturato per

semplificare eventuali apporti di modifiche [1].

Figura 2.2: TORCS: schermata di gioco

In Figura 2.2 e rappresentata un’immagine di TORCS in azione. TORCS

presenta un ambiente molto interessante per esperimenti sull’intelligenza com-

putazionale. Il suo codice e open source: questa caratteristica e cruciale per

adattare TORCS allo sviluppo di esperimenti di questo tipo.

7

Page 18: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Stato dell’arte

2.2 Il problema della racing line

Affinche una macchina possa girare all’interno di una pista in maniera com-

petitiva, deve poter sostenere alte velocita in ogni punto del tracciato. Date

le caratteristiche della macchina, guidare ad alte velocita e facilitato prin-

cipalmente dall’inseguire la linea che consente la miglior prestazione possibile

all’interno dei limiti del tracciato. Questa linea e spesso chiamata “racing line”

o “traiettoria” (fig. 2.3). La realizzazione di una buona racing line comporta

la necessita di trovare un giusto trade-off tra due problemi contrapposti. Il

primo e quello di riuscire a percorrere il percorso piu breve possibile, mentre

il secondo richiede di seguire il percorso che garantisce la massima velocita.

Chiaramente i due non coincidono, basti pensare a una semplice curva, in cui

il percorso piu breve si trova percorrendo la pista in prossimita del lato interno,

mentre per affrontarla con velocita elevata e necessario compiere un percorso

con raggio di curvatura elevato.

Figura 2.3: Esempio di racing line

8

Page 19: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

2.2 Il problema della racing line

La necessita di creare una racing line nasce dal fatto che all’interno di un

racing game, i player virtuali hanno bisogno di conoscere la traiettoria da se-

guire durante una gara. La racing line puo essere ben identificata da un pilota

esperto. Un modo ovvio per farlo e provare piu volte la pista in questione

e determinarla. Ci sono diversi scenari in cui il designer deve calcolare varie

racing line ottime in base alle caratteristiche del videogioco, dell’ambiente in

cui sono inserite (asfalto, sterrato...) e in base ai tipi di mezzi che partecipe-

ranno alla competizione. Una racing line puo essere precalcolata o calcolata

dinamicamente, ma in entrambi i modi e necessario basarsi sulle caratteristi-

che del tracciato. Progettare diverse racing line e chiaramente un processo

lungo, laborioso e potenzialmente non privo di errori. Ad oggi, all’interno del-

la comunita che si occupa di ricerca nei videogiochi, vi sono solamente pochi

lavori riguardanti la generazione automatica di una racing line usando semplici

euristiche [3] [11] [14].

2.2.1 Studi correlati

Trovare la miglior traiettoria di gara possibile, per una determinata macchina,

dato un tracciato, e uno dei problemi che gli sviluppatori di racing game devono

risolvere. I giochi in commercio tipicamente si basano su traiettorie disegnate

da un esperto [21]. Le poche eccezioni a questo approccio umano includono

Colin McRae Rally1 (Codemaster), dove la racing line e calcolata tramite una

rete neurale addestrata da un esperto di dominio, e Forza Motorsport2 series

(Microsoft) dove le tecniche di supervised learning sono sfruttate per istruire

le AIs e la computazione evolutiva e applicata per ottimizzare le loro traiet-

torie. I racing gamen Open-source solitamente fanno affidamento su approcci

di tipo euristico. Gli esempi di maggior successo che utilizzano questo tipo di

approccio comprendono: l’algoritmo K1999 [11], sviluppato da Remi Coulom;

Simplix [3] sviluppato da Wolf-Dieter Beelitz per “The Open Car Racing Simu-

lator” (TORCS ) [1], basato su una semplice euristica; il BOT di Jussi Pajala

1http://en.wikipedia.org/wiki/Colin_McRae_Rally2http://en.wikipedia.org/wiki/Forza_Motorsport

9

Page 20: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Stato dell’arte

per “the Robot Auto Racing Simulator” (RARS) [2] che applica A*; DougE1

BOT per RARS di Doug Elenveld che utilizza gli algoritmi genetici, Nono-

stante si basino su tecniche differenti, tutti gli approcci precedenti sfruttano

un’euristica simile che cerca di ridurre il piu possibile la curvatura della racing

line. Infatti, minore e la curvatura della traiettoria, maggiore sara la velocita

raggiungibile senza perdere grip. Dall’altro lato, Casanova [12] mostra che

per trovare la miglior racing line e necessario tenere in considerazione diversi

aspetti dinamici della macchina quali il punto di frenata rispetto al tracciato,

la capacita di accelerazione della macchina, i cambi di direzione, etc. Benche

molto forte, l’approccio mostrato al’interno di [12] richiede un modello formale

del veicolo e delle sue interazioni con l’ambiente di gara molto dettagliato, che

solitamente non e disponibile nei racing game. Piu recentemente, Braghin

et al. [4] suggeriscono di calcolare la racing line come trade-off tra la mini-

mizzazione della distanza di gara e la minimizzazione della curvatura nella

traiettoria da seguire. In particolare, Braghin et al. [4] definisce il problema di

trovare la racing line ottima come un problema di programmazione quadratica.

Infine, il problema di calcolare una buona traiettoria e correlato al path e al

trajectory planning, un problema che e stato ampliamente studiato nel campo

della robotica mobile e dei veicoli autonomi [17, 32, 18, 19, 20, 13, 30, 27, 10].

Inoltre nel febbraio 2011 Microsoft ha registrato un brevetto riguardante un

nuovo approccio per l’ottimizzazione di una racing line [25]. Normalmente,

una “buona racing line” e essenzialmente una linea con una bassa curvatura

geometrica, che rimanga all’interno del tracciato. Questo perche la bassa cur-

vatura e d’aiuto alla velocita, dal momento che in un angolo, supponendo che

la macchina abbia un limite di trazione laterale, la massima velocita sostenibile

e inversamente proporzionale alla curvatura della traiettoria che si appresta a

seguire. I ricercatori di Microsoft [25] basandosi su questo principio, ed uti-

lizzando un adeguato livello di approssimazione, hanno ricavato un algoritmo

che calcola la racing line minimizzando la curvatura della traiettoria utilizzan-

do un processo di ottimizzazione gradient-based. Questa linea ricavata non e

necessariamente la migliore, ma e molto vicina a quella che puo esser giudicata

la miglior traiettoria possibile.

10

Page 21: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

2.2 Il problema della racing line

Figura 2.4: Un esempio di come viene decomposto un tracciato basandosi sulle

intersezioni tra il cammino minimo (SP) e il cammino a minima curvatura (MCP)

Un ulteriore approccio a questo problema e quello applicato da Cardamone

et al. in [24]. In questo lavoro, date due traiettorie precalcolate, una valutando

il cammino minimo (SP), ed una cercando la minima curvatura (MCP), viene

utilizzato un algoritmo genetico per generare una racing line come trade-off

tra le due. In [24] la racing line e definita come una sequenza ~P1, . . . , ~Pn di

punti nel tracciato, dove l’ultimo punto ~Pn e connesso al primo ~P1. Un modo

conveniente per rappresentare ogni punto ~Pi della racing line e quello di utiliz-

zare la tupla 〈δi, αi〉, dove αi e la distanza laterale del punto da uno dei bordi

del tracciato (per esempio dal bordo destro), normalizzato per la larghezza

del tracciato W mentre, δ e la distanza del punto dalla linea di partenza del

tracciato, calcolata facendo riferimento agli assi della pista. Questo lavoro se-

gue l’approccio presentato in [4], inoltre viene assunto che i punti della racing

line siano equalmente distanti, qundi per ogni i ∈ {1, . . . , n − 1}, δi+1 − δi e

costante. Per applicare l’algoritmo genetico alla ricerca di una racing line, e

stata decomposta la pista in varie sezioni t1, · · · , tm. Il punto iniziale e finale

di ogni sezione del tracciato sono identificati dalle interseziono fra lo shortest

11

Page 22: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Stato dell’arte

path e il cammino a minima curvatura. Percio, la sezione tj della pista, e

definita come la parte compresa tra le intersezioni j − th e (j + 1) − th tra

il cammino minimo e il cammino a curvatura minima. La figura 2.4 mostra

un esempio di come viene decomposta un tracciato. Sulla base delle decom-

posizione del tracciato illustrata precedentemente, ogni soluzione candidata e

semplicemente codificata come un vettore di pesi εt1 , · · · , εtm , dove εtj regola

la combinazione convessa tra i due cammini nella sezione tj del tracciato. Af-

finche si possa valutare una soluzione e necessario un procedimento diviso in

due passi. Innanzitutto viene decodificato il genoma, in modo che si trasformi

in una traiettoria. Quindi per ogni sezione tj del tracciato il cammino minimo

e la minima curvatura sono combinati in accordo al peso εtj come segue:

αi = αSP,i · εtj + αMCP,i · (1− εtj ) ∀~Pi ∈ tj (2.1)

dove αi e la deviazione laterale del i−esimo punto ~Pi della racing line calcolata;

mentre αMCP,i e αSP,i sono le deviazioni laterali degli i− esimi punti apparte-

nenti al cammino minimo e al cammino a minima curvatura. Successivamente

per valutare la racing line ottenuta viene effettuata una simulazione. La fun-

zione di fitness viene calcolata in base al lap time restituito dalla simulazione.

Il lavoro di Cardamone et al. [24] e stato ampiamente illustrato perche anche

nel nostro elaborato utilizzeremo una rappresentazione simile della racing line,

e poiche anche noi sfrutteremo un meccanismo di ottimizzazione evolutiva per

la ricerca della traiettoria ottima.

12

Page 23: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Capitolo 3

Rappresentazione della racing

line

Una racing line e definita come una sequenza ~P1, . . . , ~Pn di punti nel tracciato,

dove l’ultimo punto ~Pn e connesso al primo ~P1. Il problema principale risiede

nel definire una rappresentazione compatta per la realizzazione di quest’ulti-

ma, ossia un rappresentazione che riesca a generare curve diverse modificando

il minor numero di parametri possibile. La nostra scelta e ricaduta sull’utilizzo

delle curve di Bezier, poiche quest’ultime sono facilmente realizzabili e modi-

ficabili. Infatti le forme che esse possono assumere dipendono esclusivamente

dalla posizione dei loro punti di controllo. Nel paragrafo successivo daremo

una visione generica di cosa sia una curva di Bezier e come viene realizzata la

nostra rappresentazione.

3.1 Le curve di Bezier

Una curva di Bezier e una curva parametrica usata frequentemente nel cam-

po della computer graphics e in campi collegati. Le curve di Bezier furono

largamente pubblicizzate nel 1962 dall’ingegnere francese Pierre Bezier che le

uso per disegnare le carrozzerie delle automobili. Le curve furono realizzate

nel 1959 da Paul de Casteljau usando l’algoritmo di De Casteljau, un metodo

Page 24: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Rappresentazione della racing line

numerico stabile per la valutazione di queste curve. Gli utilizzi principali di

queste curve sono nel campo della computer grafica, dell’animazione e della

creazione di fonts.

3.1.1 Definizione matematica della curva

Una curva di Bezier (fig. 3.1) e definita dal suo ordine e da un insieme di

punti di controllo da P0 a Pn. Il numero n dei punti di controllo dipende

dall’ordine della curva. Il primo e l’ultimo sono sempre i punti estremi della

curva; comunque, i punti di controllo intermedi (se esistono) generalmente non

giacciono sulla curva.

Figura 3.1: Esempio di una curva di Bezier

Curve lineari Dati i punti P0 e P1, una Bezier lineare e semplicemente una

linea retta condotta tra quei punti. La curva e data da:

B(t) = (1− t)P0 + tP1, t ǫ [0, 1] (3.1)

ed e equivalente ad un’interpolazione lineare.

14

Page 25: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

3.1 Le curve di Bezier

Curve quadratiche Una Bezier quadratica rappresenta il cammino tracciato

dalla funzione B(t), dati i punti P0, P1 e P2:

B(t) = (1− t)2P0 + 2t(1− t)P1 + t2P2, t ǫ [0, 1] (3.2)

Una Bezier quadratica e un segmento parabolico. Dato che una parabola

e una sezione conica, alcune fonti riferiscono la Bezier quadratica come

“arco di cono”.

Generalizzazione Una curva di Bezier puo essere definita per ogni grado n.

• Una definizione ricorsiva la esprime come un’interpolazione lineare

tra due curve di Bezier di grado n − 1. Sia BP0,P1,...,Pnla curva

determinata dai punti P0, P1, ..., Pn, allora dato BP0(t) = P0 come

punto iniziale, si ha

B(t) = BP0,P1,...,Pn(t) = (1−t)BP0,P1,...,Pn−1

(t)+tBP1,P2,...,Pn(t) (3.3)

• Altrimenti puo essere generalizzata come segue. Dati i punti

P0, P1, ..., Pn, la curva e definita da:

B(t) =n

i=0

(

n

i

)

Pi(1− t)n−iti, t ǫ [0, 1] (3.4)

Il poligono formato connettendo i punti attraverso linee rette, iniziando

da P0 e finendo con Pn e l’insieme convesso contenente i punti Pi. Questo

poligono e chiamato poligono di Bezier, ed esso contiene la curva di

Bezier.

3.1.2 Proprieta

• Interpolazione dei punti estremi: la curva comincia a P0 e finisce a Pn;

• La curva e una linea retta se e solo se i punti di controllo sono collineari.

• L’inizio (fine) della curva e tangente alla prima (ultima) sezione del

poligono di Bezier.

15

Page 26: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Rappresentazione della racing line

• Una curva puo essere divisa in ogni punto in due sottocurve, o in un

numero arbitrario di sottocurve, ognuna delle quali e essa stessa una

curva di Bezier.

• Molte curve che sembrano semplici, come un cerchio, non possono es-

sere descritte esattamente tramite una Bezier o segmenti di Bezier, ma

quest’ultime possono essere considerate una loro buona approssimazione.

3.1.3 Costruzione delle curve di Bezier

Curve lineari: Il t nella funzione di una curva di Bezier lineare puo essere

pensato come la descrizione del tragitto di B(t) da P0 a P1. Per esempio

quando t = 0.25, B(t) e un quarto del percorso da P0 a P1. Al variare di

t da 0 a 1, B(t) descrive l’intero segmento compreso tra P0 e P1.

Curve quadratiche: Per le curve quadratiche di Bezier (fig. 3.2) si possono

costruire punti intermedi Q0 e Q1 al variare di t da 0 a 1:

• Il punto Q0 varia da P0 a P1 e descrive una curva lineare di Bezier.

• Il punto Q1 varia da P1 a P2 e descrive una curva lineare di Bezier.

• Il punto B(t) varia da Q0 a Q1 e descrive una curva quadratica di

Bezier.

Figura 3.2: Costruzione di una Bezier di secondo grado

16

Page 27: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

3.1 Le curve di Bezier

Curve di ordine superiore: per queste curve e necessario un maggior nu-

mero di punti intermedi. Per una curva cubica (fig. 3.3(a)) si possono

costruire i punti Q0, Q1 e Q2 che descrivono una curva di Bezier lineare,

e i punti R0 e R1 che descrivono una curva di Bezier quadratica. Sup-

poniamo invece di avere una curva di quarto ordine (fig. 3.3(b)). Sara

necessario costruire dei punti intermedi Q0, Q1, Q2 e Q3 che descrivono

curve di Bezier lineari, i punti R0, R1 e R2 che descrivono curve qua-

dratiche di Bezier, e i punti S0 e S1 che descrivono una curva di Bezier

cubica. Ora, il punto B(t) descrivera la nostra curva di Bezier.

(a) Costruzione di una Bezier cubica (b) Costruzione di una Bezier di qarto

grado

Figura 3.3: Curve di Bezier di ordine superiore al secondo

17

Page 28: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Rappresentazione della racing line

3.2 Rappresentazione della racing line con

curve di Bezier

Una volta determinato il tipo di curva, e necessario stabilire come implemen-

tare la rappresentazione, e quali saranno i parametri che ci permetteranno di

creare curve sempre diverse. Date le caratteristiche della curva di Bezier, ci

sembra naturale far ricadere tale scelta sui punti di controllo, dato che grazie

ad essi possiamo manovrare l’intera curva. Per far cio, sara necessario seguire

alcuni semplici passi.

• Divisione del circuito in sezioni, per rendere il calcolo piu agile.

• Definizione della traiettoria come curva di Bezier.

• Calcolo del numero di punti di controllo necessari al fine di poter

rappresentare una traiettoria plausibile ed efficace.

• Calcolo della curva di Bezier rappresentata dai punti precedentemente

elaborati, e conversione della rappresentazione.

Nei prossimi paragrafi descriveremo piu nel dettaglio i vari passi.

3.2.1 Divisione del circuito in sezioni

Supponiamo di sapere il numero di punti di controllo utilizzati nella rappre-

sentazione. Se questo numero e troppo elevato, il calcolo della curva risultera

decisamente oneroso. Per questo motivo, puo essere una buona scelta dividere

il circuito in sezioni, ognuna con la propria curva di Bezier rappresentativa.

Il tutto si trasforma quindi in n sottoproblemi parzialmente indipendenti, i

quali semplificano notevolmente i processi di elaborazione e creazione della

rappresentazione. La motivazione per cui le sottocurve rimangono parzial-

mente dipendenti tra loro risiede nella necessita di rendere continui tra loro i

vari segmenti di racing line. Per far cio, definiamo a priori il numero massimo

di punti di controllo presenti all’interno di una sezione, esclusa l’ultima che

conterra un numero di punti variabile.

18

Page 29: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

3.2 Rappresentazione della racing line con curve di Bezier

3.2.2 Definizione della rappresentazione come curva di

Bezier

Affinche la rappresentazione non gravi ulteriormente sul costo computazionale,

bisogna trovare il modo di far dipendere la curva dal minor numero di para-

metri possibile. Visto che la curva di Bezier dipende solo dalla posizione dei

suoi punti di controllo, abbiamo realizzato la rappresentazione in modo da far

dipendere la posizione di un punto di controllo da un solo parametro. Questo

ci permettera, in fase di ottimizzazione, di avere un numero di incognite uguale

al numero di punti di controllo. Dato che la posizione di un punto nel piano

dipende dalle sue coordinate (x, y), abbiamo optato, col fine di diminuire i

gradi di liberta, per vincolare la posizione di quest’ultimo lungo una retta che

unisce due punti dei bordi del tracciato in corrispondenza della stessa distanza,

lungo il tracciato, dal punto di partenza (Figura 3.4).

Figura 3.4: Esempio di movimento di un punto di controllo. In rosso e rappre-

sentato il punto di controllo, mentre in verde la retta di riferimento su cui puo

muoversi

Una volta ottenute le sezioni, si puo partire con l’algoritmo 1. La prima

sezione non presenta particolari problemi, si tratta di calcolare la posizione

dei punti di controllo. Questi punti si muoveranno in percentuale in base al

valore del relativo parametro dato in input, sulla retta di riferimento. Nelle

19

Page 30: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Rappresentazione della racing line

sezioni intermedie, oltre a calcolare la posizione dei punti, bisogna imporre la

continuita tra una sezione e l’altra, in modo che il tracciato risultante sia privo

di punti angolosi, difficilmente seguibili con una macchina. Al fine di ottenere

questo risultato e necessario che il primo segmento del poligono di Bezier della

i−esima e l’ultimo segmento del poligono della (i−1)−esima siano collineari.

Il secondo punto della sezione in analisi, che e quello interessato dal problema

della continuita, non si muovera sulla solita retta, ma sul segmento collineare

all’ultima parte del poligono di Bezier della sezione precedente che arriva ad

intersecarsi con l’usuale retta di riferimento (figura 3.5), della percentuale data

dal parametro in input.

Figura 3.5: Esempio di movimento di un punto di controllo. In rosso sono rappre-

sentati i punti di controllo collineari, in marrone le due usuali rette di riferimento,

in ciano la fine di una sezione e in verde il segmento su cui il secondo punto di

controllo della sezione puo muoversi

Il ragionamento e identico per l’ultima sezione della pista, con l’aggiunta

dell’imposizione della continuita anche con la prima sezione del tracciato in

modo che anche alla fine la traiettoria sia priva di discontinuita di primo e

secondo ordine.

20

Page 31: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

3.2 Rappresentazione della racing line con curve di Bezier

Algorithm 1 Calcolo della posizione dei punti di controllo

1: for (Sezioni) do

2: if (Prima Sezione) then

3: for (Punti di controllo nella sezione) do

4: Calcolo la posizione;

5: end for

6: else if (Sezione Intermedia) then

7: for (Punti di controllo nella sezione ) do

8: if (Primo Punto) then

9: Impongo la continuita con la sezione precedente;

10: Calcolo la posizione;

11: else(Altri Punti)

12: Calcolo la posizione;

13: end if

14: end for

15: else if (Ultima Sezione) then

16: for (Punti di controllo nella sezione) do

17: if (Primo Punto) then

18: Impongo la continuita con la sezione precedente;

19: Calcolo la posizione;

20: else if (Punti Intermedi) then

21: Calcolo la posizione;

22: else if (Ultimo Punto) then

23: Impongo la continuita con la prima sezione;

24: Calcolo la posizione;

25: end if

26: end for

27: end if

28: end for

Nella figura 3.6 seguente e possibile vedere uno scorcio di traiettoria

riassuntivo di quanto illustrato fino ad ora.

21

Page 32: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Rappresentazione della racing line

510 520 530 540 550 560 570 580 590

560

570

580

590

600

610

620

630

Figura 3.6: Esempio di posizione dei punti di controllo; in verde e rappresentata

la racing line, definita dai punti di controllo in rosso, i quali si possono muovere

lungo le linee tratteggiate in blu; la linea in ciano rappresenta la fine di una sezione

3.2.3 Identificazione del numero di punti di controllo

necessari

Il numero di punti di controllo da utilizzare in una rappresentazione e un

parametro delicato, in quanto un numero troppo esiguo porta a non realizzare

una curva efficace e valida per una traiettoria, mentre un numero troppo elevato

appesantisce in maniera notevole la rappresentazione rendendo la successiva

fase di ottimizzazione computazionalmente onerosa.

Per far cio bisogna quindi definire alcuni parametri che ci permettano di

trovare il giusto compromesso tra le due situazioni sopra citate. Vediamo quali

sono questi parametri.

• SogliaCurvatura (SC): questo parametro definisce la massima curvatura

cumulabile all’interno di una sezione compresa tra due punti di controllo;

22

Page 33: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

3.2 Rappresentazione della racing line con curve di Bezier

• FinestraCampionamento (FC): rappresenta la finestra di campionamen-

to, ossia ogni quanto controlliamo il livello di curvatura;

• MaxSpazio (MS): in caso la soglia non sia raggiunta prima di questo

numero di confronti, inseriamo comunque un punto di controllo (serve

soprattutto all’interno di rettilinei per permettere di seguire traiettorie

che non siano esclusivamente lineari).

Una volta definiti i parametri dobbiamo calcolare la curvatura per ogni

punto del tracciato. Per fare cio applichiamo la formula per il calcolo del

raggio di una circonferenza circoscritta ad un triangolo:

R =abc

4A(3.5)

dove a, b e c rappresentano i lati del triangolo inscritto, e A e l’area calcolata

con al formula di Erone. Dato che la curvatura e l’inverso del raggio, ci basta

invertire il risultato ottenuto dall’equazione (3.5) per ricavare il valore cercato.

Fissiamo il primo e l’ultimo punto di controllo in concomintanza dell’inizio del

tracciato, in modo che la traiettoria inizi e finisca nello stesso punto. Succes-

sivamente sommiamo la curvatura di ogni punto analizzato in base al valore

di FC e, nel caso in cui questa superi la SC, salviamo l’indice che identifichera

la posizione relativa all’interno del tracciato del punto di controllo. Inoltre

abbiamo fatto in modo che non intercorra troppo spazio tra due punti di con-

trollo poiche non e detto che la traiettoria migliore all’interno di una zona della

pista con un basso livello di curvatura sia una retta. Cosi facendo otteniamo il

numero e la posizione relativa alla totalita del tracciato dei punti di controllo

(algoritmo 2).

23

Page 34: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Rappresentazione della racing line

Algorithm 2 Identificazione del numero e posizione relativa all’interno del

tracciato dei punti di controllo

1: Carica la pista;

2: for (Dimensione della pista) do

3: Calcolo della curvatura di ogni punto;

4: end for

5: Fisso l’indice del primo punto di controllo all’inizio del traccaito

6: for (i=0: FinestraCampionamento: Dimensione della pista) do

7: Sommo il valore delle curvature dei punti;

8: if (SogliaCurvatura superata) || (MaxSpazio tra due punti superato)

then

9: Fisso l’indice del punto di controllo;

10: end if

11: end for

12: Fisso l’indice dell’ultimo punto di controllo uguale al primo;

3.2.4 Calcolo della curva di Bezier e conversione della

rappresentazione

Calcolate le coordinate dei punti di controllo, abbiamo tutti gli elementi per

identificare i punti che comporranno la nostra traiettoria vera e propria (fig.

3.7). A tal fine utilizziamo la formula generica (3.4). Ai fini implemen-

tativi abbiamo utilizzato per il calcolo del coefficiente binomiale la formula

moltiplicativa (3.6), evitando cosi di incorrere in errori di overflow.

(

n

i

)

=

k∏

i=1

n− (k − i)

i(3.6)

Ottenuta la curva di Bezier, il modello va ampliato affinche l’inseguitore sia

in grado di leggere la traiettoria. Per fare cio e necesserio passare, per ogni

punto della racing line, dalla rappresentzione cartesiana (xi,yi) a quella basata

sulle ascisse curvilinee (δi,αi). δi identifica la distanza del punto i− esimo dal

punto di partenza, mentre αi rappresenta la distanza dal centro del tracciato

con valori compresi tra (-1.1,1.1).

24

Page 35: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

3.2 Rappresentazione della racing line con curve di Bezier

(a) Punti di controllo scalati con valore 0.1

(b) Punti di controllo scalati con valore 0.8

Figura 3.7: Tracciati calcolati con diversi valori dei punti di controllo

25

Page 36: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.
Page 37: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Capitolo 4

Ottimizzazione della traiettoria

All’interno di questo capitolo illustreremo il processo utilizzato per ottimizzare

una racing line rappresentata col metodo mostrato in precedenza. Ci dedi-

cheremo innanzi tutto a una definizione del metodo che utilizzeremo, ossia un

algoritmo genetico, soffermandoci sui caratteri fondamentali che caratterizzano

il nostro approccio. Inizieremo percio con introdurre la codifica della soluzio-

ne al problema, illustrando successivamente come verra calcolata la funzione

obiettivo nella nostra evoluzione.

4.1 Metodi di ottimizzazione

Definita la rappresentazione da utilizzare, si deve scegliere come ricercare una

soluzione ottima. Per fare cio esistono principalmente due approcci. I metodi

locali, i quali convergono in maniera deterministica ad un massimo (minimo)

locale della funzione obiettivo, fissato un valore dei parametri iniziali, e i me-

todi globali, i quali convergono in maniera stocastica ad un valore prossimo al

massimo (minimo) assoluto della funzione obiettivo, sempre dopo aver fissato

il valore iniziale dei parametri.

Dato che, come mostrato nel capitolo precedente, la nostra rappresentazio-

ne dipende potenzialmente da un numero elevato di parametri e la funzione

obiettivo e difficilmente esprimibile matematicamente, in questo elaborato e

stato scelto un approccio di tipo globale, ed in particolare verra utilizzato un

Page 38: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Ottimizzazione della traiettoria

Metodi locali Metodi globali

sono rapidi sono di lenta convergenza

sono fortemente influenzati dalla scel-

ta dei parametri iniziali

dipendono molto poco dalla soluzione

iniziale

richiedono che la funzione obiettivo

abbia opportune proprieta matemati-

che

non richiedono particolari proprieta

della funzione obiettivo

problemi con un alto numero di

parametri diventano intrattabili

permettono di studiare problemi con

un elevato numero di parametri

producono un insieme di soluzioni

sub-ottimali (oltre quella ottimale)

richiedono la taratura (in base alla

esperienza) di parecchi parametri di

simulazione

Tabella 4.1: Caratteristiche dei metodi di ottimizzazione

metodo evolutivo. In particolare per il nostro studio abbiamo utilizzato un

tool gia esistente. Questo tool, che noi denomineremo per semplicita GAtool-

box [33], offre diversi tipi di selection, ricombinazione, mutazione, niching, e

gestione dei vincoli, dando la possibilita di risolvere problemi mono e multi

obiettivo. Inoltre il tool e facilmente estendibile e modificabile per permettere

l’inserimento di altri operatori e per risolvere problemi ad-hoc.

4.2 Codifica della soluzione

La creazione di una traiettoria casuale tramite curve di Bezier e relativamente

semplice. Dato che la curva di Bezier si basa su dei punti di controllo, basta

modificare la posizione di questi punti per ottenere traiettorie sempre diverse.

Naturalmente viene impedita la creazione di traiettorie che escano dai limiti

del circuito oltre una certa soglia, e per far cio, dato che la posizione dei punti

28

Page 39: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

4.2 Codifica della soluzione

di controllo si puo muovere tramite un parametro α su una retta che collega due

punti corrispondenti dei bordi della pista, il valore di questa α sara vincolato

all’interno del range [-0.1,1.1]. Il genoma sara quindi composto da un numero

di geni uguale al numero di punti di controllo che definiscono la traiettoria in

questione, ed ognuno di questi conterra il valore dell’α corrispondente.

0.8 0.5 0.6 0.33 0.45 0.92 1.1 0.79 0.2 0.57

0.92 0.71 0.48 0.21 -0.03

Tabella 4.2: Esempio di codifica di un genoma

350 400 450 500 550 600 650 700

−10

0

10

20

30

40

50

60

70

Figura 4.1: Sezione di un individuo, corrispondente al genoma in tabella 4.2

Una volta ottenuto il miglior genoma (tabella 4.2) questo viene trasforma-

to nella traiettoria corrispondente (fig. 4.1). Per far cio utilizziamo i valori

contenuti nel genoma e li passiamo come dati di input al calcolo della posi-

zione dei punti di controllo, come spiegato nella sezione 3.2, dove ogni gene

rappresentera di quanto il corrispettivo punto di controllo scalera sulla propria

retta di riferimento.

29

Page 40: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Ottimizzazione della traiettoria

4.3 Inizializzazione della popolazione

Il GAtoolbox [33] offre la possibilita di scegliere se fornire o meno in input una

determinata popolazione iniziale. Sfruttando questa caratteristica abbiamo

quindi la possibilita di generare test di vario genere.

Popolazione iniziale casuale: la popolazione iniziale sara generata e valu-

tata direttamente dal tool.

Popolazione iniziale precalcolata:

• un primo scenario prevede come input il passaggio di traiettorie

casuali ma vicine a traiettorie di riferimento, ad esempio racing line

tutte sul bordo esterno, interno o al centro della pista.

• un secondo scenario invece prevede come input le miglior N

traiettorie di un run precedente del tool.

In entrambi i casi si puo scegliere se far valutare gli elementi della po-

polazione iniziale al tool oppure, in caso si sia in possesso delle relative

fitness, inserirne il valore nel file contenente la popolazione iniziale 1.

4.4 Valutazione della bonta della Racing Line,

il calcolo della fitness

La valutazione di quanto una racing line possa essere performante e fonda-

mentale all’interno del processo evolutivo, influenzandone il risultato finale.

La qualita di una racing line viene stimata attraverso il valore di un attributo

chiamato fitness. Maggiore sara il valore della fitness, migliore sara la perfor-

mance su quella particolare racing line. Preso in analisi il genoma interessato

questo viene decodificato, in modo da essere trasformato in una traiettoria.

La decodifica viene effettuata utilizzando gli indici relativi ai punti del bordo

che identificano la retta sul quale possono muoversi i punti di controllo,

1Per la configurazione del tool rimandiamo all’appendice A.

30

Page 41: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

4.4 Valutazione della bonta della Racing Line, il calcolo della fitness

precedentemente calcolati. In questo lavoro la valutazione della fitness si basa

sull’utilizza di un BOT, ossia un’automobile dotata di una propria intelligenza

artificiale in grado di seguire una racing line datagli in input, e nello specifico il

follower Simplix [3] opportunamente modificato. In particolare questo follower

ci permette di seguire due strade per la valutazione della funzione obiettivo. La

prima consiste nel valutare il lap time effettivo che il follower impiega per com-

piere un giro di pista. Per far cio lanciamo TORCS simulando una breve gara

sul tracciato in analisi seguendo la traiettoria da valutare e registrando il tempo

ottenuto al secondo giro. Prendendo il tempo risultante e negandolo, otteniamo

la fitness cercata. Maggiore sara quest’ultima, migliore sara la traiettoria cor-

rispondente. Un’altra possibilita consiste nel semplificare il tutto utilizzando

come tempo di giro una stima generata automaticamente da Simplix, dato che

al suo interno ha una funzione che calcola a priori, data la racing line da seguire,

una stima del tempo di percorrenza di un giro. Questo secondo approccio ha un

impatto notevole sui tempi di calcolo dato che permette di interrompere l’esecu-

zione di una run di TORCS prima della simulazione di una gara vera e propria,

che rappresenta il bottleneck dell’intera procedura. Naturalmente i valori otte-

nuti saranno delle stime del valore reale e quindi non saranno precise. Di segui-

to in figura 4.2 riportiamo lo schema di come il GAtollbox esegue una chiamata

di TORCS per ricavare funzione obiettivo relativa a un genoma in analisi.

Figura 4.2: Diagramma rappresentante il calcolo della funzione di fitness

31

Page 42: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Ottimizzazione della traiettoria

4.4.1 Crossover delle traiettorie

Il nostro problema soddisfa la “Building Block Hypotesis” (BBH) [16], infatti

noi cerchiamo di trovare una racing line ottima combinando fra loro buone

sezioni di traiettorie nel complesso non ottime, senza mischiare quindi tutte

le possibili combinazioni, riducendo cosı la complessita del problema. Nelle

figure successive e possibile vedere due traiettorie prima (fig.4.3) e dopo il

crossover (fig.4.4(a) e fig.4.5(a)). Possiamo notare come nonostante si siano

prese due traiettorie completamente differenti, una volta effettuato il crossover,

le caratteristiche di continuita e permanenza all’interno del tracciato vengano

mantenute.

Figura 4.3: Due generiche traiettorie

32

Page 43: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

4.4 Valutazione della bonta della Racing Line, il calcolo della fitness

(a) Primo figlio generato mischiando le traiettorie della fig. 4.3

(b) Punto di interesse: inizio pista (c) Punto di interesse: punto di taglio

Figura 4.4: Primo risultato Crossover

(a) Secondo figlio generato mischiando le traiettorie della fig. 4.3

(b) Punto di interesse: inizio pista (c) Punto di interesse: punto di taglio

Figura 4.5: Secondo risultato Crossover

33

Page 44: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.
Page 45: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Capitolo 5

Analisi sperimentale

In questo capitolo illustreremo tutte le analisi effettuate per valutare l’efficacia

e il funzionamanto della nostra rappresentazione. In particolare prenderemo in

analisi alcuni tracciati gia utilizzati in lavori precedenti [24] in modo da avere

dei termini di paragone. Studieremo il nostro modello con diverse variabili

quali la presenza o meno di una popolazione iniziale e l’utilizzo di due diverse

tipologie di funzione obiettivo, simulata o stimata. Come prima analisi ab-

biamo verificato l’efficienza della nostra rappresentazione, in modo da essere

sicuri che i risultati pratici rispecchino gli studi teorici. In seguito illustreremo

le scelte preliminari adottate in sede di analisi, ossia quali tracciati all’interno

dei possibili circuiti forniti da TORCS verranno utilizzati per gli esperimenti

e quali saranno i valori dei parametri utilizzati per la definizione dei punti

di controllo. Inoltre verrano identificati i parametri chiave per l’evoluzione

dell’algoritmo genetico. A questo punto analizzeremo la nostra rappresenta-

zione tramite due diverse funzioni obiettivo, la prima simulando una breve

gara mentre la seconda stimando un tempo plausibile di percorrenza della

traiettoria.

Page 46: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

5.1 Validazione della rappresentazione del

tracciato

La prima analisi da effettuare riguarda l’efficacia della rappresentazione nel

raffigurare delle traiettorie. Per verificarne la validita abbiamo cercato di rea-

lizzare delle semplici curve casuali all’interno del tracciato, tentando di copiare

delle buone traiettorie gia esistenti (fig 5.1) e calcolando le traiettorie a mini-

ma distanza (SP) e minima curvatura (MCP). A tal scopo abbiamo utilizzato

degli script in Matlab e la funzione fminsearch presente nel tool come funzione

ottimizzatrice. In particolare abbiamo creato una funzione di costo usata dal

metodo fminsearch per stimare la bonta della soluzione (algoritmo 3).

Algorithm 3 Funzione di costo per la copiatura di una traiettoria gia esistente.

1: for (Sezione) do

2: Trova la sezione corrispondete di Simplix ;

3: Calcola Bezier;

4: for (Punti della curva di Bezier nella sezione) do

5: Trovo il punto piu vicino di Simplix ;

6: Calcola la distanza;

7: end for

8: end for

I risultati ottenuti possono essere considerati validi, infatti siamo riusci-

ti a dimostrare che una racing line gia esistente puo essere ottenuta con la

nostra rappresentazione, con un errore poco significativo, come si puo notare

graficamente in figura 5.1.

36

Page 47: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.2 Scelte sperimentali

Figura 5.1: Esempio di copia di una traiettoria. In rosso e rappresentata la racing

line di Simplix, in verde la nostra “copiata”

5.2 Scelte sperimentali

Prima di iniziare la fase di analisi vera e propria, e necessario stabilire alcuni

punti cardine fondamentali per l’evoluzione del lavoro. Vanno infatti definiti

quali circuiti verranno presi in considerazione durante i test, quali siano i valori

ottimali per i parametri che definiscono le caratteristiche dei punti di controllo

relativi alle curve di Bezier (SC, FC e MS), la dimensione della popolazione e

il numero di generazioni dell’algoritmo genetico.

5.2.1 Tracciati analizzati

TORCS possiede al suo interno una vasta gamma di circuiti, quindi per validare

il nostro studio abbiamo deciso di analizzare una serie di tracciati con caratte-

ristiche diverse fra loro. L’analisi di partenza e stata effettuata su A-Speedway,

un tracciato semplice e veloce, il quale non richiede particolari traiettorie dato

37

Page 48: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

che non contiene chicane e curve a gomito. Questo ci ha permesso di identifi-

care inizialmente dei valori validi per i parametri di interesse da cui partire. In

tabella 5.1 vengono mostrate le caratteristiche principali1 e la conformazione

delle piste da noi utilizzate.

A-speedway Length: 1908.32 m Alpine-2 Length: 3775.57 m

Width: 25 m Width: 10 m

Lap Time: 27.558 s Lap Time: 94.334 s

Track Points: 19087 Track Points: 37723

CG-speedway Length: 2057.56 m Ruudskogen Length: 3274.20 m

Width: 15 m Width: 11

Lap Time: 40.120 s Lap Time: 69.208s

Track Points: 20580 Track Points: 32734

Wheel-1 Length: 4257.62 m

Width: 16 m

Lap Time: 73.924 s

Track Points: 42559

Tabella 5.1: Tracciati utilizzati nella nostra analisi

5.2.2 Scelta dei parametri della rappresentazione

Per effettuare i vari test abbiamo innanzi tutto identificato i valori dei parame-

tri SC, FC e MS, gia illustrati nella sezione 3.2.3, da utilizzare per la selezione

dei punti di controllo. Di seguito riportiamo una tabella contenente il numero

di punti di controllo al variare di questi parametri.

1Il lap time indicato e ottenuto tramite il BOT Simplix

38

Page 49: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.2 Scelte sperimentali

Tracciato SC FC MS N

A-speedway

0.025 25 375 115

0.025 50 750 58

0.05 25 375 75

0.05 50 750 38

0.075 25 375 62

0.075 50 750 31

Alpine-2

0.025 25 375 365

0.025 50 750 177

0.05 25 375 234

0.05 50 750 113

0.075 25 375 181

0.075 50 750 86

CG-Speedway

0.025 25 375 175

0.025 50 750 86

0.05 25 375 100

0.05 50 750 49

0.075 25 375 76

0.075 50 750 37

Ruudskogen

0.025 25 375 258

0.025 50 750 127

0.05 25 375 159

0.05 50 750 79

0.075 25 375 126

0.075 50 750 62

Wheel-1

0.025 25 375 380

0.025 50 750 186

0.05 25 375 237

0.05 50 750 115

0.075 25 375 182

0.075 50 750 88

Tabella 5.2: Variazione del numero di punti di controllo al variare dei parametri

39

Page 50: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

Al fine di ottenere una rappresentazione valida, che ci permetta di trovare

una traiettoria efficace in tutte le situazioni, abbiamo deciso come analisi inizia-

le di sovrastimare il numero di punti di controllo, cercando una configurazione

adatta a tutte le conformazioni di tracciati analizzati. Questo ci garantisce

un piu vasto campo di rappresentazione delle traiettorie; infatti, maggiore e il

numero di punti di controllo piu ampia sara la famiglia di curve generabile da

quel numero di punti di controllo. Per coerenza tra le varie analisi abbiamo

mantenuto gli stessi parametri per tutte le piste. In tabella 5.2 sono evidenziati

i parametri scelti per il nostro studio. L’utilizzo di un alto numero di variabili

garantisce una potenza rappresentativa maggiore ma cio viene pagato da un

costo computazionale elevato.

5.2.3 Scelta dei parametri dell’algoritmo genetico

Prima di iniziare a valutare le racing line abbiamo dovuto configurare i due

parametri fondamentali dell’algoritmo genetico:

• Dimensione della popolazione.

• Numero massimo di generazioni.

Per quando riguarda le dimensioni della popolazione abbiamo tenuto in

considerazione il numero di punti di controllo necessari per la rappresentazio-

ne dei tracciati illustrati nella tabella 5.1. Guardando invece la tabella 5.2

possiamo notare che i punti di controllo sono compresi in un intervallo che va

da un minimo di 75 punti necessari per A-speedway a un massimo di 237 per

rapprestare Wheel-1. Quindi si e deciso di utilizzare una popolazione uguale

per tutti i test, di dimensione maggiore al numero di punti di controllo. A tal

proposito nei nostri esperimenti utilizzeremo sempre un popolazione composta

da 300 elementi.

Il valore del numero massimo di generazioni e stato fissato a 300. Questo

valore e stato scelto empiricamantene dopo un’analisi sperimentale volta ad

individuarne il dimensionamento piu appropriato. Dopo aver condotto 5 run

per ogni tracciato con inizializzazione della popolazione casuale si e notato che

40

Page 51: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.3 Risultati sperimentali con fitness function simulata

intorno alla generazione 300 si ha un’appiattimento dell’andamento, il quale,

da quel punto in poi non portera vantaggi significativi alla soluzione finale.

5.3 Risultati sperimentali con fitness function

simulata

Il primo obiettivo dell’analisi e generare una traiettoria in grado di essere se-

guita dal follower con il minor lap time possibile. Per valutare il lap time, viene

lanciata una breve simulazione di gara in TORCS lunga tre giri, considerando

il tempo ottenuto durante il secondo giro. La gara simulata e impostata con

benzina infinita e follower che non subisce danni. Questo in alcune situazioni

puo portare a risultati non ottimali, ma semplifica decisamente il processo nella

maggior parte dei casi, e quindi per coerenza e stato mantenuto in ogni analisi.

Oltre a scegliere quale tempo utilizzare per l’analisi e necessario stabilire un

follower univoco per tutti i test in modo da mantenere coerenza rappresenta-

tiva. TORCS fornisce un numero elevato di follower tra cui scegliere. Il BOT

da noi utilizzato e una versione leggermente modificata di Simplix [3], che e in

grado di seguire una traiettoria datagli in input.

La funzione di fitness dunque sara proprio il tempo necessario al BOT

per compiere un giro lanciato. Nelle nostre analisi utilizzaremo due diversi

approcci:

• Senza seeding iniziale

• Con seeding iniziale

dove con seeding si intende la presenza di una popolazione iniziale fornita

in input all’algoritmo.

41

Page 52: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

5.3.1 Evoluzione senza seeding

Per questa tipologia di esperimento abbiamo effettuato cinque run per ogni

tracciato, con dimensione della popolazione e numero di generazioni in accordo

a quanto analizzato nel paragrafo 5.2.3. Il GAtoolbox generera automatica-

mente la popolazione iniziale casuale rispettando i bound indicati nel file di

configurazione. Di seguito riportiamo i risultati ottenuti in questi primi test.

I tempi riportati fanno riferimento al miglior tempo di ogni run.

Tracciato Min Max Media SIMPLIX Lap Time

A-speedway 24.71 s 24.82 s 24.756 s 27.558 s

Alpine-2 94.06 s 94.32 s 94.15 s 94.334 s

CG-speedway 39.34 s 39.72 s 39.55 s 40.120 s

Ruudskogen 62.77 s 63.01 s 62.836 s 63.206 s

Wheel-1 77.71 s 77.86 s 78.01 s 73.924 s

Tabella 5.3: Tabella riassuntiva dei tempi ottenuti su 5 run, senza seeding

0 50 100 150 200 250 30024

25

26

27

28

29

30

31

32

33

34

Generazioni

Max

fitn

ess

func

tion

Run 1Run 2Run 3Run 4Run 5Media

Figura 5.2: Ottimizzazione di racing line su A-speedway senza seeding, con fitness

function simulata. La curva riporta l’andamento di 5 run evolutive

42

Page 53: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.3 Risultati sperimentali con fitness function simulata

0 50 100 150 200 250 30094

96

98

100

102

104

106

Generazioni

Max

fitn

ess

func

tion

Run 1Run 2Run 3Run 4Run 5Media

Figura 5.3: Ottimizzazione di racing line su Alpine-2 senza seeding, con fitness

function simulata. La curva riporta l’andamento di 5 run evolutive

0 50 100 150 200 250 30039

40

41

42

43

44

45

46

Generazioni

Max

fitn

ess

func

tion

Run 1Run 2Run 3Run 4Run 5Media

Figura 5.4: Ottimizzazione di racing line su CG-speedway senza seeding, con fitness

function simulata. La curva riporta l’andamento di 5 run evolutive

43

Page 54: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

0 50 100 150 200 250 30062

64

66

68

70

72

74

Generazioni

Max

fitn

ess

func

tion

Run 1Run 2Run 3Run 4Run5Media

Figura 5.5: Ottimizzazione di racing line su Ruudskogen senza seeding, con fitness

function simulata. La curva riporta l’andamento di 5 run evolutive

0 50 100 150 200 250 30076

78

80

82

84

86

88

90

92

94

96

Generazioni

Max

fitn

ess

func

tion

Run 1Run 2Run 3Run 4Run 5Media

Figura 5.6: Ottimizzazione di racing line su Wheel-1 senza seeding, con fitness

function simulata. La curva riporta l’andamento di 5 run evolutive

44

Page 55: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.3 Risultati sperimentali con fitness function simulata

La tabella 5.3 mostra come i risultati ottenuti siano tendenzialmente molto

buoni, infatti in quasi tutti i tracciati riusciamo a migliorare il tempo base

relizzato dal BOT Simplix. Dai grafici (da fig. 5.2 a 5.5) si puo notare come

l’andamento sia regolare, migliorando costantemente il risultato fino alla 200-

esima generazione, per poi raffinarlo nelle ultime 100.

(a) Alpine-2 (b) Cg-Speedway

(c) Ruudskogen (d) Wheel-1

Figura 5.7: Traiettorie a confronto su particolari di pista. In rosso e rappre-

sentanta la racing line di Simplix, mentre in verde quella trovata con la nostra

rappresentazione

Nella figura 5.7 e possibile visualizzare le differenze tra la traiettoria di

riferimento di Simplix e quella in analisi. Si puo notare come ad esempio in A-

speedway, nonostante la racing line di riferimento sia piu morbida, riusciamo

ad ottenere un risultato migliore. Questo ci permette di ritenere possibili

ulteriori raffinamenti e miglioramenti.

Alcuni risultati, data la caratteristica di non potersi danneggiare del follo-

wer, permettono di compiere traiettorie che urtano i guardrail, in caso questi

siano presenti, senza influenzare negativamente il risultato finale, impedendo

quindi di ottimizzare al meglio. Cio porta ad esempio ai risultati di Alpine,

che sono vicini, ma non molto inferiori, a quelli di Simplix.

45

Page 56: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

Abbiamo inoltre effettuato un’analisi statistica dei dati ottenuti in tabella

5.3 utilizzando il test non parametrico Wilcoxon signed rank [15]. La nostra

analisi mostra come le differenze fra i risultati ottenuti con il nostro approccio

e i risultati ottenuti dal BOT Simplix sono statisticamente significative con

una confidenza del 90% ad eccezione dei risultati ottenti sulla pista Alpine-2.

In definitiva, quanto ottenuto puo essere ritenuto valido, e si potrebbero

ottenere dei risultati ancora migliori personalizzando i parametri relativi ai

punti di controllo per ogni pista, ma quest’analisi esula dagli obiettivi di questa

tesi.

Nelle figure dalla 5.8 alla 5.11 si possono vedere le evoluzioni delle traiettorie

durante un singolo run. Per chiarezza si e deciso di visualizzare dieci traiettorie

rappresentative, prese ad intervalli di miglioramento piu uniforme possibile.

Si puo notare come nei punti dove la differenza tra le traiettorie e parti-

colarmente significativa si ha l’intersezione tra sezioni diverse (nella legenda

sono indicati i tempi impiegati, in secondi, per compiere un giro utilizzando la

traiettoria di riferimento).

Aspeedway 25

Aspeedway 27

Aspeedway 29

Aspeedway 31

Aspeedway 33

Aspeedway 35

Aspeedway 37

Aspeedway 39

Aspeedway 41

Aspeedway 43

Figura 5.8: Evoluzione delle traiettorie. Particolare di A-speedway

46

Page 57: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.3 Risultati sperimentali con fitness function simulata

alpine−2 110

alpine−2 108

alpine−2 106

alpine−2 104

alpine−2 102

alpine−2 100

alpine−2 98

alpine−2 96

alpine−2 94

alpine−2 92

Figura 5.9: Evoluzione delle traiettorie. Particolare di Alpine-2

CG−speedway 224

CG−speedway 84

CG−speedway 78

CG−speedway 72

CG−speedway 67

CG−speedway 62

CG−speedway 57

CG−speedway 52

CG−speedway 47

CG−speedway 42

CG−speedway 39

Figura 5.10: Evoluzione delle traiettorie. Particolare di CG-speedway

47

Page 58: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

ruudskogen 128

ruudskogen 111

ruudskogen 101

ruudskogen 99

ruudskogen 93

ruudskogen 87

ruudskogen 81

ruudskogen 75

ruudskogen 69

ruudskogen 63

Figura 5.11: Evoluzione delle traiettorie. Particolare di Ruudskogen

E interessante osservare l’andamento dei valori dei punti di controllo du-

rante l’evoluzione della traiettoria. In figura 5.12 e possibile visualizzare la

media dei valori ottenuti per generazione di 10 punti di controllo, filtrati con

una moving average. Si puo notare, anche visualizzando un campione ristretto

di punti, che alcuni tendono ad assestarsi prima di altri durante l’evoluzione.

0 50 100 150 200 250 3000.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Generazioni

Val

ore

Figura 5.12: Andamento di 10 punti di controllo durante l’evoluzoine

48

Page 59: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.3 Risultati sperimentali con fitness function simulata

0 50 100 150 200 250 3000

0.05

0.1

0.15

0.2

0.25

0.3

Generazioni

Dev

iazi

one

stan

dard

(a) Punto di controllo A

0 50 100 150 200 250 3000

0.05

0.1

0.15

0.2

0.25

0.3

Generazioni

Dev

iazi

one

stan

dard

(b) Punto di controllo B

0 50 100 150 200 250 3000

0.05

0.1

0.15

0.2

0.25

0.3

Dev

iazi

one

stan

dard

Generazioni

(c) Punto di controllo C

0 50 100 150 200 250 3000

0.05

0.1

0.15

0.2

0.25

0.3

GenerazioniD

evia

zion

e st

anda

rd

(d) Punto di controllo D

A

B

C

D

(e) Tracciato: A-speedway

Figura 5.13: Posizione di 4 punti di controllo all’interno del tracciato e relative

deviazioni standard

Purtroppo non e possibile creare un collegamento tra tempo di assesta-

mento durante l’evoluzione, e posizione del punto nella pista all’interno della

sezione (inizio/fine sezione, interni, etc.). Dall’analisi effettuata comunque si

evince che alcuni punti di controllo posizonati in zone cruciali della traiettoria

(es. ingresso/uscita curva), siano i primi a stabilizzarsi e a mantenere una

49

Page 60: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

variazione bassa durante l’evoluzione, questo perche ogni modifica apportata

a questi punti incide in maniera significativa sul tempo di giro. Per mostrare

cio, di seguito riportiamo l’andamento della deviazione standard per 4 punti

di controllo durante l’ottimizzazione e dove questi si collocano all’interno del

tracciato (fig. 5.13). I punti A e C, appartenenti ad un rettilineo e quindi

non fondamentali per la traiettoria variano molto di piu durante l’evoluzione

rispetto a B e D che si trovano in un punto delicato, quale la curva, all’interno

della racing line.

5.3.2 Evoluzione con seeding

Una volta ottenuti dei risultati, ci siamo domandati se quest’ultimi possano

essere migliorati tramite un’ulteriore run dell’algoritmo, questa volta pero con

una popololazione iniziale predefinita.

L’esperimento si svolge quindi in ulteriori due run, in cui entrambi avran-

no in input i migliori N genomi, dove N e la dimensione della popolazione,

ottenuti dalla run precedente. La dimensione della popolazione e il numero

massimo di generazioni rimane invariato durante l’intero esperimento.

La tabella 5.4 mostra i risultati ottenuti in questa tipologia di test, mentre

i grafici dalla fig. 5.14 alla 5.18 mostrano l’andamento delle 3 run per circuito.

Tracciato Run 1 Run 2 Run 3 SIMPLIX Time

A-speedway 24.8 s 24.66 s 24.62 s 27.558 s

Alpine-2 94.09 s 93.98 s 93.97 s 94.334 s

CG-speedway 39.72 s 39.44 s 39.18 s 40.120 s

Ruudskogen 62.78 s 62.46 s 62.45 s 63.206 s

Wheel-1 78.11 s 77.36 s 77.05 s 73.924 s

Tabella 5.4: Tabella riassuntiva contenente i migliori tempi ottenuti in 3 run,

utilizzando il seeding

50

Page 61: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.3 Risultati sperimentali con fitness function simulata

0 50 100 150 200 250 30024

25

26

27

28

29

30

31

32

33

34

Generazione

Min

fitn

ess

func

tion

Run 1Run 2Run 3

Min: 24.62

Min: 24.8

Min: 24.66

Tempo mediorun: 13h03’

Figura 5.14: Ottimizzazione di racing line su A-speedway con seeding, con fitness

function simulata. La curva riporta l’andamento di 3 run evolutive

0 50 100 150 200 250 30092

94

96

98

100

102

104

Generazione

Max

fitn

ess

func

tion

Run 1Run 2Run 3

Tempo mediorun: 1G14h10’

Min: 93.98

Min: 94.09

Min: 93.97

Figura 5.15: Ottimizzazione di racing line su Alpine-2 con seeding, con fitness

function simulata. La curva riporta l’andamento di 3 run evolutive

51

Page 62: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

0 50 100 150 200 250 30039

40

41

42

43

44

45

46

Generazione

Min

fitn

ess

func

tion

Run 1Run 2Run 3

Tempo mediorun: 17h41’

Min: 39.72Min: 39.44

Min: 39.18

Figura 5.16: Ottimizzazione di racing line su CG-speedway con seeding, con fitness

function simulata. La curva riporta l’andamento di 3 run evolutive

0 50 100 150 200 250 30062

64

66

68

70

72

74

Generazione

Min

fitn

ess

func

tion

Run 1Run 2Run 3

Min: 62.78

Min: 62.46

Tempo mediorun: 27h35’

Min: 62.45

Figura 5.17: Ottimizzazione di racing line su Ruudskogen con seeding, con fitness

function simulata. La curva riporta l’andamento di 3 run evolutive

52

Page 63: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.3 Risultati sperimentali con fitness function simulata

0 50 100 150 200 250 30076

78

80

82

84

86

88

90

92

94

Generazione

Max

fite

nss

func

tion

Run 1Run 2Run3

Min: 78.11

Min: 77.36

Tempo Mediorun: 33h46’

Min: 77.05

Figura 5.18: Ottimizzazione di racing line su Wheel-1 con seeding, con fitness

function simulata. La curva riporta l’andamento di 3 run evolutive

In questa analisi e stato eseguito un solo esperimento per ogni pista per

motivi di costo computazionale. Sebbene i risultati siano quindi preliminari,

essi suggeriscono che sia possibile ottenere un miglioramento rispetto ai valori

della prima run. Questo e confutato dal fatto che lo stesso comportamento

si verifica per tutti i cinque tracciati in analisi. Si puo pero notare come il

secondo e il terzo run, ossia quelli interessati dal seeding, non siano altro che

dei tentativi di raffinamento locale. Infatti, osservando che il risultato della

prima run e gia di per se molto buono, il tool con le altre due run ottiene si

dei risultati migliori, ma senza allontanarsi significativamente da un intorno

del tempo ottenuto precedentemente.

53

Page 64: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

5.4 Risultati sperimentali con fitness function

stimata

Gli esperimenti realizzati fino ad ora richiedono una vera simulazione di gara

da parte di TORCS. Questo e computazionalmente pesante poiche impiega pa-

recchio tempo e risorse per simulare una gara, ed e influenzato negativamente

dalla lunghezza e complessita del tracciato. Ci siamo quindi posti il problema

di trovare una funzione di fitness valida che richiedesse prestazioni decisamente

inferiori. Il BOT Simplix e in grado di stimare a priori il tempo che impie-

ghera a percorrere una determinata traiettoria in un tracciato. Questa stima

viene ottenuta tramite l’euristica K1999 [11] per l’ottimizzazione di racing line.

Questa euristica si basa esclusivamente sui parametri fisici della macchina e

sulla minima curvatura ottenibile nel circuito in analisi, ricavando il tempo

di giro propagando indietro la massima velocita che consenta di non uscire

in ogni punto dal tracciato in base alle capacita di frenata del mezzo, ed in

seguito propagando in avanti le massime velocita raggiungibili tenendo conto

delle capacita di accelerazione del BOT. Vogliamo a questo punto valutare

quanto questo approccio sia affidabile, e che guadagno sotto il punto di vista

computazionale otteniamo.

5.4.1 Studio delle inversioni

Come primo passo, bisogna valutare l’affidabilita della stima. Per far cio,

prendiamo le prime 100 generazioni dell’algoritmo applicate ai 5 tracciati da

noi analizzati. Prese due coppie di tempi (simulato e stimato da Simplix ),

valutiamo se vi sono delle inversioni tra le due, ossia se, in caso il primo tempo

simulato sia inferiore al secondo, la stima di Simplix invece e superiore alla

stima della seconda coppia (fig 5.19).

54

Page 65: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.4 Risultati sperimentali con fitness function stimata

Figura 5.19: Schema per l’identificazione di un’inversione.

Come si puo vedere dal grafico (fig. 5.20), su un totale di circa 90000

coppie per generazione, vi e un 4% circa di inversioni per circuito. Questo

ci porta a dire che la stima fatta da Simplix e abbastanza affidabile, infatti

questi dati ci dicono che ordinando i valori stimati siamo certi al 96% che lo

stesso ordinamento sia corretto anche nei corrispettivi dati simulati, rendendo

cosı valida la selezione dei genomi, ma purtroppo non possiamo essere ancora

certi che l’algoritmo genetico, alla fine dell’evoluzione, ci fornisca un risultato

ottimo.

55

Page 66: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

0 10 20 30 40 50 60 70 80 90 1000 %

1 %

2 %

3 %

4 %

5 %

6 %

7 %

8 %

9 %

Generazioni

Per

cent

uale

num

ero

inve

rsio

ni

A−speedwayCG−speedwayRuudskogenAlpine−2Wheel−1

Figura 5.20: Percentuale di inversioni per generazione

Per avere un riscontro valido alle nostre supposizioni e necessario che non

ci sia un grosso scarto tra tempo simulato e tempo stimato, o per lo meno che

questo sia costante.

Come si puo vedere dai grafici (fig. 5.21), il delta assoluto tra la funzione

stimata e quella simulata si assesta, dopo una prima fase rumorosa, all’incirca

per ogni tracciato.

Dato che in questo approccio ottimizziamo la funzione stimata, se anche il

corrispettivo tempo reale della miglior stima non e il miglior tempo in assoluto

tra quelli generati, siamo sicuri di esserci abbastanza avvicinati.

56

Page 67: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.4 Risultati sperimentali con fitness function stimata

0 0.5 1 1.5 2 2.5 3

x 104

0

0.2

0.4

0.6

0.8

1

1.2

1.4

Numero valutazione

Del

ta a

ssol

uto

(a) A-Speedway

0 0.5 1 1.5 2 2.5 3

x 104

0

1

2

3

4

5

6

7

8

Numero valutazione

Del

ta a

ssol

uto

(b) Alpine-2

0 0.5 1 1.5 2 2.5 3

x 104

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

Numero valutazione

Del

ta a

ssol

uto

(c) Cg-Speedway

0 0.5 1 1.5 2 2.5 3

x 104

0

1

2

3

4

5

6

7

Numero valutazione

Del

ta a

ssol

uto

(d) Ruudskogen

0 0.5 1 1.5 2 2.5 3

x 104

0

5

10

15

20

25

30

Numero valutazione

Del

ta a

ssol

uto

(e) Wheel-1

Figura 5.21: Delta assoluto tra tempo stimato e tempo simulato su 100 generazioni

5.4.2 Evoluzione con fitness stimata

I test sono stati eseguiti con le stesse modalita utilizzate per la funzione

obiettivo simulata.

Come si puo notare dai grafici seguenti (da fig. 5.22 a fig. 5.26), si ottiene

lo stesso andamento regolare osservato con l’utilizzo della fitness simulata, ed

in alcuni casi raggiunge risultati che sembrano nettamente migliori.

57

Page 68: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

0 50 100 150 200 250 30022

24

26

28

30

32

34

36

Generazioni

Max

fitn

ess

func

tion

Run 1Run 2Run 3Run 4Run 5Media

Figura 5.22: Ottimizzazione di racing line su A-speedway senza seeding, con fitness

function stimata. La curva riporta l’andamento di 5 run evolutive

0 50 100 150 200 250 30096

98

100

102

104

106

108

110

Generazioni

Max

fitn

ess

func

tion

Run 1Run 2Run 3Run 4Run 5Media

Figura 5.23: Ottimizzazione di racing line su Alpine-2 senza seeding, con fitness

function stimata. La curva riporta l’andamento di 5 run evolutive

58

Page 69: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.4 Risultati sperimentali con fitness function stimata

0 50 100 150 200 250 30038

39

40

41

42

43

44

45

46

47

48

Generazioni

Max

fitn

ess

func

tion

Run 1Run 2Run 3Run 4Run 5Media

Figura 5.24: Ottimizzazione di racing line su CG-speedway senza seeding, con

fitness function stimata. La curva riporta l’andamento di 5 run evolutive

0 50 100 150 200 250 30064

66

68

70

72

74

76

78

Generazioni

Max

fitn

ess

func

tion

Run 1Run 2Run 3Run 4Run 5Media

Figura 5.25: Ottimizzazione di racing line su Ruudskogen senza seeding, con fitness

function stimata. La curva riporta l’andamento di 5 run evolutive

59

Page 70: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

0 50 100 150 200 250 30075

80

85

90

95

100

Generazioni

Max

fitn

ess

func

tion

Run 1Run 2Run 3Run 4Run 5Media

Figura 5.26: Ottimizzazione di racing line su Wheel-1 senza seeding, con fitness

function stimata. La curva riporta l’andamento di 5 run evolutive

Nella tabella 5.5 possiamo visualizzare i risultati ottenuti. A parte Wheel,

che presenta alcune criticita legate alla rappresentazione, la differenza tra i due

tempi e quasi costante in ogni run.

60

Page 71: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.4 Risultati sperimentali con fitness function stimata

Tracciato Run Tempo Stimato s Tempo Reale s |∆|

A-speedway

1 24.333600 25.070000 0.7364

2 23.802800 24.863999 1.061199

3 24.328300 25.232000 0.9037

4 24.444000 25.230000 0.786

5 24.090800 24.980000 0.8892

Alpine-2

1 96.383800 97.566002 1.182202

2 96.308300 97.365998 1.057698

3 96.610600 97.677998 1.067398

4 96.261100 96.873998 0.612898

5 96.354200 96.699999 0.345799

CG-Speedway

1 39.177600 40.932000 1.7544

2 39.175600 41.304002 2.128402

3 39.048800 39.951999 0.903199

4 38.741300 40.388001 1.646701

5 39.227200 41.714001 2.486801

Ruudskogen

1 64.999400 64.245999 0.753401

2 65.228700 64.120002 1.108698

3 64.937100 63.793997 1.143103

4 65.281200 63.795996 1.485204

5 65.161700 65.353997 0.192297

Wheel-1

1 77.267900 112.922001 35.654101

2 77.694900 80.907996 3.213096

3 77.518000 80.295999 2.777999

4 77.193700 114.651998 37.458298

5 77.316600 79.988000 2.6714

Tabella 5.5: Confronto tra tempi di lap stimati ed effettivi

61

Page 72: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Analisi sperimentale

Tutto cio comunque sarebbe inutile se i tempi computazionali non presen-

tassero miglioramenti. Come si puo notare nella tabella 5.6 successiva, pero,

le nostre aspettative sono state confermate, ed i tempi di calcolo si riducono

drasticamente di circa un fattore 6.

Tracciato Fitness simulata Fitness stimata

A-Speedway 13h 03’ 3h 24’

Alpine-2 1G 14h 10’ 5h 02’

Cg-Speedway 17h 41’ 3h 42’

Ruudskogen 1G 3h 17’ 4h 48’

Wheel-1 1G 9h 46’ 5h 20’

Tabella 5.6: Differenza tra i tempi computazionali medi di ogni run nelle due

tipologie di fitness.

Simulato Simulato Stimato Stimato

Tracciato Min Media Min Media SIMPLIX

A-speedway 24.71 s 24.756 s 24.863999 s 25.0751998 s 27.558 s

Alpine-2 94.06 s 94.32 s 96.699999 s 97.236799 s 94.334 s

CG-speedway 39.34 s 39.55 s 39.951999 s 40.8580026 s 40.120 s

Ruudskogen 62.77 s 62.836 s 64.120002 s 64.2619982 s 63.206 s

Wheel-1 77.71 s 77.86 s 79.988000 s 93.7531988 s 73.924 s

Tabella 5.7: Tabella di confronto tra i tempi ottenuti tra le due tipologie di analisi

(funzione obiettivo simulata e stimata)

Il bottleneck di tutto l’algoritmo era quindi la simulazione della gara. Co-

me mostrato in tabella 5.7 utilizzando la fitness stimata e possibile ottenere

risultati vicini a quelli simulati, ma con un costo decisamente inferiore. In-

fine, abbiamo effettuato un’analisi statistica dei dati ottenuti in tabella 5.7

utilizzando il test non parametrico Wilcoxon rank sum [15]. La nostra analisi

mostra come le differenze fra i risultati ottenuti utilizzando la fitness simulata

62

Page 73: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

5.4 Risultati sperimentali con fitness function stimata

e quelli ottenuti con la fitness stimata sono statisticamente significative con

una confidenza del 95% ad eccezione dei risultati ottenti sulla pista Alpine-2.

63

Page 74: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.
Page 75: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Capitolo 6

Conclusioni e sviluppi futuri

6.1 Risultati

In questa tesi abbiamo affrontato il problema di realizzare una rappresenta-

zione per la creazione di una racing line che non necessitasse di informazioni

preliminari, a parte le informazioni di base del tracciato da seguire e del BOT

che seguira la traiettoria.

Abbiamo quindi introdotto una nuova rappresentazione basata su curve

di Bezier. Per valutare la bonta di questa rappresentazione, abbiamo con-

dotto diversi tipi di analisi, tenendo come obiettivo i risultati ottenuti dal

BOT di riferimento nella comunita di TORCS, Simplix, e quelli ottenuti in

[24]. Abbiamo studiato le prestazioni della traiettoria evolvendola tramite un

algoritmo genetico, inizialmente senza una popolazione iniziale, ed in seguito,

con l’obiettivo di migliorare ancora, provando a inizializzarla. Come funzione

di fitness abbiamo utilizzato, come primo approccio, una simulazione di gara

di TORCS, in cui viene registrato il tempo del secondo su tre giri, per poi

passare ad una stima del tempo sul giro.

I risultati ottenuti mostrano che il nostro approccio puo essere considera-

to valido, dato che siamo riusciti ad avvicinarci ai tempi riportati in [24], e

migliorare quelli di Simplix.

Si e visto inoltre come, inizializzando l’algoritmo genetico con una popo-

Page 76: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Conclusioni e sviluppi futuri

Tracciato Simplix Cardamone et al. [24] Simulata Simulata Stimata

senza seeding con seeding

A-Speedway 27.558 24.701 24.71 24.62 24.864

Alpine-2 94.334 92.527 94.06 93.97 96.700

Cg-Speedway 40.120 39.372 39.34 39.18 39.952

Ruudskogen 63.206 62.732 62.77 62.45 63.796

Wheel-1 73.924 74.887 77.71 77.05 79.988

Tabella 6.1: Risultati a confronto (i tempi sono misurati in secondi)

lazione di traiettorie gia buone, non si ha un miglioramento sostanziale della

soluzione, ma bensı una ricerca locale, che raffina leggermente il risultato finale,

impiegando pero lo stesso tempo di calcolo di una normale evoluzione senza

seeding. E emerso infatti come il difetto maggiore di questo metodo sia il tempo

e la potenza di calcolo necessaria per l’evoluzione delle traiettorie. Per ovvia-

re a questo problema, l’utilizzo della stima del tempo sul giro direttamente

tramite il BOT Simplix permette di ridurre drasticamente i tempi di calcolo,

a scapito pero di soluzioni meno accurate. E comunque interessante notare

come l’andamento evolutivo di quest’ultima analisi risulti pressoche identico

all’andamento di una fitness function simulata. Le analisi da noi effettuate

sono state convalidate attraverso due test statistici non parametrici [15], che

hanno confermato che le differenze tra i risultati ottenuti con i nostri approcci

(i.e., fitness simulata e fitness stimata), i risultati ottenuti da Cardamone et al.

[24] e i risultati ottenuti dal BOT Simplix sono statisticamente significative

con una confidenza superiore al 90% (con l’eccezione di alcuni casi). Si puo

quindi concludere che il nostro approccio presenta dei notevoli vantaggi rispet-

to a quanto visto in altri studi, dato che non necessita di informazioni iniziali

particolari, ma paga questo vantaggio con un costo computazionale decisa-

mente elevato. L’utilizzo della stima potrebbe essere un buon compromesso,

permettendo di raggiungere buoni risultati in relativamente poco tempo.

66

Page 77: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

6.2 Sviluppi Futuri

6.2 Sviluppi Futuri

L’analisi fin qui effettuata si e basata principalmente su parametri standard per

ogni esperimento e per ogni circuito. Trovare dei valori personalizzati per ogni

circuito puo sicuramente migliorare i risultati e le performance dell’algoritmo.

Inoltre, la racing line ottenuta e profondamente correlata al BOT utilizzato

per la valutazione. E quindi possibile far partire un’analisi su come la rappre-

sentazione viene influenzata da diversi BOT, e quanto i risultati differiscano

in base alle caratteristiche dei BOT.

Un’ulteriore possibilita e quella di effettuare ulteriori studi per ottimizzare

il processo evolutivo, ossia scegliere la miglior combinazione tra dimensione

della popolazione e numero di generazioni, oppure provare differenti metodi di

crossover o mutazione, studiandone le differenze sui risultati.

Infine, supponendo di aver ridotto drasticamente i tempi di evoluzione, il

tutto potrebbe essere integrato in un tool di generazione automatica di trac-

ciati (interno ad un videogioco, o esistente di per se), generando la relativa

traiettoria migliore, dando cosı all’utente la possibilita di sfidare AI sulla pista

da lui generata.

67

Page 78: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.
Page 79: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Bibliografia

[1] The open racing car simulator website. http://torcs.sourceforge.net/.

[2] Robot auto racing simulator. http://rars.sourceforge.net/.

[3] Wolf-Dieter Beelitz. The simply mixed best practice torcs robot.

http://www.wdbee.gotdns.org:8086/SIMPLIX/SimplixDefault.aspx.

[4] F. Braghin, F. Cheli, S. Melzi, and E. Sabbioni. Race driver model.

Comput. Struct., 86(13-14):1503–1516, 2008.

[5] Martin V. Butz and Thies D. Lonneker. Optimized sensory-motor cou-

plings plus strategy extensions for the torcs car racing challenge. In Com-

putational Intelligence and Games, 2009. CIG 2009. IEEE Symposium

on, pages 317–324, Sept. 2009.

[6] Luigi Cardamone. On-line and off-line learning of driving tasks for the

open racing car simulator (torcs) using neuroevolution. Master’s thesis,

Politecnico di Milano, 2008.

[7] Luigi Cardamone, Daniele Loiacono, and Pier Luca Lanzi. Evolving

competitive car controllers for racing games with neuroevolution. In

GECCO ’09: Proceedings of the 11th Annual conference on Genetic and

evolutionary computation, pages 1179–1186, New York, NY, USA, 2009.

ACM.

[8] Luigi Cardamone, Daniele Loiacono, and Pier Luca Lanzi. Learning dri-

vers for torcs through imitation using supervised methods. In Compu-

Page 80: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

BIBLIOGRAFIA

tational Intelligence and Games, 2009. CIG 2009. IEEE Symposium on,

pages 148–155, Sept. 2009.

[9] Luigi Cardamone, Daniele Loiacono, and Pier Luca Lanzi. Applying coo-

perative coevolution to compete in the 2009 torcs endurance world cham-

pionship. In Evolutionary Computation (CEC), 2010 IEEE Congress on,

pages 1 –8, jul. 2010.

[10] T. A. de A Costa. Trajectory generation with curvature constraint based

on energy minimization. In ABCM Symposium Series in Mechatronics,

volume 3, pages 300–307, 2008.

[11] Remi Coulom. Reinforcement learning using neural networks, with appli-

cations to motor control. PhD thesis, Instituite National Polytechnique

de Grenoble, 2002.

[12] R.S. Sharp D. Casanova. On minimum time vehicle manoeuvring: the

theoretical optimal time. PhD thesis, Cranfield University, 2000.

[13] H. Delingette, Martial Hebert, and Katsushi Ikeuchi. Trajectory gene-

ration with curvature constraint based on energy minimization. In Pro-

ceedings 1991 IEEE/RSJ International Conference On Intelligent Robotic

Systems (IROS ’91), November 1991.

[14] Christos Dimitrackakis. Online statistical estimation for vehicle control.

IDIAP-RR 13, IDIAP, 2006.

[15] J. D. Gibbons. Nonparametric Statistical Inference. Marcel Dekker, 1985.

[16] David E. Goldberg. Genetic Algorithms in Search Optimization and

Machine Learning. 1989.

[17] Y. Kanayama and N. Miyake. Trajectory generation for mobile robots.

In In Proc. of the Int. Symp. on Robotics Research, 1985.

[18] Y. Kanayama, A. Nilipour, and C. Lelm. A locomotion control method

for autonomous vehicles. In ICRA, pages 1315–1317, 1988.

70

Page 81: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

BIBLIOGRAFIA

[19] Yutaka J. Kanayama and Bruce I. Hartman. Smooth local-path planning

for autonomous vehicles. Int. J. Rob. Res., 16(3):263–284, 1997.

[20] K. Komoriya and K. Tanie. Trajectory design and control of a wheel-

type mobile robot using b-spline curve. In Intelligent Robots and Systems

’89. The Autonomous Mobile Robots and Its Applications. IROS ’89. Pro-

ceedings., IEEE/RSJ International Workshop on, pages 398 –405, sep

1989.

[21] Stefano Lecchi. Artificial intelligence in racing games. In CIG’09: Procee-

dings of the 5th international conference on Computational Intelligence

and Games, 2009.

[22] D. Loiacono, P.L. Lanzi, J. Togelius, E. Onieva, D.A. Pelta, M.V. Bu-

tz, T.D. Lonneker, L. Cardamone, D. Perez, Y. Saez, M. Preuss, and

J. Quadflieg. The 2009 simulated car racing championship. Computatio-

nal Intelligence and AI in Games, IEEE Transactions on, 2(2):131 –147,

jun. 2010.

[23] Daniele Loiacono, Alessandro Prete, Pier Luca Lanzi, and Luigi Carda-

mone. Learning to overtake in torcs using simple reinforcement learning.

In Evolutionary Computation (CEC), 2010 IEEE Congress on, pages 1

–8, jul. 2010.

[24] Pier Luca Lanzi e Alessandro Pietro Bardelli Luigi Cardamone, Danie-

le Loiacono. Searching for the optimal racing line using genetic algorithms.

IEEE Conference on Computational Intelligence and Games, 2010.

[25] Mark Andrew Hatton e Ralf Herbrich Michael E. Tipping. Racing line

optimization, 2011.

[26] Jorge Munoz, German Gutierrez, and Araceli Sanchis. Controller for torcs

created by imitation. In Computational Intelligence and Games, 2009.

CIG 2009. IEEE Symposium on, pages 271–278, Sept. 2009.

71

Page 82: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

BIBLIOGRAFIA

[27] B. Nagy and A. Kelly. Trajectory generation for car-like robots using

cubic curvature polynomials. Field and Service Robots 2001, 2001.

[28] E. Onieva, D. A. Pelta, J. Alonso, V. Milanes, and J. Perez. A modular

parametric architecture for the torcs racing engine. In Computational

Intelligence and Games, 2009. CIG 2009. IEEE Symposium on, pages

256–262, Sept. 2009.

[29] Enrique Onieva, Luigi Cardamone, Daniele Loiacono, and Pier Luca Lan-

zi. Overtaking opponents with blocking strategies using fuzzy logic. In

Computational Intelligence and Games (CIG), 2010 IEEE Symposium on,

pages 123 –130, aug. 2010.

[30] F.G. Pin and H.A. Vaaseur. Autonomous trajectory generation for mobile

robots with non-holonomic and steering angle constraints. In Intelligent

Motion Control, 1990. Proceedings of the IEEE International Workshop

on, volume 1, pages 295 –299, aug 1990.

[31] J. Quadflieg, M. Preuss, O. Kramer, and G. Rudolph. Learning the track

and planning ahead in a car racing controller. In Computational Intelli-

gence and Games (CIG), 2010 IEEE Symposium on, pages 395 –402, aug.

2010.

[32] Alireza Sahraei, Mohammad Taghi Manzuri, Mohammad Reza Razvan,

Masoud Tajfard, and Saman Khoshbakht. Real-time trajectory generation

for mobile robots. In AI*IA ’07: Proceedings of the 10th Congress of

the Italian Association for Artificial Intelligence on AI*IA 2007, pages

459–470, Berlin, Heidelberg, 2007. Springer-Verlag.

[33] Kumara Sastry. Single and multiobjective genetic algorithm toolbox in

c++. 2007.

[34] J. Togelius and S.M. Lucas. Evolving robust and specialized car racing

skills. pages 1187–1194, 0-0 2006.

72

Page 83: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

BIBLIOGRAFIA 73

[35] Julian Togelius and Simon M. Lucas. Evolving controllers for simulated

car racing. In Proceedings of the Congress on Evolutionary Computation,

2005.

[36] N. van Hoorn, J. Togelius, D. Wierstra, and J. Schmidhuber. Ro-

bust player imitation using multiobjective evolution. In Evolutionary

Computation, 2009. CEC ’09. IEEE Congress on, pages 652–659, May

2009.

[37] Krzysztof Wloch and Peter J. Bentley. Optimising the performance of

a formula one car using a genetic algorithm. In Proceedings of Eighth

International Conference on Parallel Problem Solving From Nature, pages

702–711, 2004.

Page 84: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.
Page 85: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

Appendice A

Configurazione del tool

Per poter utilizzare il tool, e necessario impostare alcuni parametri all’interno

di due file di configurazione. Nel file params.txt sono presenti 22 parametri,

ma solamente 11 sono di nostro interesse:

alg: indica il tool da utilizzare per l’evoluzione genetica (nel nostro caso, il

GATbx).

popsize: indica la dimensione della popolazione (utilizzato per motivi di

debug).

maxgen: indica il massimo numero di generazioni realizzate dall’algoritmo

(utilizzato per motivi di debug).

statfile: indica il nome del file contenente le statistiche principali relative

all’esecuzione corrente (es. ruudskogen.stat).

popfile: indica il nome del file contenente tutti i dati relativi all’evoluzione

(es. ruudskogen.pop).

GATbx.paramFile: indica il path relativo al file di configurazione proprio

dell’algoritmo genetico (nel nostro caso, input sga).

problem: indica il tipo di problema che il tool dovra analizzare (nel nostro

caso BezierProblem).

Page 86: Politecnico di Milano · Alcuni dei piu` recenti lavori relativi ai racing games `e stato svolto da Togelius et al. utilizzando un semplice car racing game 2D realizzato in java.

76 BIBLIOGRAFIA

FitnessType: specifica se la funzione obiettivo da utilizzare e quella stimata

o quella simulata tramite un giro di pista lanciato (Simbolic o Real).

xmlFile: indica il path relativo al file xml che configura la gara in torcs (es.

race.xml).

objectiveTrack: indica il nome del tracciato preso in analisi (es. ruudskogen)

choose: indica la possibilita di valutare la Bezier interamente o dividendola

in sezioni (0 per la Bezier intera, 1 per dividere il tracciato in sezioni,

ognuna con la propria Bezier).

Per il file input sga, rimandiamo alla guida dedicata[33]. In caso si abbia

necessita di fornire all’algoritmo una popolazione iniziale, questa va inserita

all’interno di un file, contenente all’inizio il numero di elementi all’interno

della popolazione, in seguito il valore di ogni gene per ogni cromosoma della

popolazione, e in fine la bonta di quel genoma. Quest’ultimo elemento puo

non essere considerato, in caso si voglia far valutare al tool la bonta di quel

genoma, ma deve essere comunque presente all’interno del file.