ˇ ´ vysoke ´ uc ˇen´ı technicke ´ v Praze Cesk e ´ Fakulta elektrotechnicka
´ PRACE ´ DIPLOMOVA Simul´ ator vesm´ırn´ e lodi a jej´ı ˇ r´ızen´ı pomoc´ı genetick´ eho programov´ an´ı
Praha, 2013
Autor: Frantiˇ sek Hruˇ ska
i
Podˇ ekov´ an´ı Dˇekuji pˇredevˇs´ım vedouc´ımu diplomov´e pr´ace a rodiˇc˚ um.
ii
Abstrakt Tato pr´ace si bere za c´ıl vytvoˇrit trojrozmˇernou simulaci vesm´ırn´eho prostˇred´ı inspirovan´eho hrou Spacewar! a v tomto prostˇred´ı prov´est experimenty s genetick´ ym programov´an´ım. C´ılem pr´ace je navrhnout vhodn´e genetick´e oper´atory, termin´aln´ı a funkˇcn´ı uzly, zp˚ usob interpretace v´ ysledk˚ u program˚ u vyvinut´ ych genetick´ ym programov´an´ım a navrhnout experimenty vhodn´e pro simulaci, kter´e nauˇc´ı lod’ ovl´adat svou rychlost a rotace pˇri pohybu ve dvou rozmˇern´em prostˇred´ı, vyh´ ybat se pˇrek´aˇzk´am a nauˇcit se stˇr´ılet na terˇc. Nakonec jsou navrˇzeny dalˇs´ı moˇzn´e postupy ˇreˇsen´ı dan´e problematiky a moˇzn´a rozˇs´ıˇren´ı projektu do budoucna.
iii
Abstract Goal of this paper is create three-dimensional simulation of the universe inspired by the game called Spacewar! and run here experiments with genetic programming. The main goals are to suggest suitable genetic operators, teminals and funcional nodes, ways to interpret results from trees made by genetic programming and suggest experiments suitable for this simulation, which should teach the ship how to control its speed and rotations in two dimensional space, avoiding obstacles and firing at the targets. There are sugested some other approaches to solve this problem and some extensions to the future.
iv
Obsah Seznam obr´ azk˚ u
ix
Seznam tabulek
xi
´ 1 Uvod
1
2 Genetick´ e programov´ an´ı
3
2.1
Reprezentace program˚ u v GP . . . . . . . . . . . . . . . . . . . . . . . .
3
2.2
Inicializace populace . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.3
Fitness funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.4
Parametry GP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.5
Selekce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.6
Crossover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.7
Mutace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.8
Reprodukce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.9
Bloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.9.1
Kontrola bloatu v praxi . . . . . . . . . . . . . . . . . . . . . . .
11
2.10 Automatically defined functions . . . . . . . . . . . . . . . . . . . . . . .
12
2.11 Strongly typed GP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.12 Grammatical tree-based GP . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.13 Paraleln´ı GP
15
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Simulace prostˇ red´ı 3.1 3.2
17
Rotace ve 3D prostˇred´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.1.1
Rotaˇcn´ı matice . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
Pohyb tˇeles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.2.1
Z´akon setrvaˇcnosti . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.2.2
Z´akon s´ıly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
v
3.2.3 3.3
3.4
3.5
Aktualizace polohy a rychlosti . . . . . . . . . . . . . . . . . . . .
20
Gravitaˇcn´ı s´ıla a zrychlen´ı . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.3.1
N-Body Problem . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.3.2
Simulace N-Body probl´emu . . . . . . . . . . . . . . . . . . . . .
22
3.3.2.1
Particle - Particle . . . . . . . . . . . . . . . . . . . . . .
22
3.3.2.2
Particle - Mesh . . . . . . . . . . . . . . . . . . . . . . .
23
3.3.2.3
Particle - Particle, Particle - Mesh . . . . . . . . . . . .
23
Detekce koliz´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.4.1
Reprezentace objekt˚ u a poˇc´ıt´an´ı koliz´ı . . . . . . . . . . . . . . .
24
3.4.2
Sn´ıˇzen´ı ˇcasov´e n´aroˇcnosti detekce koliz´ı . . . . . . . . . . . . . . .
24
Lines of sight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
4 Implementace 4.1
27
Knihovny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.1.1
Grafick´e knihovny . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.1.2
Knihovny pro genetick´e programov´an´ı . . . . . . . . . . . . . . .
28
4.2
Pohyb tˇeles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
4.3
Implementace GP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.3.1
Evoluce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
4.3.2
Termin´aly a funkce . . . . . . . . . . . . . . . . . . . . . . . . . .
32
4.3.3
Genetick´e oper´atory . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.4
Ovl´ad´an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.5
Soubory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.5.1
Vstupn´ı soubory . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.5.2
V´ ystupn´ı soubory . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
Moˇznosti nastaven´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.6.1
Nastaven´ı vizualizace . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.6.2
Nastaven´ı pro lodˇe . . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.6.3
Konstanty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.6.4
Nastaven´ı pro GP . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.6.5
Nastaven´ı v´ ystup˚ u . . . . . . . . . . . . . . . . . . . . . . . . . .
42
Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.7.1
Main menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.7.2
Genetic programming menu . . . . . . . . . . . . . . . . . . . . .
43
4.7.3
Best evolved individual menu . . . . . . . . . . . . . . . . . . . .
43
4.6
4.7
vi
4.8
Screenshoty ze hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 Experimenty a diskuse
43 47
5.1
Nastaven´ı simulaˇcn´ıho prostˇred´ı . . . . . . . . . . . . . . . . . . . . . . .
47
5.2
Experimenty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.2.1
Zastaven´ı bez rotac´ı . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.2.1.1
V´ ysledky . . . . . . . . . . . . . . . . . . . . . . . . . .
50
Stˇrelba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
5.2.2.1
V´ ysledky . . . . . . . . . . . . . . . . . . . . . . . . . .
53
Pron´asledov´an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
5.2.3.1
V´ ysledky . . . . . . . . . . . . . . . . . . . . . . . . . .
56
Pohyb v gravitaˇcn´ım poli . . . . . . . . . . . . . . . . . . . . . . .
58
5.2.4.1
V´ ysledky . . . . . . . . . . . . . . . . . . . . . . . . . .
58
Pron´asledov´an´ı v gravitaˇcn´ım poli . . . . . . . . . . . . . . . . . .
61
5.2.5.1
V´ ysledky . . . . . . . . . . . . . . . . . . . . . . . . . .
62
Diskuse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
5.2.2 5.2.3 5.2.4 5.2.5 5.3
6 Z´ avˇ er
71
Literatura
73
A Obsah pˇ riloˇ zen´ eho CD
I
vii
viii
Seznam obr´ azk˚ u 2.1
Syntaktick´ y strom reprezentuj´ıc´ı funkci max(x + x, x + 3 * y) . . . . . .
4
2.2
Generov´an´ı stromu s maxim´aln´ı hloubkou 2 metodou full (t = ˇcas) . . .
5
2.3
Generov´an´ı stromu s maxim´aln´ı hloubkou 2 metodou grow (t = ˇcas) . . .
5
2.4
Pˇr´ıklad interpretace programu. . . . . . . . . . . . . . . . . . . . . . . . .
6
2.5
One-point crossover s common regionem . . . . . . . . . . . . . . . . . .
8
2.6
Subtree mutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.7
Pˇr´ıklad programu se dvˇema ADF a jednou RPB . . . . . . . . . . . . . .
12
2.8
Pˇr´ıklad jedince (derivation tree) vygenerovan´aho gramatikou z (2.4) . . .
14
3.1
Grafick´e zn´azornˇen´ı tˇr´ı z´akladn´ıch rotac´ı v 3D prostoru. . . . . . . . . . .
18
3.2
Vlevo letadlo bez gimbal locku, vpravo s gimbal lockem.
. . . . . . . . .
18
4.1
Diagram tˇr´ıd pro GP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
4.2
Diagram tˇr´ıd reprezentuj´ıc´ı uzly. . . . . . . . . . . . . . . . . . . . . . . .
31
4.3
Diagram tˇr´ıd reprezentuj´ıc´ı experimenty. . . . . . . . . . . . . . . . . . .
31
4.4
Planety. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.5
Lod’ a meteor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.6
44
4.7
Uk´azka pohybu lodi v gravitaˇcn´ım poli bez pouˇzit´ı motor˚ u. . . . . . . . . ´ Uvodn´ ı menu a menu pro nataven´ı parametr˚ u GP. . . . . . . . . . . . . .
5.1
Pr˚ ubˇeh evoluce experimentu Stop2D. . . . . . . . . . . . . . . . . . . . .
51
5.2
Graf z´avislosti rychlosti lodi na vzd´alenosti od c´ıle. . . . . . . . . . . . .
52
5.3
Pr˚ ubˇeh evoluce experimentu Fire2D. . . . . . . . . . . . . . . . . . . . .
54
5.4
Pr˚ ubˇeh evoluce experimentu Persuit2D. . . . . . . . . . . . . . . . . . . .
57
5.5
Trajektorie lodi v experimentu Persuti2D. . . . . . . . . . . . . . . . . .
57
5.6
Trajektorie lodi krouˇz´ıci kolem c´ıle v experimentu GravStop2D. . . . . .
59
5.7
Hvˇezdicovit´a trajektorie lodi v experimentu GravStop2D. . . . . . . . . .
60
5.8
Pr˚ ubˇeh evoluce experimentu GravStop2D. . . . . . . . . . . . . . . . . .
61
ix
45
5.9
Pr˚ ubˇeh evoluce experimentu PersuitGrav2D. . . . . . . . . . . . . . . . .
63
5.10 Trajektorie lodi v experimentu PersuitGrav2D. . . . . . . . . . . . . . . .
64
5.11 Trajektorie lodi v experimentu PersuitGrav2D. . . . . . . . . . . . . . . .
64
5.12 Trajektorie lodi v experimentu PersuitGrav2D. . . . . . . . . . . . . . . .
65
5.13 Trajektorie lodi v experimentu PersuitGrav2D. . . . . . . . . . . . . . . .
66
5.14 Trajektorie lodi v experimentu PersuitGrav2D. . . . . . . . . . . . . . . .
67
x
Seznam tabulek 4.1
Ovl´ad´an´ı simulace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
5.1
Nastaveni experimentu Stop2D. . . . . . . . . . . . . . . . . . . . . . . .
49
5.2
Nastaven´ı experimentu Fire2D. . . . . . . . . . . . . . . . . . . . . . . .
53
5.3
Nastaven´ı experimentu Persuit2D. . . . . . . . . . . . . . . . . . . . . . .
56
5.4
Nastaven´ı experimentu GravStop2D. . . . . . . . . . . . . . . . . . . . .
58
5.5
Struktura individu´alu opisuj´ıc´ıho kruhovou trajektorii kolem c´ıle. . . . .
59
5.6
Struktura individu´alu opisuj´ıc´ıho hvˇezdicovitou trajektorii kolem c´ıle. . .
60
5.7
Nastaven´ı experimentu PersuitGrav2D. . . . . . . . . . . . . . . . . . . .
62
5.8
Struktura prvn´ıho individ´alu. . . . . . . . . . . . . . . . . . . . . . . . .
63
5.9
Struktura druh´eho individ´alu. . . . . . . . . . . . . . . . . . . . . . . . .
65
5.10 Struktura tˇret´ıho individ´alu. . . . . . . . . . . . . . . . . . . . . . . . . .
66
xi
xii
Kapitola 1 ´ Uvod Hra Spacewar! 1 byla vytvoˇrena v roce 1977 pro poˇc´ıtaˇc PDP-1 na Massachusetts Institute of Technology. Ve hˇre se vyskytovaly dvˇe ozbrojen´e lodˇe nazvan´e “the needle” a “the wedge” a uprostˇred hrac´ı plochy byla hvˇezda p˚ usob´ıc´ı na lodˇe gravitaˇcn´ı silou. Hr´aˇc mˇel omezen´ y poˇcet raket a paliva a jeho c´ılem bylo sestˇrelit protivn´ıkovu lod’ raketou. Na rakety gravitaˇcn´ı s´ıla nep˚ usobila. Hra se velice rychle rozˇs´ıˇrila mezi ostatn´ı program´atory a ti zaˇcali pˇrid´avat sv´e vlastn´ı modifikace pro hru jako napˇr´ıklad maskov´an´ı lod´ı, miny, n´ahodnˇe generovan´e pozad´ı a dokonce i pohled z prvn´ı osoby. Postupem ˇcasu byl k´od pˇreps´an i pro jin´e typy poˇc´ıtaˇc˚ u a dnes existuje mnoho jej´ıch modifikac´ı pro PC.
1
Java emulator of Spacewar!, http://spacewar.oversigma.com/
1
2
´ KAPITOLA 1. UVOD
Kapitola 2
Genetick´ e programov´ an´ı
Tato kapitola pojedn´av´a o z´akladech genetick´eho programov´an´ı (GP)[1]. Je v n´ı rozebr´ana reprezentace program˚ u (2.1), inicializaˇcn´ı techniky (2.2), fitness funkce (2.3), technika selekce rodiˇc˚ u z populace (2.5), oper´atory kˇr´ıˇzen´ı (2.6) mutace (2.7) a reprodukce(2.8) a bloat (2.9). D´ale pak kapitola seznamuje se z´akladn´ımi druhy genetick´eho programov´an´ı (2.10, 2.11, 2.12) a s paraleln´ım genetick´ ym programov´an´ım (2.13).
2.1
Reprezentace program˚ u v GP
Ve vˇetˇsinˇe pˇr´ıpad˚ u se programy nereprezentuj´ı jako ˇra´dky k´odu, ale jako stromy. Vezmˇeme si jako pˇr´ıklad max(x+x,x+3*y) (obr. 2.1). Symboly v pˇr´ıkladu m˚ uˇzeme rozdˇelit na termin´aly obsahuj´ıc´ı konstanty a promˇenn´e (v pˇr´ıkladu ˇc´ıslo tˇri a promˇenn´e x y) a na funkce obsahuj´ıc´ı vnitˇrn´ı uzly (max, *, +). Termin´al m˚ uˇze b´ yt i funkce bez argument˚ u, jako napˇr´ıklad funkce random(), vracej´ıc´ı n´ahodnˇe vygenerovan´e ˇc´ıslo. 3
´ PROGRAMOVAN ´ ´I KAPITOLA 2. GENETICKE
4
Obr´azek 2.1: Syntaktick´ y strom reprezentuj´ıc´ı funkci max(x + x, x + 3 * y)
V literatuˇre zab´ yvaj´ıc´ı se genetick´ ym programov´an´ım jsou stromy obvykle v prefixov´em z´apisu. Tento zp˚ usob z´apisu umoˇzn ˇuje l´epe sledovat vztahy mezi (pod)v´ yrazy a jejich odpov´ıdaj´ıc´ımi (pod)stromy. Pˇr´ıklad z pˇredchoz´ıho odstavce zapsan´ y prefixovˇe je:
(max (+ x x) (+ x (∗ 3 y)))
2.2
Inicializace populace
Jedinci v populaci jsou pˇri inicializaci generov´ani n´ahodnˇe. Nejstarˇs´ımi a nejjednoduˇsˇs´ımi metodami inicializace populace jsou metody grow a full a jejich velmi ˇcasto pouˇz´ıvan´a kombinace zvan´a Ramped half-and-half metoda. Obˇe metody maj´ı definovanou maxim´aln´ı inicializaˇcn´ı hloubku generovan´eho stromu. Hloubka stromu je hloubka nejhlubˇs´ıho listu. V metodˇe full se uzly v hloubce menˇs´ı neˇz je maxim´aln´ı hloubka generuj´ı z funkˇcn´ı mnoˇziny a v maxim´aln´ı hloubce jsou uzly generov´any z mnoˇziny termin´al˚ u. Na obr. 2.2 je vidˇet postupn´e generov´ani stromu s hloubkou 2 metodou full. Velikost strom˚ u (poˇcet uzl˚ u) generovan´ ych full metodou z´avis´ı pouze na aritˇe funkˇcn´ıch uzl˚ u (poˇcet pˇr´ım´ ych potomk˚ u uzlu).
2.2. INICIALIZACE POPULACE
5
Obr´azek 2.2: Generov´an´ı stromu s maxim´aln´ı hloubkou 2 metodou full (t = ˇcas)
Metoda grow generuje uzly z mnoˇziny vˇsech uzl˚ u (sjednocen´ı mnoˇziny funkc´ı a termin´al˚ u). Uzly v maxim´aln´ı hloubce jsou generov´any jen z mnoˇziny termin´al˚ u. Tato metoda generuje stromy r˚ uzn´ ych velikost´ı bez ohledu na aritu funkˇcn´ıch uzl˚ u. Generov´an´ı individu´alu metodou grow je zn´azornˇeno na obr. 2.3. Tato metoda je velmi citliv´a na velikosti mnoˇzin funkc´ı a termin´al˚ u. Je-li napˇr´ıklad funkˇcn´ı mnoˇzina pˇr´ıliˇs velk´a oproti mnoˇzinˇe termin´al˚ u, chov´a se podobnˇe jako metoda full a naopak, kdyˇz je velk´a mnoˇzina termin´al˚ u, metoda generuje sp´ıˇse kr´atk´e programy.
Obr´azek 2.3: Generov´an´ı stromu s maxim´aln´ı hloubkou 2 metodou grow (t = ˇcas)
´ PROGRAMOVAN ´ ´I KAPITOLA 2. GENETICKE
6
Metoda ramped half-and-half generuje polovinu individu´al˚ u v populaci metodou grow a druhou polovinu metodou full.
2.3
Fitness funkce
Fitness funkce je n´astroj slouˇz´ıc´ı k ohodnocen´ı jednotliv´ ych individu´al˚ u v populaci. Napom´ah´a tak programu upˇresnit, kter´e oblasti prostoru ˇreˇsen´ı m´a d´ale prozkoum´avat. Fitness funkci lze definovat mnoha zp˚ usoby. Napˇr´ıklad jako odchylku mezi v´ ystupem a oˇcek´avan´ ym v´ ystupem, jako ˇcas potˇrebn´ y k dosaˇzen´ı c´ıle, jako vzd´alenost chybˇej´ıc´ı k dosaˇzen´ı c´ıle atd. Jelikoˇz GP vyv´ıj´ı programy, k v´ ypoˇctu fitness hodnoty je potˇreba vznikl´ y program interpretovat (prov´est u ´koly definovan´e ve vˇsech uzlech v poˇrad´ı, kter´e zaruˇcuje, ˇze se neprovede ˇz´adn´ y uzel, jehoˇz argumenty jeˇstˇe nejsou zn´amy ) po urˇcit´ y ˇcas a ide´alnˇe i na nˇekolika r˚ uzn´ ych konfigurac´ıch prostˇred´ı. Pr˚ uchod stromu pˇri interpretaci programu je vidˇet na obr. 2.4.
Obr´azek 2.4: Pˇr´ıklad interpretace programu.
2.4. PARAMETRY GP
2.4
7
Parametry GP
Parametry jsou velmi d˚ uleˇzitou souˇc´asti GP a odv´ıj´ı se od nich chov´an´ı cel´e evoluce. Je nemoˇzn´e definovat nˇejak´e obecnˇe dobr´e parametry pro GP. Tradiˇcnˇe se pouˇz´ıv´a metoda ramped half-and-half (2.2) pro tvorbu poˇca´teˇcn´ı populace s rozsahem hloubky od 2 do 6 a pravdˇepodobnost kˇr´ıˇzen´ı pˇres 90%. Velmi ˇcasto je velikost populace pˇres 500 jedinc˚ u, jsou ale GP syst´emy, kter´e pouˇz´ıvaj´ı menˇs´ı populaci. Poˇcet generac´ı b´ yv´a v mez´ıch 10 aˇz 50, kdy je pokrok v prohled´av´an´ı prostoru ˇreˇsen´ı nejvˇetˇs´ı.
2.5
Selekce
Ve vˇetˇsinˇe evoluˇcn´ıch algoritm˚ u se genetick´e oper´atory aplikuj´ı na individu´aly, kter´e jsou vyb´ır´any na z´akladˇe hodnoty fitness. Nejˇcastˇejˇs´ı selekˇcn´ı metodou je tournament selection (turnajov´a selekce). Pˇri tournament selection se vybere nˇekolik jedinc˚ u z populace a tito jedinci jsou mezi sebou porovn´ani a nejlepˇs´ı z nich je vybr´an jako rodiˇc. Pˇri kˇr´ıˇzen´ı jsou vˇsak potˇreba dva rodiˇce, turnajov´a selekce se proto dˇel´a dvakr´at. Tato selekˇcn´ı metoda pouze porovn´av´a, kter´ y z vybran´ ych jedinc˚ u je lepˇs´ı, nezjiˇst’uje o kolik je lepˇs´ı. To vede k efektivn´ımu rozloˇzen´ı tzv. selection pressure (mechanismus selekce, kter´ y urˇcuje, jak moc bude syst´em upˇrednostˇ novat individu´aly s lepˇs´ı fitness). Dalˇs´ı metodou selekce je roulette wheel selection nebo tak´e Fitness proportionate selection. Pravdˇepodobnost v´ ybˇeru individu´alu i z populace o velikosti N z´avis´ı na jeho hodnotˇe fitness fi a je rovna: pi =
fi N ∑
(2.1)
fj
j=1
2.6
Crossover
Jedn´ım ze dvou n´astroj˚ u, pouˇz´ıvan´ ych k vytvoˇren´ı potomka, je tzv. crossover neboli kˇr´ıˇzen´ı. Jedn´a se o proces, kdy se vz´ajemnˇe prohod´ı dva podstromy ze dvou individu´al˚ u (rodiˇc˚ u) v populaci. Rodiˇce se vyb´ıraj´ı pomoc´ı selekˇcn´ıch technik (2.5). Pravdˇepodobnost
´ PROGRAMOVAN ´ ´I KAPITOLA 2. GENETICKE
8
aplikace crossover oper´atoru je obvykle 90% a vyˇsˇs´ı. Existuje nˇekolik druh˚ u. • Nejstarˇs´ı crossover operator v GP se stromovou strukturou je tzv. one-point crossover. Program nejprve projde oba rodiˇcovsk´e stromy od koˇrenov´eho uzlu a analyzuje jejich strukturu. Crossover point (bod kˇr´ıˇzen´ı) n´aslednˇe vybere jen z tzv. common region (obr. 2.5). V t´eto oblasti maj´ı oba rodiˇcovsk´e stromy stejnou strukturu, tzn. uzly na odpov´ıdaj´ıc´ıch m´ıstech maj´ı stejnou aritu, nemus´ı b´ yt ale stejn´eho typu. Nakonec program prohod´ı podstromy obou crossver point˚ u.
Obr´azek 2.5: One-point crossover s common regionem
• Uniform crossover proch´az´ı stromy v jejich common regionech a u kaˇzd´eho uzlu se rozhodne, ponech´a-li uzel ve stromu nebo ho nahrad´ı odpov´ıdaj´ıc´ım uzlem z druh´eho rodiˇcovsk´eho stromu. Tento oper´ator zp˚ usobuje vˇetˇs´ı zmˇeny k´odu bl´ıˇze u koˇrene stromu. • Context-preserving crossover je podobnˇe jako one-point crossover omezen stejn´ ymi souˇradnicemi, avˇsak nen´ı omezen common regionem. • Size-fair crossover. Crossover point na prvn´ım stromu se vybere n´ahodnˇe. N´aslednˇe se spoˇc´ıt´a velikost podstromu. Tato velikost je pak pouˇzit´a k volbˇe crossover pointu na druh´em stromu tak, aby druh´ y podstrom nebyl pˇr´ıliˇs velk´ y.
2.7. MUTACE
2.7
9
Mutace
Druh´ ym n´astrojem pouˇz´ıvan´ ym k vytv´aˇren´ı potomk˚ u je takzvan´a mutace. Mutace se pouˇz´ıv´a jiˇz od prvn´ıch experiment˚ u s evoluˇcn´ımi programy a dnes je velice rozˇs´ıˇrenou technikou pouˇz´ıvanou v GP. Pravdˇepodobnost mutace je obvykle kolem 1%.Existuje mnoho druh˚ u mutac´ı. V n´asleduj´ıc´ı kapitole pop´ıˇsi nˇekolik z nich. • Subtree mutation, kter´a n´ahodnˇe vybere podstrom programu a nahrad´ı ho nov´ ym n´ahodnˇe vygenerovan´ ym podstromem (obr. 2.6). Kinnear definoval podobn´ y mutaˇcn´ı oper´ator ale s omezen´ım, ˇze nov´ y vygenerovan´ y podstrom nesm´ı b´ yt vˇetˇs´ı o v´ıce neˇz 15%.
Obr´azek 2.6: Subtree mutation
• Size-fair subtree mutation se snaˇz´ı zachov´avat velikost pozmˇenˇen´ ych podstrom˚ u vzhledem k p˚ uvodn´ım. Velikost nov´eho podstromu je z intervalu [d /2, 3d /2] velikosti nahrazen´eho podstromu a nebo je jeho velikost odvozen´a od dalˇs´ıho n´ahodnˇe vybran´eho podstromu v programu. Experiment´alnˇe bylo zjiˇstˇeno, ˇze druh´a moˇznost generuje o mnoho v´ıce redundantn´ıho k´odu, tzv. bloat (2.9). • Node replacement mutation (nebo point mutation) nahrad´ı n´ahodn´ y uzel stromu n´ahodnˇe vygenerovan´ ym uzlem stejn´eho typu, tzn. uzlem se stejnou aritou. • Hoist mutation vytvoˇr´ı nov´ y individu´al, kter´ y je kopi´ı n´ahodn´eho podstromu rodiˇce. Nov´ y jedinec je menˇs´ı neˇz jeho rodiˇc a m´a jin´ y koˇrenov´ y uzel.
´ PROGRAMOVAN ´ ´I KAPITOLA 2. GENETICKE
10
• Shrink mutation nahrad´ı n´ahodn´ y podstrom programu n´ahodn´ ym termin´alem. Jde se o speci´aln´ı pˇr´ıpad subtree-mutation. Spolu s hoist mutation redukuj´ı velikost novˇe generovan´ ych program˚ u. • Permutation mutation vybere n´ahodn´ y funkˇcn´ı uzel rodiˇce a pot´e prohod´ı jeho argumenty (podstromy). • Mutating constants at random. Ke konstantˇe se pˇriˇcte n´ahodn´a hodnota.
2.8
Reprodukce
Reprodukce zkop´ıruje jedince z rodiˇcovsk´e generace vybran´eho podle selekˇcn´ıch pravidel 2.5 do dalˇs´ı generace. Pravdˇepodobnost reprodukce se z´ısk´a tak, ˇze seˇcteme pravdˇepodobnosti aplikace mutace a kˇr´ıˇzen´ı a pokud je tento souˇcet p menˇs´ı neˇz 100%, je pravdˇepodobnost reprodukce rovna 1 - p
2.9
Bloat
Jiˇz v 90.t´ ych letech minul´eho stolet´ı si vˇedci vˇsimli, ˇze je velikost populace bˇehem v´ yvoje dynamick´a. Zpoˇc´atku se sice chov´a staticky co se velikosti jedinc˚ u (poˇcet uzl˚ u) t´ yˇce, ale po nˇejak´em poˇctu generac´ı se velikost jedinc˚ u zaˇcne rapidnˇe zvˇetˇsovat, coˇz zvyˇsuje ˇcasovou n´aroˇcnost na v´ ypoˇcet fitness hodnoty (2.3). Na druhou stranu, u sloˇzit´ ych probl´em˚ u, jako je napˇr´ıklad spojit´a symbolick´a regrese, potˇrebujeme vyv´ıjet velk´e programy (o mnoho vˇetˇs´ı neˇz programy inicializovan´e v prvn´ı generaci), aby splˇ novaly vˇsechny podm´ınky dan´e fitness funkc´ı. Proto bloat definujeme jako r˚ ust velikosti programu bez (v´yrazn´eho) zlepˇsen´ı fitness hodnoty. Oper´atory kˇr´ıˇzen´ı takt´eˇz zp˚ usobuj´ı bloat. Velikost novˇe vloˇzen´ ych podstrom˚ u je zpravidla vˇetˇs´ı neˇz p˚ uvodn´ı podstrom a kˇr´ıˇzen´ı produkuje ˇcasto potomky se stejnou nebo o m´alo vˇetˇs´ı fitness hodnotou. To vede k n´ar˚ ustu pr˚ umˇern´e velikosti programu. Uzly v GP programu m˚ uˇzeme rozdˇelit na dva druhy: Na aktivn´ı a neaktivn´ı k´od. Neaktivn´ı k´od je ta ˇca´st programu, kter´a nen´ı nikdy provedena nebo je provedena, ale jej´ı v´ ystup nen´ı nikde pouˇzit. Removal bias theory ˇr´ık´a, ˇze neaktivn´ı ˇc´asti k´odu se vyskytuj´ı v niˇzˇs´ıch ˇc´astech stromu, v podstromech menˇs´ıch neˇz je pr˚ umˇern´a velikost podstrom˚ u.
2.9. BLOAT
11
Nature of program search space theory ˇr´ık´a, ˇze od jist´e chv´ıle fitness hodnota neodpov´ıd´a velikost´ı programu. Jelikoˇz se v populaci vyskytuje v´ıce dlouh´ ych program˚ u s urˇcitou hodnotou fitness neˇz mal´ ych program˚ u se stejnou fitness hodnotou, v pr˚ ubˇehu evoluce GP vytv´aˇr´ı st´ale v´ıce a v´ıce dlouh´ ych program˚ u.
2.9.1
Kontrola bloatu v praxi
Nejjednoduˇsˇs´ı zp˚ usob jak bloat kontrolovat, je omezit programu jeho maxim´aln´ı hloubku a velikost. Mnoho implementac´ı zav´ad´ı oper´atory, kter´e kontroluj´ı poruˇsen´ı tˇechto omezen´ı a pokud jsou poruˇseny, je do nov´e generace zkop´ırov´an jeden z rodiˇc˚ u. Tato metoda efektivnˇe omezuje r˚ ust programu, ale do nov´e generace jsou ˇcasto kop´ırov´ani jedinci, kteˇr´ı maj´ı tendenci tato omezen´ı poruˇsovat aplikac´ı oper´ator˚ u kˇr´ıˇzen´ı. Populace je pak naplnˇena jedinci, kteˇr´ı jsou na hranici tˇechto omezen´ı, coˇz si ne vˇzdy pˇrejeme. Dalˇs´ı metodou kontroly bloatu jsou tzv. anti-bloat genetick´e oper´ atory. Nejˇcastˇeji se pouˇz´ıvaj´ı size-fair crossover (2.6) a size-fair mutation oper´atory. D´ale pak shrink mutation a hoist mutation (2.7). Posledn´ı moˇznost´ı jak kontrolovat bloat, je ovlivnit selekci rodiˇc˚ u. Nejzn´amˇejˇs´ı metodou je parsimony-pressure method. Ta u kaˇzd´eho individu´alu uprav´ı fitness tak, ˇze od jeho fitness hodnoty odeˇcte hodnotu odpov´ıdaj´ıc´ı jeho velikosti. Vˇetˇs´ımu programu se odeˇc´ıt´a vyˇsˇs´ı hodnota, tud´ıˇz tento program bude generovat m´enˇe potomk˚ u. Dost´av´ame tak fitness funkci f (x) − c × l(x) kde l(x) je d´elka programu x, f(x) je p˚ uvodn´ı fitness hodnota programu a c je tzv. parsimony coefficient, kter´ y slouˇz´ı k tomu, abychom z pozmˇenˇen´e fitness dostali zp´atky origin´aln´ı fitness. Dalˇs´ı z metod ovlivˇ nuj´ıc´ı selekci rodiˇc˚ u, Tarpeian method, pˇriˇrad´ı nˇekter´ ym rodiˇc˚ um vˇetˇs´ım neˇz je pr˚ umˇern´a velikost individu´al˚ u v rodiˇcovsk´e populaci ˇspatnou hodnotu fitness s pravdˇepodobnost´ı p = W. To zaruˇc´ı, ˇze tento velk´ y jedinec nebude s velkou pravdˇepodobnost´ı vybr´an a takt´eˇz nebude prov´adˇen, tud´ıˇz se urychl´ı bˇeh cel´e evoluce. Tato metoda je z´avisl´a na volbˇe parametru W. Velk´a hodnota zp˚ usob´ı vyˇrazov´an´ı vˇetˇs´ıho poˇctu individu´al˚ u jeˇstˇe pˇred t´ım, neˇz je spoˇc´ıt´ana jejich fitness. Mal´a hodnota zase nevynakl´ad´a dostateˇcn´ y tlak na velikost strom˚ u. Nejˇcastˇeji se tak pouˇz´ıv´a hodnota W = 0.3.
´ PROGRAMOVAN ´ ´I KAPITOLA 2. GENETICKE
12
V metodˇe waiting room[2], je individu´al pˇred zaˇrazen´ım do populace um´ıstˇe do waiting room, kde ˇcek´a po dobu u ´mˇern´e sv´e velikosti a pot´e je zaˇrazen do populace. Tento mechanismus umoˇzn´ı menˇs´ım individu´al˚ um rychlejˇs´ı ˇs´ıˇren´ı populac´ı.
2.10
Automatically defined functions
Automatically defined functions (ADF) jsou ˇcast´e opakuj´ıc´ı se ˇc´asti k´odu. Maj´ı stejn´ y tvar stromu ale mohou m´ıt jin´e argumenty. Program s ADF se skl´ad´a z nˇekolika sloˇzek. Jednak z ADF a d´ale z jedn´e nebo nˇekolika tzv. main result-producing branches (RPB), jak zn´azorˇ nuje obr. 2.7. RPB je program, kter´ y je prov´adˇen pˇri kaˇzd´em vyhodnocov´an´ı jedince. RPB m˚ uˇze volat ADF a ADF mohou volat samy sebe. Jedna ADF muˇze b´ yt RPB vol´ana i nˇekolikr´at.
Obr´azek 2.7: Pˇr´ıklad programu se dvˇema ADF a jednou RPB
Vezmˇeme si jako pˇr´ıklad n´asleduj´ıc´ı individu´al skl´adaj´ıc´ı se z jedn´e ADF a jedn´e RPB: RBF = ADF (ADF (ADF (x)))
(2.2)
ADF = arg0 × arg0
(2.3)
Rovnice (2.3) je jednoduch´a druh´a mocnina argumentu arg0 ale jej´ı nˇekolikan´asobn´a kombinace v RPB (2.2) vrac´ı x8 a to v mnohem pˇrehlednˇejˇs´ım z´apisu. Tento pˇr´ıklad je jednoduch´ y a ADF se pouˇz´ıvaj´ı na mnohem sloˇzitˇejˇs´ı vˇeci. M˚ uˇze se vˇsak st´at, ˇze ADF je zavol´ana jen jednou za cel´ y bˇeh programu, nebo ˇze ADF obsahuje jen jeden uzel, tedy je to jen jin´ y n´azev pro termin´al. V tˇechto pˇr´ıpadech ztr´ac´ı ADF na v´ yznamu.
2.11. STRONGLY TYPED GP
13
Rekurze s ADF vede ve vˇetˇsinˇe pˇr´ıpad˚ u k zacyklen´ı. Existuje zp˚ usob jak zacyklen´ı obej´ıt a to pˇrid´an´ım index˚ u i a j. ADFi pak m˚ uˇze volat ADFj jen za pˇredpokladu, ˇze i < j. Pˇri kˇr´ıˇzen´ı (2.6) lze nahradit strom z ADFi pouze jin´ ym stromem takt´eˇz z ADFi . John Koza navrhl dalˇs´ı automatically-evolved programs: Automatomatically defined iterations (ADI), Automatically defined loops (ADL) a Automatically defined recursion(ADR).
2.11
Strongly typed GP
Strongly typed GP je GP, v nˇemˇz maj´ı vˇsechny uzly definovan´ y n´avratov´ y datov´ y typ a funkˇcn´ı uzly maj´ı definovan´ y i datov´ y typ vˇsech argument˚ u. Vezmˇeme si jako pˇr´ıklad funkci IF FOOD AHEAD(test, option1, option2). Tato funkce m´a tˇri argumenty. Prvn´ı argument, test, vrac´ı datov´ y typ boolean, zbyl´e dva mohou b´ yt napˇr´ıklad typu void, tzn. nevrac´ı ˇza´dnou hodnotu (ale mohou prov´est nˇejakou akci, napˇr´ıklad GO AHEAD). Cel´ y uzel m˚ uˇze m´ıt pak n´avratovou hodnotu typu void.
2.12
Grammatical tree-based GP
Gramatick´a evoluce je GP, kter´e pouˇz´ıv´a pro tvorbu individu´al˚ u gramatiku a zajiˇst’uje, ˇze vznikl´e programy jsou ”gramaticky spr´avn´e”. Vezmˇeme si jako pˇr´ıklad gramatiku v (2.4) tree ::= E × sin (E × t)
(2.4)
E ::= var|(EopE) op ::= +| − | × |÷ var ::= x|y|z Kaˇzd´e z pravidel v (2.4) lze povaˇzovat za tzv. production rule nebo rewrite rule. Prvky, kter´e nelze pˇrepsat ˇz´adn´ ym pravidlem naz´ yv´ame termin´ aly gramatiky a prvky z lev´ ych stran pravidel naz´ yv´ame netermin´ aln´ımi symboly. Strom vytvoˇren´ y z gramatiky (2.4) zobrazuje obr. 2.8. Program reprezentovan´ y t´ımto stromem y × sin (x + z) × t
´ PROGRAMOVAN ´ ´I KAPITOLA 2. GENETICKE
14
z´ısk´ame tak, ˇze pˇreˇcteme listy stromu zleva doprava. Jedn´ım ze zaj´ımav´ ych GP pˇr´ıstup˚ u vyuˇz´ıvaj´ıc´ıch gramatiku je grammatical evolution (GE), ˇcesky gramatick´a evoluce. GE nevyuˇz´ıv´a k reprezentaci individu´al˚ u stromy ale sekvence cel´ ych ˇc´ısel o r˚ uzn´ ych d´elk´ach. Pravidla gramatiky na prav´e stranˇe jsou indexov´ana od 0. K vygenerov´an´ı programu se pak vybere pravidlo, kter´e je urˇceno zbytkem po dˇelen´ı ˇc´ısla v genu ˇc´ıslem znaˇc´ıc´ım poˇcet pravidel na prav´e stranˇe pravidla. Uvaˇzujme jedince ve tvaru (2.5) 39, 7, 2, 83, 66, 92, 57, 80, 47, 94 a gramatiku (2.4).
Obr´azek 2.8: Pˇr´ıklad jedince (derivation tree) vygenerovan´aho gramatikou z (2.4)
Postup vytv´aˇren´ı stromu na obr. 2.8 (rozv´ıjej´ıc´ı netermin´aly jsou podtrˇzen´e): tree → (39 mod 1 = 0, tzn. je zde jen jedna moˇznost) E ×sin(E × t) → (7 mod 2 = 1, tzn. vybereme druhou moˇznost) (E op E ) ×sin(E × t) → (2 mod 2 = 0, tzn. vybereme prvn´ı moˇznost) (var op E ) ×sin(E × t) → (83 mod 3 = 2, tzn. vybereme tˇret´ı moˇznost) (z op E ) ×sin(E × t)
(2.5)
2.13. PARALELN´I GP
15
→ (66 mod 4 = 2, tzn. vybereme tˇret´ı moˇznost) (z op E ) ×sin(E × t) ... (z × x) × sin(x × t)
2.13
Paraleln´ı GP
Paralelizace GP v´ yraznˇe urychluje bˇeh programu a mˇen´ı chov´an´ı evoluce. Existuj´ı dva zp˚ usoby jak paralelizovat GP: Prvn´ı z nich, Master-slave model, rozdˇel´ı v´ ypoˇcty na nˇekolik jader. Takto lze paralelizovat v´ ypoˇcet hodnoty fitness ale i selekci, genetick´e oper´atory a inicializaci. Druh´ ym zp˚ usobem, inspirovan´ ym pˇr´ırodou, je Island model. Princip spoˇc´ıv´a v ˇ od rozdˇelen´ı populace na nˇekolik menˇs´ıch sub-populac´ı a ty vyv´ıjet nez´avisle na sobˇe. Cas ˇcasu si mezi sebou mohou sub-populace vymˇenit nˇejak´e individu´aly. Tyto sub-populace mohou konvergovat rychleji a mohou naj´ıt r˚ uzn´a lok´aln´ı optima.
16
´ PROGRAMOVAN ´ ´I KAPITOLA 2. GENETICKE
Kapitola 3 Simulace prostˇ red´ı 3.1
Rotace ve 3D prostˇ red´ı
V dvourozmˇern´em prostˇred´ı, v nˇemˇz si vystaˇc´ıme s rotac´ı kolem jedn´e osy, lze rotace reprezentovat pomoc´ı Eulerov´ych u ´hl˚ u. Tato metoda v trojrozmˇern´em prostˇred´ı, v nˇemˇz rozliˇsujeme tˇri druhy rotac´ı roll (kolem osy x), pitch (kolem osy y) a yaw (kolem osy z) (obr. 3.1), vede k nˇekolika probl´em˚ um: • Rotace r1 a r2 nejsou asociativn´ı. To znamen´a, ˇze plat´ı: r1 .r2 ̸= r2 .r1 V d˚ usledku t´eto nerovnosti z´ısk´ame r˚ uzn´e v´ ysledn´e polohy tˇelesa pro r˚ uzn´a poˇrad´ı aplikac´ı rotac´ı. Jako pˇr´ıklad si vezmˇete dlaˇ n. Palec je osa x, nataˇzen´e prsty jsou osa y a osa z proch´az´ı dlan´ı. Ted’ proved’te postupnˇe rotace kolem osy x a osy y o 30 stupˇ n˚ u a zapamatujte si v´ ysledek. N´aslednˇe proved’te rotace v opaˇcn´em poˇrad´ı. Dostanete se k jin´emu v´ ysledku. Obecnˇe plat´ı, ˇze ˇc´ım vˇetˇs´ı je u ´hel rotace, t´ım vˇetˇs´ı je i odchylka v celkov´e orientaci tˇelesa v prostoru. • Gimbal Lock - Namapov´an´ı jedn´e osy na jinou (3.2). Tento efekt nast´av´a pˇri rotac´ıch o 90 stupˇ n˚ u. Opˇet jako pˇr´ıklad poslouˇz´ı dlaˇ n. Po rotaci kolem osy x (palec) o 90 stupˇ n˚ u je osa y shodn´a s osou z a rotace kolem tˇechto dvou os se chovaj´ı stejnˇe. Eulerovy u ´hly tedy nejsou vhodn´e pro reprezentov´an´ı rotac´ı v trojrozmˇern´em prostˇred´ı. Naˇstˇest´ı existuj´ı i jin´e metody jako axis-angle representation, quaterniony a v poˇc´ıtaˇcov´e grafice velice rozˇs´ıˇren´e rotaˇcn´ı matice[3]. 17
ˇ ´I KAPITOLA 3. SIMULACE PROSTRED
18
Obr´azek 3.1: Grafick´e zn´azornˇen´ı tˇr´ı z´akladn´ıch rotac´ı v 3D prostoru.
Obr´azek 3.2: Vlevo letadlo bez gimbal locku, vpravo s gimbal lockem.
3.1.1
Rotaˇ cn´ı matice
V poˇc´ıtaˇcov´e grafice jsou rotace velmi ˇcasto reprezentov´any pomoc´ı tzv.rotaˇcn´ı matice o velikosti 3x3 (3.1). Matematick´ y z´aklad rotaˇcn´ı matice je celkem jednoduch´ y a snadno se implementuje. Matice se skl´ad´a z tˇechto prvk˚ u:
tx2 + c
txy + sz txz − sy
txy − sz ty 2 + c tyz + sx txz + sy tyz − sx tz 2 + c kde (x, y, z)T
(3.1)
ˇ 3.2. POHYB TELES
19
je osa rotace, c = cosΘ, s = sinΘ, t = 1 − cosΘ a Θ je u ´hel. Jednotliv´e rotaˇcn´ı matice rotac´ı roll (3.2), pitch (3.3) a yaw (3.4) vypadaj´ı n´asledovnˇe: Matice rotace kolem osy x o u ´hel α:
0
0
0
Rx (α) = 0 cos(α) −sin(α) 0 sin(α) cos(α)
(3.2)
Matice rotace kolem osy y o u ´hel β: Ry (β) =
cos(β) 0
0 sin(β) 1
0
−sin(β) 0 cos(β)
(3.3)
Matice rotace kolem osy z o u ´hel γ:
cos(γ) −sin(γ) 0 Rz (γ) = sin(γ) cos(γ) 0 0 0 1
(3.4)
Rotaˇcn´ı matice je souˇc´ast´ı projekˇcn´ı matice o velikosti 4x4. Tato matice obsahuje u ´daje i o posunut´ı tˇelesa od poˇc´atku soustavy souˇradnic. Pro spr´avnou simulaci rotac´ı je nutn´e prov´est rotace v poˇca´tku soustavy souˇradnic. Proto se tˇeleso pˇred aplikac´ı rotac´ı posune zpˇet do poˇca´tku soustavy souˇradnic (hodnoty v posledn´ım sloupci projekˇcn´ı matice jsou nulov´e). Po rotaci se tˇeleso posune zpˇet do p˚ uvodn´ı polohy.
3.2
Pohyb tˇ eles
[4] Vˇetˇsina fyzik´aln´ıch simulac´ı je zaloˇzena na Newtonov´ych pohybov´ych z´akonech, kter´e simuluj´ı pohyb tzv.hmotn´ych bod˚ u (tˇelesa, kter´a maj´ı hmotnost, ale jejichˇz velikost je nulov´a). K simulaci jejich pohybu je zapotˇreb´ı zn´at jejich polohu p = (px , py , pz )T , rychlost v = (vx , vy , vz )T , zrychlen´ı a = (ax , ay , az )T a prvn´ı dva Newtonovy z´akony (tˇret´ı z´akon, z´akon akce a reakce, nen´ı v t´eto simulaci potˇreba). • Z´akon setrvaˇcnosti (prvn´ı Newton˚ uv z´akon): Jestliˇze na tˇeleso nep˚ usob´ı ˇza´dn´e vnˇejˇs´ı s´ıly nebo je v´ yslednice sil nulov´a, pak tˇeleso setrv´av´a v klidu nebo v rovnomˇern´em pˇr´ımoˇcar´em pohybu.
ˇ ´I KAPITOLA 3. SIMULACE PROSTRED
20
• Z´akon s´ıly (druh´ y Newton˚ uv z´akon): Jestliˇze na tˇeleso p˚ usob´ı s´ıla, pak se tˇeleso pohybuje se zrychlen´ım, kter´e je pˇr´ımo u ´mˇern´e p˚ usob´ıc´ı s´ıle a nepˇr´ımo u ´mˇern´e hmotnosti tˇelesa. a=
3.2.1
F m
Z´ akon setrvaˇ cnosti
Tento z´akon ˇr´ık´a, ˇze pokud na tˇeleso nep˚ usob´ı ˇz´adn´e s´ıly, tˇeleso se pohybuje konstantn´ı rychlost´ı a jeho poloha se mˇen´ı pouze v z´avislosti na velikosti rychlosti. V re´aln´em svˇetˇe ale neexistuje situace, kdy by na tˇeleso nep˚ usobila ˇz´adn´a s´ıla (vˇzdy na tˇeleso p˚ usob´ı nˇejak´a, byt’ mal´a, s´ıla, jako napˇr´ıklad gravitaˇcn´ı s´ıla, tˇren´ı, ...). Proto se v nˇekter´ ych simulac´ıch zav´ad´ı promˇenn´a damping, kter´a urˇcuje procentu´aln´ı z˚ ustatek velikosti rychlosti tˇelesa v dalˇs´ım ˇcasov´em okamˇziku. Hodnota 0 ˇr´ık´a, ˇze v dalˇs´ım kroku bude rychlost nulov´a, hodnota 1 naopak naznaˇcuje, ˇze je rychlost konstantn´ı. V naˇs´ı simulaci je hodnota damping rovna jedn´e.
3.2.2
Z´ akon s´ıly
Druh´ y Newton˚ uv z´akon (rovnice 3.5) ˇr´ık´a, ˇze pokud chceme zmˇenit pohyb tˇelesa, mus´ıme na tˇeleso p˚ usobit silou (zmˇena zrychlen´ı tˇelesa). Tento z´akon se ˇcasto simuluje pˇr´ım´ ym nastaven´ım zrychlen´ı tˇelesa F = ma = mp¨
(3.5)
Po u ´pravˇe rovnice 3.5, dost´av´ame rovnici pro v´ ypoˇcet samotn´eho zrychlen´ı ¨= p
3.2.3
1 F m
(3.6)
Aktualizace polohy a rychlosti
Pˇri simulaci pohybu se mus´ı v kaˇzd´em ˇcasov´em okamˇziku aktualizovat poloha tˇelesa p a jeho rychlost p. ˙ Pro aktualizaci polohy se pouˇz´ıv´a rovnice 3.7: ˙ + pnew = pold + pt
1 2 ¨ pt 2
(3.7)
ˇ ´I S´ILA A ZRYCHLEN´I 3.3. GRAVITACN
21
a pro z´akladn´ı aktualizaci rychlosti se pouˇz´ıv´a rovnice 3.8. ¨ p˙ new = p˙ old + pt
(3.8)
V kapitole 3.2.1 byl pops´an mechanismus pro sniˇzov´an´ı rychlosti v kaˇzd´em ˇcasov´em okamˇziku pomoc´ı promˇenn´e damping. Pokud je hodnota damping menˇs´ı neˇz jedna, vyn´asob´ı se touto hodnotou vektor rychlosti. ¨ p˙ new = p˙ old d + pt
(3.9)
V pˇr´ıpadˇe, ˇze je ˇcasov´ y interval h mezi dvˇema ˇcasov´ ymi okamˇziky konstantn´ı, je tato rovnice dostaˇcuj´ıc´ı. V opaˇcn´em pˇr´ıpadˇe, pˇri kol´ıs´an´ı ˇcasov´eho intervalu h, se m˚ uˇze pohybuj´ıc´ı tˇeleso “zadrh´avat”. To vyˇreˇs´ı u ´prava rovnice 3.9 zaˇclenˇen´ım ˇcasu do ˇca´sti rovnice s damping parametrem, ¨ p˙ new = p˙ old dt + pt
3.3
(3.10)
Gravitaˇ cn´ı s´ıla a zrychlen´ı
Gravitaˇcn´ı s´ıla je s´ıla, kterou se vˇsechna tˇelesa navz´ajem pˇritahuj´ı. Jej´ı intenzita kles´a se ˇctvercem vzd´alenost´ı od jej´ıho zdroje a jej´ı dosah je nekoneˇcn´ y. Oblast p˚ usoben´ı graˇ vitaˇcn´ı s´ıly od jednoho tˇelesa se naz´ yv´a gravitaˇcn´ı pole. Casto se za hranici gravitaˇcn´ıho pole ud´av´a oblast, kde jiˇz nen´ı gravitaˇcn´ı s´ıla od tˇelesa mˇeˇriteln´a. Gravitaˇcn´ı s´ılu nejl´epe popisuje obecn´ a teorie relativity, ale v klasick´e fyzice (tˇelesa pohybuj´ıc´ı se rychlostmi znaˇcnˇe menˇs´ımi neˇz je rychlost svˇetla) si vystaˇc´ıme s Newtonov´ym gravitaˇcn´ım z´akonem. Ten ˇr´ık´a, ˇze dvˇe hmotn´a tˇelesa m1 , m2 , kter´a lze aproximovat hmotn´ ymi body, se ve vzd´alenosti r pˇritahuj´ı silou Fg jeˇz se spoˇc´ıt´a podle rovnice 3.11. Fg = G
m1 m2 r2
(3.11)
kde G je gravitaˇcn´ı konstanta, jej´ıˇz hodnota je 6, 67 · 10−11 m3 kg −1 s−2 , m1 a m2 jsou hmotnosti prvn´ıho a druh´eho tˇelesa a r je vzd´alenost mezi tˇelesy. Pro v´ ypoˇcet v´ ysledn´e gravitaˇcn´ı s´ıly p˚ usob´ıc´ı na tˇeleso v soustavˇe s v´ıce neˇz tˇremi tˇelesy se pouˇz´ıv´a metoda N-Body problem[5].
ˇ ´I KAPITOLA 3. SIMULACE PROSTRED
22
3.3.1
N-Body Problem
N-Body Problem m´a za u ´kol odhadnout dr´ahu tˇeles, kter´a se vz´ajemnˇe gravitaˇcnˇe ovlivˇ nuj´ı. Motivac´ı k vyˇreˇsen´ı t´eto u ´lohy byla snaha porozumˇet pohybu Slunce, planet a ostatn´ıch hvˇezd ve vesm´ıru. V˚ ubec prvn´ı matematick´e ˇreˇsen´ı publikoval Isaac Newton v roce 1687 ve sv´em d´ıle Principia. Analyticky byl N-Body problem vyˇreˇsen pro N=2, a pro nˇekter´e speci´aln´ı symetrick´e pˇr´ıpady s N=3, napˇr´ıklad pro 3 pohybuj´ıc´ı se tˇelesa leˇz´ıc´ı na pˇr´ımce nebo ve vrcholech rovnostrann´eho troj´ uheln´ıka. V ostatn´ıch pˇr´ıpadech lze probl´em ˇreˇsit pomoc´ı numerick´eho ˇreˇsen´ı diferenci´aln´ıch rovnic. Nˇekdy lze N-Body problem zjednoduˇsit vypuˇstˇen´ım tˇelesa s malou hmotnost´ı, kter´e gravitaˇcnˇe neovlivˇ nuje alespoˇ n jedno dalˇs´ı tˇeleso. Napˇr´ıklad pˇri ˇreˇsen´ı pohybu soustavy tˇeles Slunce-Zemˇe-Mˇes´ıc lze vypustit Mˇes´ıc, kter´ y prakticky neovlivˇ nuje pohyb Slunce kolem spoleˇcn´eho tˇeˇziˇstˇe soustavy. Vˇsechny tyto metody uvaˇzuj´ı vesm´ırn´a tˇelesa jako dokonale tuh´e a sf´ericky symetrick´e koule a lze je povaˇzovat za hmotn´e body. Matematicky lze zapsat N-Body problem pro N tˇeles s poˇc´ateˇcn´ımi pozicemi qj (0) a rychlostmi q˙j (0) (j = 1,...,n), kde qj (0) ̸= qk (0) pro vˇsechny dvojice tˇeles, jako: mj q¨j = G
∑ mj mk (qk − qj ) k̸=j
|qk − qj |2
, j = 1, ..., n
(3.12)
kde m1 , m2 , ..., mn jsou konstanty reprezentuj´ıc´ı hmotnost tˇeles 1 aˇz n, q1 , q2 ,...,qn jsou vektory pozic tˇeles v ˇcase t a G je gravitaˇcn´ı konstanta. Lev´a strana je souˇcin hmotnosti a zrychlen´ı tˇelesa s indexem j a vyjadˇruje druh´y Newton˚ uv z´akon. Prav´a strana je pak sumou sil p˚ usob´ıc´ıch na tˇeleso j ostatn´ımi tˇelesy a popisuje Newton˚ uv gravitaˇcn´ı z´akon.
3.3.2
Simulace N-Body probl´ emu
Simulace N-Body probl´emu je ˇcasovˇe a v´ ypoˇcetnˇe velice n´aroˇcn´a. Existuje nˇekolik metod simulace[6] od r˚ uzn´ ych autor˚ u. V t´eto kapitole pop´ıˇsi nˇekolik z nich. 3.3.2.1
Particle - Particle
Jde o nejjednoduˇsˇs´ı avˇsak ˇcasovˇe nejn´aroˇcnˇejˇs´ı metodu simulace. Funguje na principu v´ ypoˇctu interakce kaˇzd´eho tˇelesa s ostatn´ımi v syst´emu. Pro N tˇeles tedy prov´ad´ı N (N − 1) operac´ı, coˇz je kvadratick´a sloˇzitost O(N 2 ). Jelikoˇz je zjevn´e, ˇze metoda Particle-Particle poˇc´ıt´a kaˇzdou s´ılu dvakr´at, je moˇzn´e jednoduchou u ´pravou sn´ıˇzit poˇcet operac´ı na polovinu. Algoritmus vylepˇsen´e verze je n´asleduj´ıc´ı:
3.4. DETEKCE KOLIZ´I
23
Algorithm 1 Algoritmus zjednoduˇsen´e verze metody Particle-Particle for i = 1 → N do for j = i + 1 → N do Fi = Fi + Fij Fj = Fj − Fij end for end for Poˇcet operac´ı vylepˇsen´eho algoritmu je
N (N − 1) 2
, sloˇzitost z˚ ust´av´a nad´ale kvadra-
tick´a. Particle-Particle je nejpˇresnˇejˇs´ı metodou, chyba vznik´a jen pˇri numerick´e integraci, napˇr´ıklad pˇri velk´em ˇcasov´em kroku. 3.3.2.2
Particle - Mesh
Metoda zaloˇzen´a na aproximaci polohy tˇelesa v prostoru do mˇr´ıˇzky a poˇc´ıt´an´ı jeho gravitaˇcn´ıho potenci´alu. Z potenci´alu urˇcen´eho mˇr´ıˇzkou se pak vypoˇc´ıt´a gravitaˇcn´ı s´ıla p˚ usob´ıc´ı na okoln´ı tˇelesa. Existuje nˇekolik druh˚ u pˇridˇelovan´ı tˇeles k bod˚ um mˇr´ıˇzky, napˇr´ıklad Nearest-Grid-Point, v nˇemˇz je tˇeleso pˇriˇrazeno k nejbliˇzˇs´ımu bodu mˇr´ıˇzky nebo sloˇzitˇejˇs´ı metoda Cloud-In-Cell, v n´ıˇz m˚ uˇze ˇc´astice souˇcasnˇe patˇrit do nˇekolika bod˚ u mˇr´ıˇzky. Slabinou metody Particle-Mesh je konstantn´ı velikost mˇr´ıˇzky, kter´a v oblastech s velkou hustotou tˇeles zp˚ usobuje velkou odchylku. Tento nedostatek lze vyˇreˇsit pomoc´ı ˇ pˇr´ıdavn´ ych jemnˇejˇs´ıch mˇr´ıˇzek. Casov´ a sloˇzitost je O(N log N ). 3.3.2.3
Particle - Particle, Particle - Mesh
Tato metoda eliminuje nedostatek Particle-Mesh metody (3.3.2.2), a to odchylku v oblastech s velkou hustotou tˇeles. Pro vzd´alen´e tˇelesa pouˇz´ıv´a metodu Particle-Mesh a pro bl´ızˇ k´a tˇelesa metodu Particle-Particle (3.3.2.1). Casov´ a sloˇzitost je stejn´a jako u ParticleMesh a to O(N log N ).
3.4
Detekce koliz´ı
D˚ uleˇzitou souˇca´st´ı simulace je detekce koliz´ı. Jedn´a se o v´ ypoˇcetnˇe n´aroˇcnou operaci, pˇri n´ıˇz se kontroluje vz´ajemn´a poloha vˇsech tˇeles. Pro N tˇeles je tˇreba prov´est N (N − 1) operac´ı a ˇcasov´a sloˇzitost je O(N 2 ). Poˇcet operac´ı lze sn´ıˇzit na polovinu, tj. N (N2 −1) , ˇ jelikoˇz vz´ajemn´a pozice dvou tˇeles se poˇc´ıt´a dvakr´at pro kaˇzdou dvojici. Casov´ a sloˇzitost z˚ ust´av´a kvadratick´a.
ˇ ´I KAPITOLA 3. SIMULACE PROSTRED
24
3.4.1
Reprezentace objekt˚ u a poˇ c´ıt´ an´ı koliz´ı
Pro jednoduˇsˇs´ı poˇc´ıt´an´ı koliz´ı jsou planety, meteority a vesm´ırn´e lodˇe reprezentov´any jako koule a stˇrely jsou reprezentov´any jako body. Tato forma reprezentace umoˇzn ˇuje rychlou a efektivn´ı detekci koliz´ı poˇc´ıt´an´ım vzd´alenosti d mezi dvˇema tˇelesy o1 , o2 podle rovnice (3.13). d=
√ (o1 .x − o2 .x)2 + (o1 .y − o2 .y)2 + (o1 .z − o2 .z)2
(3.13)
Jestliˇze je vzd´alenost d menˇs´ı neˇz souˇcet polomˇer˚ u obou tˇeles, dojde ke kolizi.
3.4.2
Sn´ıˇ zen´ı ˇ casov´ e n´ aroˇ cnosti detekce koliz´ı
Probl´emem detekce koliz´ı je jednak velk´e mnoˇzstv´ı dvojic, pro kter´e se kolize kontroluj´ı a tak´e samotn´a ˇcasov´a n´aroˇcnost algoritmu pro kontrolu koliz´ı. Proto se detekce koliz´ı dˇel´ı do dvou ˇc´ast´ı: • V prvn´ı ˇc´asti se vyberou pouze ta tˇelesa, u nichˇz je sr´aˇzka moˇzn´a. K tomu se pouˇz´ıvaj´ı r˚ uzn´e heuristiky a datov´e struktury jako napˇr´ıklad Bounding Volume Hierarchy, Grid, Multi-Resulution Maps, Quad-Trees a Oct-Trees, • Druh´a ˇca´st se zab´ yv´a samotnou detekc´ı koliz´ı mezi p´ary tˇeles, kter´e byly vybr´any v prvn´ı ˇc´asti v prvn´ı ˇca´sti.
3.5
Lines of sight
Podobn´ y mechanismus jako u detekce koliz´ı lze vyuˇz´ıt i pro v´ ypoˇcet tzv. Lines of sight. Jedn´a se o algoritmus, kter´ y zjist´ı, zda na sebe dvˇe tˇelesa “vid´ı”, neboli zda mezi nimi nen´ı ˇza´dn´a pˇrek´aˇzka. Jedin´ y rozd´ıl je v tom, ˇze se pˇri tom poˇc´ıt´a vzd´ alenost bodu X od roviny ρ. Postup ˇreˇsen´ı je n´asleduj´ıc´ı: • Z´ısk´ame smˇerov´ y vektor u pˇr´ımky p na n´ıˇz leˇz´ı obˇe tˇelesa, tj. rozd´ıl pozic obou tˇeles (3.14) u = (o1 .x − o2 .x, o1 .y − o2 .y, o1 .z − o2 .z)
(3.14)
Tento smˇerov´ y vektor je souˇcasnˇe norm´alov´ ym vektorem roviny ρ kolm´e na pˇr´ımku p
3.5. LINES OF SIGHT
25
• Urˇc´ıme pr˚ useˇc´ık E pˇr´ımky p a roviny ρ. • Spoˇc´ıt´ame vzd´alenost d = |XE| podle vzorce (3.15):
d=
|nx Xx + ny Xy + nz Xz | √ , n2x + n22 + n2z
(3.15)
kde nn jsou jednotliv´e sloˇzky norm´alov´eho vektoru roviny ρ a Xn jsou sloˇzky polohy bodu X. Nakonec zb´ yv´a podle (3.16) zkontrolovat, zda se kolizn´ı tˇeleso p nach´az´ı mezi tˇelesy o1 , o2 , pro nˇeˇz se lines of sight poˇc´ıtaj´ı. Mus´ı platit: o1 .n ≤ p.n ≤ o2 .n ∥ o1 .n ≥ p.n ≥ o2 .n, kde n jsou jednotliv´e sloˇzky polohov´eho vektoru tˇelesa.
(3.16)
26
ˇ ´I KAPITOLA 3. SIMULACE PROSTRED
Kapitola 4 Implementace Hlavn´ım u ´ˇcelem simulace je v´ yvoj program˚ u pomoc´ı GP a jejich testov´an´ı v simulaˇcn´ım prostˇred´ı. Jelikoˇz je urˇcena hlavnˇe k pˇresn´emu v´ ypoˇctu pohybu tˇeles, jedn´a se o simulaci, kter´a uvaˇzuje konstantn´ı ˇcasov´y interval h mezi dvˇema ˇcasov´ ymi okamˇziky (vol´an´ı metody pro fyzik´aln´ı v´ ypoˇcty). Tzn. mezi dvˇema ˇcasov´ ymi okamˇziky ubˇehne v simulaci vˇzdy jedna ˇcasov´a jednotka. Simulace pouˇz´ıv´a grafickou knihovnu JOGL (4.1.1) a je optimalizovan´a pro dvou j´adrov´ y procesor. Jedno vl´akno se star´a o grafiku a druh´e vl´akno obstar´av´a fyzik´aln´ı v´ ypoˇcty. Pˇri spuˇstˇen´em GP je aktivn´ı pouze jedno vl´akno (fyzik´aln´ı v´ ypoˇcty prob´ıhaj´ı v jin´ y ˇcas neˇz samotn´e GP). Grafika a fyzika jsou psan´e pro trojrozmˇern´e prostˇred´ı (4.2) a slouˇz´ı hlavnˇe k vizualizaci v´ ysledk˚ u. Pro u ´spˇeˇsn´e spuˇstˇen´ı simulace je potˇreba nˇekolik vstupn´ıch soubor˚ u (4.5) a program m˚ uˇze generovat nˇekolik soubor˚ u s informacemi o pohybu vesm´ırn´ ych tˇeles nebo o pr˚ ubˇehu evoluce. Program vyuˇz´ıv´a vlastn´ı implementaci GP (4.3) inspirovanou knihovnou JGAP (4.1.2), s moˇznost´ı pouˇz´ıt r˚ uzn´e genetick´e oper´atory (4.3.3). Kaˇzd´ y uzel m´a n´avratovou hodnotu double, kter´a se pouˇz´ıv´a pro interpretaci v´ ysledku programu, vyvinut´em pomoc´ı GP. Pˇred spuˇstˇen´ım samotn´e simulace, lze nastavit parametry vizualizace a GP pomoc´ı menu (4.7) nebo v souboru Settings.java (4.6).
4.1 4.1.1
Knihovny Grafick´ e knihovny
V´ ybˇer grafick´e knihovny je omezen programovac´ım jazykem, v nˇemˇz je dan´ y program psan´ y. Jelikoˇz program Universe3D je naps´an v jazyce Java, pˇripadaj´ı v u ´vahu tyto 27
28
KAPITOLA 4. IMPLEMENTACE
knihovny: • JOGL1 je open source knihovna, kter´a umoˇzn ˇuje pouˇz´ıvat grafickou knihovnu OpenGL[7] v jazyce Java. Umoˇzn ˇuje pˇr´ıstup k funkc´ım tˇr´ıd GL a GLU. Naopak neumoˇzn ˇuje pˇr´ıstup k funkc´ım tˇr´ıdy GLUT, ale vyuˇz´ıv´a javovsk´e AWT a Swing syst´emy. • Java3D2 je plnˇe objektov´a grafick´a knihovna, vyv´ıjen´a pˇr´ımo pro platformu Java. Je postavena na z´akladech OpenGL nebo DirectX. Jej´ı nev´ yhodou je vˇetˇs´ı pamˇet’ov´a n´aroˇcnost neˇz u JOGL. • jMonkeyEngine33 je relativnˇe nov´a knihovna (2010) zaloˇzen´a na OpenGL.
4.1.2
Knihovny pro genetick´ e programov´ an´ı
Existuje nˇekolik knihoven, implementuj´ıc´ıch r˚ uzn´e druhy genetick´eho programov´an´ı a mnoho z nich je ps´ano pro Javu, uvedu nˇekter´e z nich: • JGAP4 - Velice rozs´ahl´a knihovna, kter´a ovl´ad´a jak genetick´e algoritmy, tak i genetick´e programov´an´ı. Nab´ız´ı hned nˇekolik tutori´al˚ u a kvalitn´ı dokumentaci. Fungov´an´ı JGAP je velice jednoduch´e. Nev´ yhodou je sloˇzitost zaˇclenˇen´ı do vlastn´ıho programu. • ECJ5 - Dalˇs´ı rozs´ahl´a knihovna, kter´a um´ı strongly-typed GP s moˇznost´ı paralelizace. • JGProg6 - Knihovna pro strongly-typed GP. Jej´ı v´ yvoj se bohuˇzel zastavil v roce 2000.
4.2
Pohyb tˇ eles
Pohyb tˇeles je ˇreˇsen mechanismem, popsan´ ym v kapitole 3.2. V simulaci se vyskytuj´ı dva druhy zrychlen´ı: zrychlen´ı e generovan´e motory lodi, a gravitaˇcn´ı zrychlen´ı g. Celkov´e 1
Java Binding For OpenGL, http://jogamp.org/jogl/www/ http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138252.html 3 http://jmonkeyengine.com/ 4 Java Genetic Algorithms Package, http://jgap.sourceforge.net/ 5 http://cs.gmu.edu/ eclab/projects/ecj/ 6 http://jgprog.sourceforge.net 2
4.3. IMPLEMENTACE GP
29
zrychlen´ı a je rovno souˇctu tˇechto dvou vektor˚ u. a = e + g;
(4.1)
• Motory - Zrychlen´ı e generovan´e motory lodi je nastavovan´e pˇr´ımo a jeho hodnota je 0.0035 d´elkov´ ych jednotek za druhou mocninu ˇcasu. Smˇer zrychlen´ı je stejn´ y s orientac´ı lodi. Stejn´ y mechanismus je pouˇzit pro zpomalen´ı. • Gravitaˇcn´ı zrychlen´ı - V simulaci se m˚ uˇze nach´azet ˇr´adovˇe des´ıtky tˇeles a proto se hodnota g poˇc´ıt´a z´akladn´ı metodou Particle-Particle (N-Body Problem kapitola 3.3.2.1). Kaˇzd´a rotace a zmˇena rychlosti spotˇrebuj´ı urˇcit´e mnoˇzstv´ı paliva.
4.3
Implementace GP
Implementace GP je inspirovan´a knihovnou JGAP (4.1.2). Kaˇzd´ y strom (individu´al) je uloˇzen jako ArrayList jednotliv´ ych uzl˚ u a koˇren je uzel s indexem nula. Cel´a populace je uloˇzena v poli ArrayLit˚ u o velikosti populace. Strom je proch´azen pomoc´ı rekurzivn´ıho prohled´av´an´ı do hloubky od koˇrene. Tˇr´ıdy pro GP se nach´azej´ı v bal´ıku gp: • Node - Abstraktn´ı tˇr´ıda reprezentuj´ıc´ı uzel stromu a metody pro interakci mezi uzly. Uzly se dˇel´ı na termin´aly a funkce a kaˇzd´ y druh uzlu je reprezentov´an vlastn´ı tˇr´ıdou. • Tree - Tˇr´ıda reprezentuj´ıc´ı strom jako ArrayList uzl˚ u. Obsahuje metody pro inicializaci a u ´pravy stromu. • Forest - Les skl´adaj´ıc´ı se z nˇekolika strom˚ u (podle typu experimentu). Tato tˇr´ıda reprezentuje individu´al v populaci a je Comparable, kv˚ uli porovn´av´an´ı a ˇrazen´ı individu´al˚ u v populaci podle jejich hodnoty fitness. • Population - Pole individu´al˚ u (les˚ u), neboli populace. Tˇr´ıda se star´a o generov´an´ı populace a jej´ı v´ yvoj za pomoci genetick´ ych oper´ator˚ u. • BestIndividual - Nejlepˇs´ı individu´al, vytvoˇren´ y pomoc´ı GP. Obsahuje metodu pro interpretaci v´ ysledk˚ u z jednotliv´ ych strom˚ u v z´avislosti na druhu experimentu.
30
KAPITOLA 4. IMPLEMENTACE • Mutation, Crossover a Selection - Statick´e tˇridy obsahuj´ıc´ı implementaci genetick´ ych oper´ator˚ u.
Diagramy tˇr´ıd pro GP v programu Universe3D jsou zn´azornˇeny na obr´azc´ıch 4.1, 4.2 a 4.3.
Obr´azek 4.1: Diagram tˇr´ıd pro GP.
4.3. IMPLEMENTACE GP
Obr´azek 4.2: Diagram tˇr´ıd reprezentuj´ıc´ı uzly.
Obr´azek 4.3: Diagram tˇr´ıd reprezentuj´ıc´ı experimenty.
31
32
KAPITOLA 4. IMPLEMENTACE
4.3.1
Evoluce
Program rozliˇsuje evoluci s crossover oper´atorem (algoritmus 2) a bez nˇej (algoritmus 3). Je to proto, ˇze pˇri mal´ ych rozmˇerech strom˚ u doch´az´ı ke kˇr´ıˇzen´ı v jejich koˇrenech a nebo v uzlech a v´ ysledn´ı potomci jsou kopiemi rodiˇc˚ u. To vede k velmi rychl´e konvergenci populace a je tedy tˇreba odliˇsn´ y algoritmus. Pˇri pouˇzit´ı crossoveru oper´atoru jsou do n´asleduj´ıc´ı generace potomk˚ u (offsprings) vˇzdy vybr´ani dva nejlepˇs´ı individu´alov´e ze ˇctveˇrice (o1 , o2 , p1 , p2 ). Pokud crossover oper´ator nen´ı pouˇzit, je pcross = 0 a pmut = 1 a mutaˇcn´ı oper´ator je subtree mutation. Algorithm 2 Pr˚ ubˇeh v´ yvoje jedn´e generace bez crossover oper´atoru Vstup: velikost populace N P arents ← initP opulaci(N ); Execute(P arents); while c´ılov´e podm´ınky nesplnˇeny do for i = 0 → N do p ← Selection(P arents); o ← M utation(p); o.f itness ← 0.0; if kontrola bloatu povol´ı o then o.f itness ← vyhodnot(o); end if Of f springs.add(o); end for Sort(Of f springs); P arents = vyberN ejlepsi(P arents, Of f springs); end while
4.3.2
Termin´ aly a funkce
Vˇsechny uzly pouˇz´ıvan´e v GP maj´ı n´avratov´ y typ double a kaˇzd´ y druh uzlu m´a vlastn´ı specifickou tˇr´ıdu, urˇcuj´ıc´ı jeho n´azev, aritu a n´avratovou funkci. Arita funkˇcn´ıch uzl˚ u je r˚ uzn´a, maxim´alnˇe vˇsak rovna ˇctyˇrem. Mnoˇziny termin´al˚ u a funkc´ı lze nastavit bud’ v menu pro genetick´e programov´an´ı (4.7.2) a nebo v souboru Settings.java.
4.3. IMPLEMENTACE GP
Algorithm 3 Pr˚ ubˇeh v´ yvoje jedn´e generace s crossover oper´atorem Vstup: velikost populace N P arents ← initP opulaci(N ); Execute(P arents); for i = 0 → N/2 do (p1 , p2 ) ← Selection(P arents); if M ath.random() < pcross then (o1 , o2 ) ← Crossover(p1 , p2 ); end if if M ath.random() < pmut then (o1 , o2 ) ← M utation(o1 , o2 ); end if if o1 .equals(p1 )∥∥o1 .equals(p2 ) then o1 ← SubT reeM utation(o1 ); o2 ← SubT reeM utation(o2 ); end if o1 .f itness ← 0.0; o2 .f itness ← 0.0; if kontrola bloatu povol´ı o1 then o1 .f itness ← vyhodnot(o1 ); end if if kontrola bloatu povol´ı o2 then o2 .f itness ← vyhodnot(o2 ); end if (b1 , b2 ) ← vyberN ejlepsi(o1 , o2 , p1 , p2 ); Of f springs.add(b1 ); Of f springs.add(b2 ); P arents ← Of f rings end for
33
34
KAPITOLA 4. IMPLEMENTACE
Mnoˇzina funkc´ı se skl´ad´a ze z´akladn´ıch matematick´ ych operac´ı a funkc´ı a d´ale dvou funkc´ı implementuj´ıc´ıch podm´ınku: • Add: (a + b). • Sub: (a - b). • Mul: (a * b). • Div: if (b == 0) return 1 else return (a / b). Tzv. protected divide. • Sin: Math.sin(a). • Atan: Math.atan(a). • Log: Math.log(a). • Abs: Math.abs(a). • Sqrt: Math.sqrt(a). • YnaryMinus: a*(-1). • IfCollide: if (tˇeleso je na kolizn´ım kurzu s planetou) return a else return b. Pozn´ amka: Pokud je lod’ od planety daleko (trojn´asobek jej´ıho pr˚ umˇeru), kolizn´ı kurz se nepoˇc´ıt´a.
2
• Iflet: if (a ̸= b) return c else return d. • Min: Math.min(a, b). • Max: Math.max(a, b). Mnoˇzina termin´al˚ u: • Constant: N´ahodnˇe generovan´a konstanta. • Speed: Rychlost tˇelesa. Kromˇe u ´lohy Fire2D, v n´ıˇz je tento uzel roven rychlosti terˇce, vrac´ı rychlost lodi. • Distance: Vzd´alenost dvou tˇeles. • Gravitation: Velikost vektoru gravitaˇcn´ıho zrychlen´ı p˚ usob´ıc´ı na tˇeleso.
4.3. IMPLEMENTACE GP
35
• One: Vrac´ı hodnotu jedna. • PI: Math.PI. ´ • AngleDiff: Uhel mezi smˇerov´ ym vektorem tˇelesa a pˇr´ımkou, danou polohou tˇelesa a terˇce. Podle znam´enka n´avratov´e hodnoty lze zjistit, kter´a rotace zmenˇs´ı tento u ´hel. Z´aporn´a hodnota ˇr´ık´a, ˇze tˇeleso je potˇreba natoˇcit doprava. Tento uzel je funkˇcn´ı jen pro dvourozmˇern´e prostˇred´ı. ´ • CollisionAngle: Uhel pro natoˇcen´ı lodi od kolizn´ıho tˇelesa. Tento uzel je funkˇcn´ı jen pro dvourozmˇern´e prostˇred´ı. • NearestPlanet: Vr´at´ı index planety, kter´a je k lodi nejbl´ıˇze.
4.3.3
Genetick´ e oper´ atory
V programu si lze vybrat z nˇekolika jiˇz implementovan´ ych genetick´ ych oper´ator˚ u um´ıstˇen´ ych ve statick´ ych tˇr´ıd´ach Mutation, Crossover a Selection. Jednoduˇse lze pˇripsat dalˇs´ı statickou metodu pro nov´ y genetick´ y oper´ator. Mutace: • Subtree mutation - Mutace nahrad´ı zvolen´ y podstrom nov´ ym, n´ahodnˇe vygenerovan´ ym stromem. Nov´ y strom je vˇzdy generov´an metodou grow (2.2). Omezen´ım maxim´aln´ı hloubky stromu je zaruˇceno, ˇze tento oper´ator nezp˚ usob´ı r˚ ust individu´al˚ u nad maxim´aln´ı stanovenou velikost. • Node replacement mutation - Mutace nahrad´ı n´ahodnˇe zvolen´ y uzel stromu za jin´ y n´ahodnˇe vygenerovan´ y uzel se stejnou aritou. Tato mutace nezp˚ usobuje zmˇenu velikosti stromu. Crossover: • One-point crossover - Crossover pointy obou strom˚ u vybere z common regionu (2.6) a prohod´ı podstromy. • Common crossover - Crossover pointy jsou na obou stromech zvoleny n´ahodnˇe. Tento oper´ator m˚ uˇze vytvoˇrit strom, kter´ y pˇres´ahne maxim´aln´ı povolenou hloubku. Selekce:
36
KAPITOLA 4. IMPLEMENTACE • Tournament selection - N´ahodnˇe vybere N individu´al˚ u z nichˇz pot´e vybere nejlepˇs´ı. Velikost N lze nastavit promˇennou TOURNAMENT SIZE v souboru Settings.java • Roulette wheel selection - Pravdˇepodobnost v´ ybˇeru individu´alu je z´avisl´a na jeho fitness hodnotˇe 2.5. • Random selection - Individu´al je vybr´an n´ahodnˇe.
4.4
Ovl´ ad´ an´ı
Pohyb lodi a kamery a nˇekter´e dalˇs´ı funkce simulace lze ovl´adat z kl´avesnicov´eho vstupu. ↑↓
Zrychlen´ı.
←→
Yaw rotace.
Z, X
Pitch rotace.
C, V
Roll rotace.
G
Stˇrelba.
Q, E
Kamera zoom in/out.
L
Zobrazov´an´ı LOS.
T
Vykreslov´an´ı trajektorie lod´ı.
I
Vypne/zapne pohled z prvn´ı osoby. Kamera zamˇeˇrena na lod’ s indexem nula.
K
Vypne/zapne pohled ze tˇret´ı osoby. Kamera zamˇeˇrena na lod’ s indexem nula.
J
Vypne/zapne pohled ze tˇret´ı osoby. Kamera zamˇeˇrena na lod’ s indexem nula.
R
Restart simulace.
P
N´ahodn´ y restart simulace.
M, N
Zv´ yˇsen´ı/sn´ıˇzen´ı poˇctu polygon˚ u tvoˇr´ıc´ıch planety, meteory a terˇce. Tabulka 4.1: Ovl´ad´an´ı simulace.
4.5
Soubory
Simulace potˇrebuje ke sv´emu bˇehu nˇekolik vstupn´ıch soubor˚ u a z´aroveˇ n jsou schopny generovat nˇekolik soubor˚ u v´ ystupn´ıch.
4.5. SOUBORY
4.5.1
37
Vstupn´ı soubory
K bˇehu programu Universe3D jsou potˇreba tˇri soubory: ships.txt, meteors.txt, planets.txt, kter´e definuj´ı tˇelesa, vyskytuj´ıc´ı se v simulaci a uˇzivatel m˚ uˇze mˇenit jejich poˇcet i nastaven´ı. Bez tˇechto soubor˚ u se program nespust´ı. Pro kaˇzd´ y soubor plat´ı, ˇze jedno tˇeleso je definov´ano na jednom ˇra´dku. Zakonˇcovac´ı znak je znak pro nov´ y ˇra´dek. Za koment´aˇr se povaˇzuje kaˇzd´ y ˇra´dek, kter´ y zaˇc´ın´a znakem ’#’. Jako konec souboru je br´an pr´azdn´y ˇr´ adek. Pokud chce uˇzivatel pro zpˇrehlednˇen´ı souboru um´ıstit pr´azdn´ y ˇr´adek do textu, je ˇ ısla jsou oddˇelena nutn´e zapsat ho jako koment´aˇr, tzn. ˇra´dek obsahuj´ıc´ı jen znak ’#’. C´ mezerou. Je tˇreba dodrˇzovat tato pravidla spolu s form´atov´an´ım pro dan´e tˇeleso jinak dojde k chybˇe v parsov´an´ı a program se ukonˇc´ı! Form´aty vstupn´ıch soubor˚ u jsou n´asleduj´ıc´ı: • soubor ships.txt – Tˇri ˇc´ısla typu double pro polohov´ y vektor lodi. – Tˇri ˇc´ısla typu double pro u ´hly rotac´ı roll, pitch a yaw. – Tˇri ˇc´ısla typu double pro vektor poˇc´ateˇcn´ı rychlosti lodi. • soubor meteors.txt – Tˇri ˇc´ısla typu double pro polohov´ y vektor meteoru. – Tˇri ˇc´ısla typu double pro vektor poˇc´ateˇcn´ı rechlosti meteoru. – Cel´e ˇc´ıslo pro pr˚ umˇer meteoru (km). – Hmotnost meteoru (kg 1024 ). – N´azev textury meteoru. • soubor planets.txt – Index planety typu integer. Index planety nesm´ı pˇres´ahnout hodnotu N-1, kde N je poˇcet planet v simulaci. – Tˇri ˇc´ısla typu double pro polohov´ y vektor planety. – Tˇri ˇc´ısla typu double pro vektor poˇc´ateˇcn´ı rychlosti planety. – Pr˚ umˇer planety (km). – Hmotnost planety (kg 1024 ).
38
KAPITOLA 4. IMPLEMENTACE – Index mateˇrsk´e planety typu integer, kolem n´ıˇz bude tato planeta ob´ıhat. Pokud je hodnota rovna -1 nebo je index shodn´ y s indexem planety, znamen´a to, ˇze planeta nem´a definovanou svou mateˇrskou planetu. – N´azev textury.
4.5.2
V´ ystupn´ı soubory
Informace o pr˚ ubˇehu simulace a GP lze ukl´adat do v´ ystupn´ıch soubor˚ u. Tvorbu nˇekter´ ych v´ ystupn´ıch soubor˚ u lze zak´azat, jin´e se naopak vytvoˇr´ı pˇri kaˇzd´em bˇehu simulace. • Trajektorie lod´ı - Soubor ve form´atu pro MatLab nach´azej´ıc´ı se ve sloˇzce ShipRoutes, kter´ y m´a uloˇzen´e informace o pozici lodi a jej´ı rychlosti. D´ale obsahuje script, kter´ y vr´at´ı trojrozmˇern´ y graf s trajektori´ı lodi. Tento v´ ystupn´ı soubor je nepovinn´ y a lze jej zak´azat pomoc´ı promˇenn´e WRITE SHIP POSITIONS INTO FILE v souboru Setting.java. • Pr˚ ubˇeh evoluce - Soubor pro MatLab obsahuj´ıc´ı informace o v´ yvoji nejlepˇs´ı fitness a pr˚ umˇern´e fitness cel´e populace spolu se scripty na zobrazen´ı r˚ uzn´ ych statistik do grafu. Soubor se vygeneruje vˇzdy, kdyˇz je spuˇstˇeno GP. • Seznam individu´al˚ u v populaci Povinn´e soubory (pokud je zapnut´e GP). Pro kaˇzdou generaci je urˇcen jeden textov´ y soubor, kter´ y obsahuje nastaven´ı parametr˚ u a oper´ator˚ u GP a v´ yˇcet individu´al˚ u v populaci spolu s jejich fitness hodnotou. Tyto soubory lze vyuˇzit k naˇcten´ı populace a pokraˇcovat v evoluci. • Nejlepˇs´ı individu´al - Povinn´e soubory (pokud je zapnut´e GP), kter´e obsahuj´ı informace o nejlepˇs´ıch individu´alech nalezen´ ych bˇehem evoluce. Tyto soubory lze opˇetovnˇe naˇc´ıst jako program ovl´adaj´ıc´ı lod’.
4.6
Moˇ znosti nastaven´ı
Program nab´ız´ı mnoho moˇzn´ ych nastaven´ı pro vizualizaci, vlastnost´ı lodi i genetick´eho programov´an´ı. Toto nastaven´ı se nach´az´ı ve tˇr´ıdˇe Universe3D.Settings. Mnoho moˇznost´ı lze nastavit pˇr´ımo z menu (4.7) pˇred spuˇstˇen´ım samotn´e simulace.
ˇ 4.6. MOZNOSTI NASTAVEN´I
4.6.1
39
Nastaven´ı vizualizace
Toto nastaven´ı se projev´ı pouze tehdy bude-li program spuˇstˇen vizualizac´ı. • boolean VISUALISATION - Moˇznost pustit program s vizualizac´ı. Vizualizace je dobr´a pro shl´ednut´ı v´ ysledk˚ u genetick´eho programov´an´ı. Naopak pro samotn´e GP nen´ı potˇreba a jen zpomaluje jeho bˇeh. • int GRAPHIC QUALITY - Poˇcet polygon˚ u, z nichˇz se skl´ad´a kaˇzd´a koule v simulaci. Toto ˇc´ıslo velice ovlivˇ nuje rychlost vizualizace. • boolean FIND OPTIMAL RESOLUTION - Program nalezne optim´aln´ı hodnotu promˇenn´e GRAPHIC QUALITY na z´akladˇe hodnoty FPS. • boolean DRAW SHIP ROUTES - Vykreslov´an´ı trajektorie lod´ı. • boolean SHOW FPS - Zobrazov´an´ı poˇctu vykreslen´ ych sc´en za vteˇrinu. • boolean SHOW LOS - Moˇznost zobrazovat spojnice mezi vˇsemi dvojicemi lod´ı, pokud se mezi dvojic´ı lod´ı nevyskytuje ˇza´dn´a pˇrek´aˇzka.
4.6.2
Nastaven´ı pro lodˇ e
• int VISIBLE DISTANCE - Vzd´alenost, pro kterou se poˇc´ıtaj´ı LOS (3.5). • int WEAPONS RANGE - Dolet stˇrely. • double SHOT SPEED - Rychlost stˇrel. ˇ • double SHOOTING FREQUENCY - Casov´ a prodleva mezi dvˇema v´ ystˇrely. ´ • double SHIP ROTATION STEP - Uhel pootoˇcen´ı za jeden krok. • double SHIP SPEED STEP - Maxim´aln´ı zmˇena tahu motor˚ u lodi mezi dvˇema ˇcasov´ ymi okamˇziky. • double SHIP MAX SPEED - Maxim´aln´ı moˇzn´a rychlost lodi, dosaˇziteln´a pomoc´ı motor˚ u. P˚ usoben´ım gravitaˇcn´ıch sil na lod’ m˚ uˇze b´ yt tato hodnota pˇrekroˇcena.
40
KAPITOLA 4. IMPLEMENTACE
4.6.3
Konstanty
Konstanty jsou v programu zavedeny proto, aby simulace byla rychlejˇs´ı a odehr´avala se v menˇs´ım prostoru. Jejich nastaven´ı je v´ ysledkem experiment˚ u a prostˇred´ı je na jejich zmˇenu velice citliv´e, proto se nedoporuˇcuje jejich hodnoty mˇenit. • int SIZE SCALE - Tato konstanta upravuje velikost tˇeles. Jelikoˇz je velikost tˇelesa zad´av´ana jako pr˚ umˇer koule v kilometrech (u planet se velikosti pohybuj´ı ˇr´adovˇe v tis´ıc´ıch kilometr˚ u), je tˇreba toto ˇc´ıslo zmenˇsit tak, aby byla v´ ysledn´a velikost tˇeles vhodn´a pro grafick´e prostˇred´ı. • double DISTANCE SCALE - Konstanta upravuj´ıc´ı vzd´alenost. • double WEIGHT SCALE - Upravuje v´ahu objekt˚ u. • double SATELITE GRAVITY SCALE - Konstanta upravuj´ıc´ı velikost gravitaˇcn´ı s´ıly, kterou p˚ usob´ı planeta na sv˚ uj pˇr´ırodn´ı satelit.
4.6.4
Nastaven´ı pro GP
Nejd˚ uleˇzitˇejˇs´ı promˇenn´e v programu, t´ ykaj´ıc´ı se nastaven´ı parametr˚ u pro GP. Vˇetˇsinu tˇechto promˇenn´ ych lze nastavit v u ´vodn´ım menu programu. • boolean GENETIC PROGRAMMING - Promˇenn´a urˇcuje, bude-li spuˇstˇeno GP. Pokud je tato hodnota promˇenn´e true, doporuˇcuje se promˇennou VISUALISATION (4.6.1) nastavit na false kv˚ uli rychlosti bˇehu samotn´eho GP. • int POPULATION SIZE - Velikost populace. • boolean INITIAL GROW METHOD - Pˇri generov´an´ı nov´ ych individu´al˚ u bude pouˇzit´a metoda grow (2.2). • boolean INITIAL FULL METHOD - Pˇri generov´an´ı nov´ ych individu´al˚ u bude pouˇzit´a metoda full. Pozn´ amka: Pokud maj´ı obˇe promˇenn´e INITIAL GROW METHOD a INITIAL FULL METHOD hodnotu false, je pˇri generov´an´ı individu´al˚ u pouˇzita metoda Ramped half-and-half. • int NUMBER OF GENERATIONS - Poˇcet generac´ı, po kter´ y GP pobˇeˇz´ı.
2
ˇ 4.6. MOZNOSTI NASTAVEN´I
41
• int GP MIN DEPTH - Minim´aln´ı hloubka individu´al˚ u. • int GP MAX DEPTH - Maxim´aln´ı hloubka individu´al˚ u. • boolean SUBTREE MUTATION - Mutaˇcn´ı oper´ator bude subtree mutation (2.7). • boolean NODE REPLACEMENT MUTATION - Mutaˇcn´ı oper´ator bude node replacement mutation. Pozn´ amka: Nelze pouˇz´ıt v´ıce mutaˇcn´ıch oper´ator˚ u pˇri bˇehu GP, tj. pr´avˇe jedna z promˇenn´ ych NODE REPLACEMENT MUTATION a SUBTREE MUTATION mus´ı m´ıt hodnotu true, ostatn´ı pak hodnotu false, jinak vznikne chyba a program se ukonˇc´ı.
2
• boolean TOURNAMENT SELECTION - Jako selekˇcn´ı oper´ator bude pouˇzita turnajov´a selekce (2.5) • boolean ROULETTE SELECTION - Jako selekˇcn´ı oper´ator bude pouˇzita roulette wheel selection. • boolean RANDOM SELECTION - Individu´al pro aplikov´an´ı genetick´ ych oper´ator˚ u bude vybr´an n´ahodnˇe. • boolean DETERMINISTIC SELECTION - Bˇehem evoluce jedn´e generace bude vybr´an kaˇzd´ y rodiˇcovsk´ y individu´al pr´avˇe jednou. Pozn´ amka: Nelze pouˇz´ıt pˇri bˇeˇehu GP nˇekolik selekˇcn´ıch oper´ator˚ u najednou, tj. pr´avˇe jedna z promˇenn´ ych TOURNAMENT SELECTION, ROULETTE SELECTION, RANDOM SELECTION a DETERMINISTIC SELECTION mus´ı m´ıt hodnotu true, ostatn´ı pak hodnotu false, jinak vznikne chyba a program se ukonˇc´ı.
2
• int TOURNAMENT SIZE - Poˇcet individu´al˚ uu ´ˇcastn´ıc´ıch se turnajov´e selekce. • boolean TARPEIAN METHOD - Kromˇe kontroly hloubky individu´al˚ u bude pro kontrolu bloatu (2.9) pouˇzita i Tarpeian metoda. • double TARPEIAN PROB - Pravdˇepodobnost s niˇz Tarpeian metoda vylouˇc´ı individu´al, jehoˇz velikost je vˇetˇs´ı neˇz pr˚ umˇern´a velikost individu´al˚ u v populaci. • boolean [jmeno] NODE - Napˇr´ıklad ADD NODE, SUB NODE,... urˇcuj´ı, zda bude konkr´etn´ı uzel pouˇzit pˇri GP.
42
KAPITOLA 4. IMPLEMENTACE • boolean USE INDIVIDUAL - Naˇcte jiˇz vytvoˇren´ y ˇr´ıdic´ı program pomoc´ı GP a t´ımto program bude ovl´adan´a lod’. Pozn´ amka: Pokud je tato promˇenn´a true, nesm´ı b´ yt souˇcasnˇe true promˇenn´a GENETIC PROGRAMMING.
2
• String BEST INDIVIDUAL - Cesta k uloˇzen´emu ˇr´ıdic´ımu programu.
4.6.5
Nastaven´ı v´ ystup˚ u
• boolean WRITE SHIP POSITIONS INTO FILE - Trajektorie lod´ı bude zapsan´a do souboru. • boolean PRINT SIMULATION INFORMATION - Vypisuje informace o dˇen´ı v simulaˇcn´ım prostˇred´ı. • boolean PRINT GENETIC INFORMATION - Vypisuje informace o pr˚ ubˇehu genetick´eho programovan´ı.
4.7
Menu
Program Universe3D obsahuje menu pro nastaven´ı r˚ uzn´ ych parametr˚ u. U tlaˇc´ıtek se nach´azej´ı popisky, kter´e ukazuj´ı aktu´aln´ı nastaven´ı dan´e poloˇzky. Po spuˇstˇen´ı simulace parametry nelze mˇenit. Menu se skl´ad´a z nˇekolika ˇca´st´ı: main menu (4.7.1), genetic programming menu (4.7.2) a best evolved individual menu (4.7.3). Kaˇzd´a z nich je reprezentovan´a vlastn´ı tˇr´ıdou a je dˇelen´a na nˇekolik podtˇr´ıd.
4.7.1
Main menu
V hlavn´ım menu se nach´azej´ı tyto volby: • Visualisation - Moˇznost vypnout nebo zapnout vizualizaci instance programu Universe3D. • Genetic programming - Vypne nebo zapne genetick´e programov´an´ı. Pˇri povolen´ı genetick´eho programov´an´ı se zpˇr´ıstupn´ı poloˇzka Genetic programming settings.
4.8. SCREENSHOTY ZE HRY
43
• Genetic programming settings - Otevˇre menu pro nastaven´ı parametr˚ u genetick´eho programov´an´ı (4.7.2). • Use evolved individual - Vesm´ırn´a lod’ bude ovl´adan´a pomoc´ı programu, vytvoˇren´eho genetick´ ym programov´an´ım. Pokud je zvolena tato moˇznost, nelze zapnout genetick´e programov´an´ı! • Load evolved individual - Menu pro naˇcten´ı programu ovl´adaj´ıc´ıho lod’. • Start program - Spust´ı samotnou simulaci. • Exit program - Ukonˇc´ı program.
4.7.2
Genetic programming menu
Toto menu slouˇz´ı k nastaven´ı parametr˚ u pro genetick´e programov´an´ı. • Genetic task - V´ ybˇer mezi jednotliv´ ymi u ´lohami pro genetick´e programov´an´ı. • Population size - Nastaven´ı velikosti populace. • Evolution parameters - Nastaven´ı ostatn´ıch parametr˚ u jako: maxim´aln´ı hloubka strom˚ u, inicializaˇcn´ı metoda, oper´atory kˇr´ıˇzen´ı a mutace a jejich pravdˇepodobnost pouˇzit´ı a metoda pro kontrolu bloatu. • Select nodes - V´ ybˇer termin´aln´ıch a funkˇcn´ıch symbol˚ u. • Load evulution - Naˇcte uloˇzenou populaci i s parametry ze souboru.
4.7.3
Best evolved individual menu
Toto menu umoˇzn ˇuje nahr´at uloˇzen´ y individu´al, vytvoˇren´ y pomoc´ı genetick´eho programov´an´ı. Pomoc´ı tohoto individu´alu bude ovl´adan´a lod’ s indexem nula.
4.8
Screenshoty ze hry
V t´eto kapitole jsou grafick´e uk´azky programu Universe3D.
44
KAPITOLA 4. IMPLEMENTACE
Obr´azek 4.4: Planety.
Obr´azek 4.5: Lod’ a meteor.
Obr´azek 4.6: Uk´azka pohybu lodi v gravitaˇcn´ım poli bez pouˇzit´ı motor˚ u.
4.8. SCREENSHOTY ZE HRY
´ Obr´azek 4.7: Uvodn´ ı menu a menu pro nataven´ı parametr˚ u GP.
45
46
KAPITOLA 4. IMPLEMENTACE
Kapitola 5 Experimenty a diskuse V t´eto kapitole je pops´ano nastaven´ı simulaˇcn´ıho prostˇred´ı pro GP (5.1) a d´ale jsou zde v´ ysledky a diskuse nad jednotliv´ ymi experimenty (5.2).
5.1
Nastaven´ı simulaˇ cn´ıho prostˇ red´ı
Vˇsechny experimenty se prov´adˇej´ı pˇri stejn´em nastaven´ı simulaˇcn´ıho prostˇred´ı, kter´e je uvedeno v n´asleduj´ıc´ım seznamu: • Konstanty – WEIGHT SCALE = 300.10−3 – SIZE SCALE = 1000 – DISTANCE SCALE = 11e11 – SATELITE GRAVITY SCALE = 10e18 • Lod – SHIP ROTATION STEP = 0.7◦ – SHIP SPEED STEP = 0.0035km.s−2 – SHIP MAX SPEED = 1.0km.s−1 – SHOOTING FREQUENCY = 0.2 – SHOT SPEED = 2.0km.s−1 47
48
KAPITOLA 5. EXPERIMENTY A DISKUSE – VISIBLE DISTANCE = 100 km – WEAPONS RANGE = 100 km
Pozn´ amka: Pro konverzi jednotek berme kilometr jako vzd´alenost jedna v simulaˇcn´ım prostˇred´ı a vteˇrinu jako interval mezi dvˇema ˇcasov´ ymi okamˇziky.
5.2
2
Experimenty
Jelikoˇz je pohyb v trojrozmˇern´em prostoru d´ıky rotac´ım matematicky sloˇzit´ y, rozhodl jsem se postupovat od jednoduch´ ych u ´loh ke sloˇzitˇejˇs´ım. Kaˇzd´ y individu´al je testov´an a vyhodnocov´an na nˇekolika instanc´ıch, po urˇcitou dobu nebo do nˇejak´e urˇcit´e ud´alosti (sr´aˇzka tˇeles). U vˇsech u ´loh se maximalizuje fitness hodnota a, pokud to druh u ´lohy umoˇzn ˇuje, minimalizuje souˇcet spotˇrebovan´eho paliva a ˇcasu (poˇcet ˇcasov´ ych okamˇzik˚ u) potˇrebn´eho k dosaˇzen´ı c´ıle. Minimalizace tˇechto poloˇzek nen´ı souˇc´asti vzorce fitness funkce ale je pouˇz´ıvan´a pˇri seˇrazov´an´ı individu´al˚ u jak je zn´azornˇeno v algoritmu 4. ˇ Algorithm 4 Razen´ ı individu´al˚ u Vstup: Individu´al i1, i2; Vstup: Podobnostn´ı konstanta C = 0.1; V´ ystup: lepˇs´ı z obou individu´al˚ u; if M ath.abs(i1.f itness − i2.f itness) > C then if i1.f itness < i2.f itness then return i2; else return i1; end if else if i1.f uel + i1.time ≤ i2.f uel + i2.time then return i1; else return i2; end if end if
5.2. EXPERIMENTY
49
Doba bˇehu evoluce je omezena poˇctem generac´ı nebo konvergenc´ı populace potomk˚ u. Bˇehem evoluce se ukl´adaj´ı informace o v´ yvoji fitness hodnoty nejlepˇs´ıho individu´alu a pr˚ umˇern´e fitness populace a potomk˚ u v z´avislosti na poˇctu v´ ypoˇct˚ u fitness hodnoty nebo na poˇctu generac´ı. Fitness funkce se poˇc´ıt´a pro kaˇzd´ y test zvl´aˇst’ a po ukonˇcen´ı testov´an´ı je tato hodnota zpr˚ umˇerovan´a. Minim´aln´ı hodnota fitness je rovna nule. Ve vˇsech experimentech je jako mutaˇcn´ı oper´ator pouˇzita subtree-mutation a selekce je typu roulette wheel. Crossover a bloat control oper´atory nejsou pouˇzity.
V experimentech se pracuje s nˇekolika druhy strom˚ u: Strom slouˇz´ıc´ı k ovl´ad´an´ı rychlosti lodi, rotaˇcn´ı strom a strom pro stˇrelbu.
5.2.1
Zastaven´ı bez rotac´ı N´azev experimentu
Stop2D
Velikost populace
100
Poˇcet generaci
500
Maxim´aln´ı hloubka stromu
2
Poˇcet strom˚ u
1 (rychlost)
Poˇcet testovac´ıch instanc´ı
3
Ukonˇcovac´ı podm´ınky testu
500 ˇcasov´ ych okamˇzik˚ u, jedna vteˇrina, dva po sobˇe jdouc´ı ˇcasov´e okamˇziky s nulovou rychlost´ı lodi
Pouˇzit´e termin´aly
Distance (vzd´alenost lod’-c´ıl), Speed (velikost rychlosti lodi)
Pouˇzit´e funkce Fitness funkce F
+, -, *, /, Abs, Log, Sin, Atan, Sqrt { 0 je-li N D ≥ 100, F = 100 − N D jinak. ND = vzd´alenost lodi od c´ıle na konci testu
Tabulka 5.1: Nastaveni experimentu Stop2D.
Velice jednoduch´a u ´loha, kdy je lod’ nasmˇerovan´a na terˇc a jej´ım u ´kolem je doletˇet a zastavit co nejbl´ıˇze u terˇce. V t´eto u ´loze se nepouˇz´ıvaj´ı rotace ani stˇrelba. Nasta-
50
KAPITOLA 5. EXPERIMENTY A DISKUSE
ven´ı GP pro tento experiment je v tabulce 5.1. Interpretace v´ ysledku GP executionResult v z´avislosti na velikosti rychlosti lodi shipSpeed je ˇr´ızena algoritmem 5. Tento algoritmus je pouˇz´ıv´an pro interpretaci v´ ysledk˚ u rychlostn´ıch strom˚ u ve vˇsech experimentech.
Algorithm 5 Mechanismus ovl´ad´an´ı rychlosti lodi Vstup: executionResult E; Vstup: rychlost lodi S; if E − S > ae then S = S + ae ; else if E − S < −ae then S = S − ae ; else if S < va &&E == 0.0 then S = 0.0; end if end if end if
ae je zmˇena velikosti rychlosti pomoc´ı motor˚ u (4.2).
5.2.1.1
V´ ysledky
umˇern´e hodnoty nejlepˇs´ı fitness (modr´a), pr˚ umˇern´e fitness V grafu 5.1 jsou zn´azornˇeny pr˚ populace (ˇcerven´a) a pr˚ umˇern´e hodnoty fitness potomk˚ u (zelen´a) z dvaceti bˇeh˚ u GP. Osa x je pro detailnˇejˇs´ı n´ahled na poˇc´atek evoluce v logaritmick´em mˇeˇr´ıtku.
5.2. EXPERIMENTY
51
Obr´azek 5.1: Pr˚ ubˇeh evoluce experimentu Stop2D.
V´ ysledky tohoto experimentu z´ısk´a GP velice rychle a v pokroˇcilejˇs´ı f´azi evoluce se uˇz jen minimalizuj´ı hodnoty spotˇrebovan´eho ˇcasu a paliva. Jedna generace se vytv´aˇr´ı pˇet aˇz dvacet vteˇrin a populace konverguje do dvaceti minut. Vybran´e termin´aly a funkce dovoluj´ı pouˇz´ıt v´ ysledek i v trojrozmˇern´em prostˇred´ı. Zaj´ımavost´ı je, ˇze pˇri nastaven´ı vˇetˇs´ı maxim´aln´ı hloubky strom˚ u nenajde GP tak dobr´e v´ ysledky. Velice ˇcast´ ym v´ ysledkem je strom 5.1.
log log DIST AN CE
Graf z´avislosti rychlosti lodi na vzd´alenosti od c´ıle stromu 5.1 je na obr 5.2.
(5.1)
52
KAPITOLA 5. EXPERIMENTY A DISKUSE
Obr´azek 5.2: Graf z´avislosti rychlosti lodi na vzd´alenosti od c´ıle.
5.2.2
Stˇ relba
Pˇri tomto experimentu je lod’ st´ale na stejn´e pozici a jej´ı smˇerov´ y vektor je d = (1, 0, 0). D´ale se v simulaci vyskytuje pohybliv´ y terˇc, kter´ y mus´ı lod’ sestˇrelit. Lod’ zn´a pr˚ useˇc´ık trajektorie stˇrely a terˇce. Kaˇzdou testovac´ı instanci m´a k dispozici pouze jednu stˇrelu a pozice lodi, rychlost a smˇer pohybu terˇce v testovac´ıch instanc´ıch jsou r˚ uzn´e. Jelikoˇz se lod’ nepohybuje, minimalizace paliva a ˇcasu je zbyteˇcn´a. Nastaven´ı experimentu je v tabulce 5.2.
5.2. EXPERIMENTY
53
N´azev experimentu
Fire2D
Velikost populace
100
Poˇcet generaci
500
Minim´aln´ı hloubka stromu
2
Maxim´aln´ı hloubka stromu
4
Poˇcet strom˚ u
1 (stˇrelba)
Poˇcet testovac´ıch instanc´ı
18
Ukonˇcovac´ı podm´ınky testu
minut´ı c´ıle
Ukonˇcovac´ı podm´ınka cel´e evoluce 18 z´asah˚ u Pouˇzit´e termin´aly
Distance (vzd´alenost terˇc-pr˚ useˇc´ık), Speed (velikost rychlosti terˇce)
Pouˇzit´e funkce
+, -, *, /, Abs, Log, Sin, Atan, Sqrt, Unary Minus
Fitness funkce F
F = (TH * 100) + (100 - ND) ND = vzd´alenost stˇrely od terˇce v posledn´ı instanci TH = poˇcet z´asah˚ u terˇce Tabulka 5.2: Nastaven´ı experimentu Fire2D.
Interpretace v´ ysledku stromu je d´ana algoritmem 6 Algorithm 6 Mechanismus ovl´ad´an´ı stˇrelby lodi Vstup: executionResult E; Vstup: pr˚ useˇc´ık smˇerov´eho vektoru lodi a trajektorie terˇce PP; Vstup: poloha lodi PL; Vstup: rychlost stˇrely V; Vstup: vzd´alenost lodi od pr˚ useˇc´ıku S; Vstup: n´aboj N = 1; if E ≤ S/V && N > 0 then Stˇrelba(); N–; end if
5.2.2.1
V´ ysledky
Graf 5.3 zn´azorˇ nuje pr˚ umˇern´e v´ ysledky fitness hodnot z dvaceti bˇeh˚ u GP. Osa x je v logaritmick´em mˇeˇr´ıtku.
54
KAPITOLA 5. EXPERIMENTY A DISKUSE
Obr´azek 5.3: Pr˚ ubˇeh evoluce experimentu Fire2D.
Opˇet GP nalezne v´ ysledek brzy, vˇetˇsinou v prvn´ıch dvaceti generac´ıch. Jedna generace se vyv´ıj´ı tˇricet aˇz pades´at vteˇrin a cel´a evoluce probˇehne do dvaceti minut. Experiment nedosahoval dobr´ ych v´ ysledk˚ u pˇri maxim´aln´ı hloubce rovn´e dvˇema, tud´ıˇz je tato hloubka nastavena jako minim´aln´ı, aby se neprohled´aval prostor ˇspatn´ ych ˇreˇsen´ı.
5.2.3
Pron´ asledov´ an´ı
V simulaci se vyskytuj´ı dvˇe lodi, pron´asledovatel a pachatel. Pron´asledovatel m´a za u ´kol dopadnout pachatele v co nejkratˇs´ım ˇcase (za dopaden´ı pachatele se povaˇzuje sr´aˇzka obou lod´ı). Pachatel m´a danou trajektorii sv´eho pohybu tˇremi body mezi nimiˇz se pˇresunuje dle algoritmu 7.
5.2. EXPERIMENTY
55
Algorithm 7 Algoritmus pro ovl´ad´an´ı lodi pachatele Vstup: terˇce[] T Vstup: poˇcet terˇc˚ uN Vstup: aktu´aln´ı terˇc n = 0; Vstup: rychlost lodi S while true do if pachatel nem´ıˇr´ı na c´ıl T[n] then Proved’ rotaci o jeden rotaˇcn´ı krok; S = normalise(shipDirection) * 0.6; end if if pachatel dorazil do T[n] then n + +; if n == T.length then break; end if end if end while
Pachatel si udrˇzuje konstantn´ı rychlost ve smˇeru orientace lodi o velikosti 0.6, nep˚ usob´ı na nˇej setrvaˇcnost ani gravitaˇcn´ı s´ıla a lod’ ignoruje veˇsker´e kolize mimo kolize dvou lod´ı. Chov´a se tedy jinak neˇz lod’ ovl´adan´a pomoc´ı GP. Kdyˇz pachatel doraz´ı do posledn´ıho c´ıle, je simulace ukonˇcena. Tento experiment je prvn´ı z ˇrady dalˇs´ıch, kde jsou potˇreba dva stromy. Prvn´ı pro rotace a druh´ y pro rychlost. Interpretace v´ ysledku rotaˇcn´ıho stromu ve vˇsech experimentech je ˇr´ızena algoritmem 8. Nastaven´ı experimentu je v tabulce 5.3. Algorithm 8 Mechanismus ovl´ad´an´ı rotace lodi Vstup: executionResult E; Vstup: rotaˇcn´ı krok R = 0.7; Vstup: aktu´aln´ı rotace yaw lodi Y; if M ath.abs(E) > R then Y = Y + (E/M ath.abs(E)) ∗ R; else Y =Y +E end if
56
KAPITOLA 5. EXPERIMENTY A DISKUSE N´azev experimentu
Persuit2D
Velikost populace
100
Poˇcet generaci
500
Maxim´aln´ı hloubka stromu
2
Poˇcet strom˚ u
2 (rotace, rychlost)
Poˇcet testovac´ıch instanc´ı
3
Ukonˇcovac´ı podm´ınky testu
2000 ˇcasov´ ych okamˇzik˚ u, jedna vteˇrina, sr´aˇzka obou lod´ı
Pouˇzit´e termin´aly
Distance (vzd´alenost lod’-lod’), AngleDiff (´ uhel pootoˇcen´ı na protivn´ıka)
Pouˇzit´e funkce Fitness funkce F
+, -, *, F =
/, Abs, qrt, Atan, Log, Sin, Iflet 0
je-li N D ≥ 100,
100
sr´aˇzka lod´ı,
100 − N D jinak.
ND = nejbliˇzˇs´ı vzd´alenost mezi lodˇemi Tabulka 5.3: Nastaven´ı experimentu Persuit2D.
5.2.3.1
V´ ysledky
Graf 5.4 z´avislosti fitness hodnoty na poˇctu generac´ı ud´av´a pr˚ umˇern´e hodnoty z dvaceti bˇeh˚ u GP. Pro lepˇs´ı zobrazen´ı v´ yvoje v prvn´ıch generac´ıch je osa x v logaritmick´em mˇeˇr´ıtku.
5.2. EXPERIMENTY
Obr´azek 5.4: Pr˚ ubˇeh evoluce experimentu Persuit2D.
Uk´azka trajektori´ı pron´asledovatele a pachatele je na obr´azku 5.5.
Obr´azek 5.5: Trajektorie lodi v experimentu Persuti2D.
57
58
5.2.4
KAPITOLA 5. EXPERIMENTY A DISKUSE
Pohyb v gravitaˇ cn´ım poli
V simulaci se nach´az´ı lod’, terˇc a planeta. C´ılem je navigace lodi do c´ıle a ide´alnˇe jej´ı zastaven´ı co nejbl´ıˇze c´ıly. Tento experiment byl puˇstˇen po tis´ıc generac´ı bez ukonˇcovac´ı podm´ınky konvergence populace. Bˇeh cel´e evoluce trval ˇr´adovˇe des´ıtky hodin. Na z´akladˇe tohoto pozorov´an´ı byla zavedena ukonˇcovac´ı podm´ınka konvergence populace a to mnohon´asobnˇe urychlilo dalˇs´ı experimenty. Nastaven´ı experimentu je v tabulce 5.4. N´azev experimentu
GravStop2D
Velikost populace
100
Poˇcet generaci
1000
Maxim´aln´ı hloubka stromu
2
Poˇcet strom˚ u
2 (rotace, rychlost)
Poˇcet testovac´ıch instanc´ı
10
Podm´ınka pˇreruˇsen´ı testov´an´ı individu´alu sr´aˇzka lodi s planetou Ukonˇcovac´ı podm´ınky testu
1500 ˇcasov´ ych okamˇzik˚ u, jedna vteˇrina
Pouˇzit´e termin´aly
Distance (vzd´alenost lod’-c´ıl), Speed (rychlost lodi) AngleDiff, CollisionAngle, Konstanta
Pouˇzit´e funkce
+, -, *, /, Log, IfLet, Max, Min, IfCollide
Fitness funkce F
F = (100 - ND) + (10 * NS) ND = nejbliˇzˇs´ı vzd´alenost mezi lodˇemi NS = rychlost, kdyˇz je lod’ nejbl´ıˇze c´ıli Tabulka 5.4: Nastaven´ı experimentu GravStop2D.
5.2.4.1
V´ ysledky
P˚ uvodnˇe byl c´ıl experimentu zamˇeˇren na zastaven´ı lodi co nejbl´ıˇze c´ıli, stejnˇe jako v exusob´ıc´ı na lod’ graperimentu 5.2.1, s t´ım rozd´ılem, ˇze se v simulaci nach´az´ı planeta p˚ vitaˇcn´ı silou a lod’ mus´ı vyuˇz´ıt rotac´ı k dosaˇzen´ı c´ıle. Probl´em nastal u zastavov´an´ı. Jelikoˇz na lod’ p˚ usob´ı setrvaˇcnost a mechanismus zpomalov´an´ı (4.2) mˇen´ı rychlost pouze ve smˇeru orientace lodi, rychlost lodi se sice u terˇce sniˇzuje ale sloˇzka rychlosti ze setrvaˇcnosti pot´e “odt´ahne lod’ do strany”, mimo dosah c´ıle. Lod’ se pak pohybuje kolem c´ıle v kruz´ıch (obr. 5.6) jako v pˇr´ıpadˇe individu´alu 5.5
5.2. EXPERIMENTY Rotace
59
IfCollide 9.387669342798125 Iflet DISTANCE 10.663324931803926 COLLISION ANGLE ANGLEDIFF
Rychlost
IfCollide Log ANGLEDIFF - DISTANCE 11.551224407391091
Fitness evals 27034 Tabulka 5.5: Struktura individu´alu opisuj´ıc´ıho kruhovou trajektorii kolem c´ıle.
Obr´azek 5.6: Trajektorie
lodi
krouˇz´ıci
kolem
c´ıle
v
experimentu
GravStop2D.
nebo se opakovanˇe vzdaluje a pˇribliˇzuje k c´ıli a opisuje hvˇezdicovitou trajektorii (obr. 5.7) jako individu´al 5.6.
60
KAPITOLA 5. EXPERIMENTY A DISKUSE
Rotace
IfCollide Iflet ANGLEDIFF SPEED COLLISION ANGLE -3.607515549399359 IfCollide -2.3487230349122727 ANGLEDIFF
Rychlost
Iflet / 7.1494131827019345 COLLISION ANGLE Max 9.9335077812971 11.527967427926647 - DISTANCE 8.763741644568235 ANGLEDIFF
Fitness evals 56398 Tabulka 5.6: Struktura individu´alu opisuj´ıc´ıho hvˇezdicovitou trajektorii kolem c´ıle.
Obr´azek 5.7: Hvˇezdicovit´a trajektorie lodi v experimentu GravStop2D.
Pr˚ ubˇeh evoluce je zobrazen na obr. 5.8. Graf zobrazuje pr˚ umˇern´e hodnoty z dvaceti bˇeh˚ u GP.
5.2. EXPERIMENTY
61
Obr´azek 5.8: Pr˚ ubˇeh evoluce experimentu GravStop2D.
5.2.5
Pron´ asledov´ an´ı v gravitaˇ cn´ım poli
Podobnˇe jako v experimentu Pron´ asledov´ an´ı (5.2.3) se i zde vyskytuj´ı pron´asledovatel a pachatel a c´ılem testu je dopadnout pachatele. V simulaci se nav´ıc vyskytuj´ı tˇri planety p˚ usob´ıc´ı na lodˇe gravitaˇcn´ı silou. Pachatel m˚ uˇze skrz tyto planety prol´et´avat (detekce koliz´ı t´eto lodi s planetami je vypnuta). Algoritmus ˇr´ızen´ı lodi pachatele je stejn´ y jako v experimentu Pron´asledov´an´ı. Nastaven´ı experimentu je v tabulce 5.7.
62
KAPITOLA 5. EXPERIMENTY A DISKUSE
N´azev experimentu
PersuitGrav2D
Velikost populace
100
Poˇcet generaci
500
Maxim´aln´ı hloubka stromu
2
Poˇcet strom˚ u
2 (rotace, rychlost)
Poˇcet testovac´ıch instanc´ı
3
Podm´ınka pˇreruˇsen´ı testov´an´ı individu´alu sr´aˇzka lodi s planetou Ukonˇcovac´ı podm´ınky testu
jedna vteˇrina, sr´aˇzka obou lod´ı
Pouˇzit´e termin´aly
Distance (vzd´alenost lod’-lod’), AngleDiff, CollisionAngle, One
Pouˇzit´e funkce
Abs, Log, Sin, Iflet, Max, Min, IfCollide je-li N D ≥ 100, 0 F = 100 sr´aˇzka lod´ı, 100 − N D jinak.
Fitness funkce F
ND = nejbliˇzˇs´ı vzd´alenost mezi lodˇemi Tabulka 5.7: Nastaven´ı experimentu PersuitGrav2D.
5.2.5.1
V´ ysledky
Cel´a evoluce probˇehne do dvou hodin vˇcetnˇe konvergence populace. Ne vˇzdy vˇsak GP nalezne program s fitness hodnotou rovnou stu. V´ yvoj jedn´e generace trv´a zhruba jednu minutu. Pr˚ ubˇeh evoluce je zn´azornˇen v grafu 5.9.
5.2. EXPERIMENTY
63
Obr´azek 5.9: Pr˚ ubˇeh evoluce experimentu PersuitGrav2D.
Trajektorie lod´ı tˇr´ı vybran´ ych individu´al˚ u jsou zobrazeny v n´asleduj´ıc´ıch grafech. Prvn´ı, rotaˇcn´ı, strom ˇr´ıd´ı rotace a druh´ y, rychlostn´ı, ˇr´ıd´ı rychlost lodi. Stromy jsou v prefixov´em z´apisu. Struktura prvn´ıho individu´alu je v tabulce 5.8 a trajektorie lodi v r˚ uzn´ ych instanc´ıch na obr´azc´ıch 5.10 a 5.11.
Rotace
Iflet Iflet COLLISION ANGLE COLLISION ANGLE DISTANCE DISTANCE 1 ANGLEDIFF IfCollide COLLISION ANGLE ANGLEDIFF
Rychlost
Iflet Abs COLLISION ANGLE Sin ANGLEDIFF 1 DISTANCE
Fitness evals 3289 Tabulka 5.8: Struktura prvn´ıho individ´alu.
64
KAPITOLA 5. EXPERIMENTY A DISKUSE
Obr´azek 5.10: Trajektorie lodi v experimentu PersuitGrav2D.
Obr´azek 5.11: Trajektorie lodi v experimentu PersuitGrav2D.
Struktura druh´eho individu´alu je v tabulce 5.9 a trajektorie lodi v r˚ uzn´ ych instanc´ıch
5.2. EXPERIMENTY
65
na obr´azc´ıch 5.12 a 5.13.
Rotace
Iflet Abs COLLISION ANGLE COLLISION ANGLE Min DISTANCE ANGLEDIFF Min COLLISION ANGLE 1
Rychlost
Max Max ANGLEDIFF 1 Abs ANGLEDIFF
Fitness evals 8721 Tabulka 5.9: Struktura druh´eho individ´alu.
Obr´azek 5.12: Trajektorie lodi v experimentu PersuitGrav2D.
66
KAPITOLA 5. EXPERIMENTY A DISKUSE
Obr´azek 5.13: Trajektorie lodi v experimentu PersuitGrav2D.
Struktura tˇret´ıho individu´alu je v tabulce 5.10 a trajektorie lodi na obr´azku 5.14.
Rotace
Iflet Abs 1 Sin COLLISION ANGLE Log ANGLEDIFF IfCollide COLLISION ANGLE ANGLEDIFF
Rychlost
Iflet Sin ANGLEDIFF Abs COLLISION ANGLE Abs DISTANCE IfCollide 1 1
Fitness evals 4328 Tabulka 5.10: Struktura tˇret´ıho individ´alu.
5.3. DISKUSE
67
Obr´azek 5.14: Trajektorie lodi v experimentu PersuitGrav2D.
5.3
Diskuse
Pˇri psan´ı programu Universe3D, jsem narazil na mnoho moˇznost´ı, jak ˇreˇsit nˇejak´ y probl´em. Prvn´ım z probl´em˚ u byla u ´prava v´ ysledku vr´acen´eho programem vytvoˇren´ ym pomoc´ı GP. Jako nejlepˇs´ı se uk´azalo ponechat v´ ysledek ER v p˚ uvodn´ı hodnotˇe beze zmˇen. V´ ysledek lze vˇsak d´ale upravovat, aby l´epe vyhovoval potˇreb´am experimentu. Pokud jde o rychlostn´ı stromy, byly vyzkouˇseny tyto tˇri u ´pravy na u ´kolu Stop2D: • Desetina zbytku po dˇelen´ı deseti ER = (ER % 10.0) \ 10.0 Tato u ´prava umoˇzn ˇuje ER s hodnotami vˇetˇs´ımi neˇz deset ovlivˇ novat rychlost lodi. Rychlost ale velmi ˇcasto kol´ıs´a a to m´a za n´asledek vyˇsˇs´ı spotˇrebu paliva a ˇcas potˇrebn´ y k dosaˇzen´ı c´ıle je tak´e delˇs´ı. • Desetina v´ ysledku ER = ER \ 10.0
68
KAPITOLA 5. EXPERIMENTY A DISKUSE ´ Uprava, kter´a nep˚ usob´ı tak ˇcast´e zmˇeny rychlosti lodi, coˇz je dobr´e pro spotˇrebu paliva. Na druhou stranu, reakce lodi nejsou tak rychl´e. Ve v´ ysledku tak lod’ pˇrel´et´av´a c´ıl a nebo se k c´ıli bl´ıˇz´ı velice pomalu. • V´ ysledek ponech´an beze zmˇeny - Pouˇzit´a metoda, pˇri kter´e je rychlost reakce lodi na potˇrebu zmˇeny rychlosti dostaˇcuj´ıc´ı. Nev´ yhodou je vyˇsˇs´ı spotˇreba paliva.
V´ ysledek rotaˇcn´ıho stromu je ponech´an beze zmˇeny a znamen´a poˇzadovanou velikost u ´hlu rotace ve stupn´ıch, o kter´ y by se lod’ mˇela natoˇcit. Lze ale vyuˇz´ıt i rotace v radi´anech jako je tomu u Evolving Steering Behaviours with Genetic Programming[8]. Dalˇs´ım probl´emem byla volba termin´aln´ıch a funkˇcn´ıch uzl˚ u pro GP. Volba byla ovlivnˇena zp˚ usobem interpretace v´ ysledku stromu. Jelikoˇz je n´avratov´a hodnota typu double, je lepˇs´ı pouˇz´ıt termin´aly jako napˇr´ıklad Distance, AngleDiff neˇz napˇr´ıklad uzly ShipPositionX, ShipPositionY a ShipPositionZ vracej´ıc´ı jednotliv´e sloˇzky vektoru polohy lodi, protoˇze je pak prostor prohled´avan´ y genetick´ ym programov´an´ım menˇs´ı. Uzel Iflet se uk´azal jako neefektivn´ı. Je to jedin´ y uzel s aritou ˇctyˇri, ˇc´ımˇz znaˇcnˇe zvˇetˇsuje velikost individu´al˚ u a jeho struktura umoˇzn ˇuje tvoˇrit k´od obsahuj´ıc´ı bloat. Napˇr´ıklad u individu´alu 5.2 bude strom vracet vˇzdy hodnotu A. Uzly max a min mohou tak´e zp˚ usobovat bloat podobnˇe jako uzel Iflet. if(DIST AN CE <= DIST AN CE) return A else return B
(5.2)
Naopak velmi uˇziteˇcn´e se uk´azaly b´ yt uzly IfCollide, CollisionAngle a AngleDiff, kter´e obstar´avaj´ı veˇsker´e rotace a s nimi spojen´e vektorov´e v´ ypoˇcty. Projekt Evolving Steering Behaviours with Genetic Programming vyuˇz´ıv´a jako mnoˇzinu termin´al˚ u relativn´ı souˇradnice tˇeles vzhledem k agentovi LOCAL X a LOCAL Y. V´ ysledek, kter´ y vrac´ı strom, je pak u ´hel pootoˇcen´ı lodi v radi´anech. Nev´ yhodou t´eto reprezentace jsou vˇetˇs´ı stromy a pomalejˇs´ı bˇeh GP. Pro program Universe3D by bylo potˇreba pˇridat termin´aly pro nejbliˇzˇs´ı pˇrek´aˇzku (planeta, meteor) a nejbliˇzˇs´ı lod’. Nav´ıc v tomto projektu nem´a agent stanoven´ y minim´aln´ı u ´hel rotace za jeden ˇcasov´ y okamˇzik jak je tomu v programu Universe3D, na agenta nep˚ usob´ı setrvaˇcnost a agent si udrˇzuje konstantn´ı rychlost. Dalˇs´ı moˇznost´ı je pouˇz´ıt funkce typu “if else” a termin´aly, kter´e rovnou prov´ad´ı akce. Napˇr´ıklad termin´aly Accelerate, RotateYaw nebo Fire. Odpad´a tak probl´em s interpretac´ı v´ ysledk˚ u strom˚ u. Souˇcasn´e GP v programu Universe3D lze lehce upravit aby vyhovoval
5.3. DISKUSE
69
tomuto zp˚ usobu, staˇc´ı ignorovat n´avratov´e hodnoty a implementovat akce jednotliv´ ym termin´al˚ um. V neposledn´ı ˇradˇe by se ovl´ad´an´ı lodi mohlo ˇreˇsit pomoc´ı neuronov´ ych s´ıt´ı. ˇ Casovˇ eu ´sporn´a se uk´azala metoda pˇreruˇsov´an´ı testov´an´ı individu´al˚ u pˇri selh´an´ı v nˇekter´em z test˚ u. Individu´al jehoˇz c´ılem je vyhnout se pˇrek´aˇzce a jenˇz neuspˇeje jiˇz v prvn´ım testu a do pˇrek´aˇzky naraz´ı, nem´a smysl testovat d´ale. Uˇsetˇr´ı se tak ˇcas, kter´ y je vˇenov´an na testov´an´ı slibnˇejˇs´ıch individu´al˚ u. Testov´an´ı individu´al˚ u mus´ı b´ yt vˇzdy na stejn´e sadˇe instanc´ı. Pokud jsou instance n´ahodnˇe generovan´e, je fitness hodnota zav´adˇej´ıc´ı a pˇrevl´ad´a prvek n´ahody nad funkˇcnost´ı vyvinut´eho programu. Toto plat´ı i pro v´ıce bˇeh˚ u GP.
70
KAPITOLA 5. EXPERIMENTY A DISKUSE
Kapitola 6 Z´ avˇ er Projekt u ´spˇeˇsnˇe simuluje trojrozmˇern´e vesm´ırn´e prostˇred´ı a navrˇzen´e experimenty dosahuj´ı velmi dobr´ ych v´ ysledk˚ u. Nicm´enˇe experimenty jsou ˇcasovˇe n´aroˇcn´e a je nad s´ıly jednotlivce vyzkouˇset vˇsechny moˇzn´e postupy s r˚ uzn´ ymi mnoˇzinami uzl˚ u. Lze pouˇz´ıt jinou mnoˇzinu uzl˚ u, klasick´e GP s termin´aly, kter´e prov´adˇej´ı r˚ uzn´e akce, nebo stronglytyped GP s v´ıce datov´ ymi typy neˇz jen double. D´ale je pak moˇzn´e pˇridat mnoho nov´ ych experiment˚ u jako je tˇreba stˇrelba na nerovnomˇernˇe pohybuj´ıc´ı se terˇc, bitva mezi nˇekolika lodˇemi, nebo pron´asledov´an´ı s jin´ ym algoritmem pro ovl´ad´an´ı pachatele. Jelikoˇz je simulace psan´a pro trojrozmˇern´e prostˇred´ı, lze experimenty rozˇs´ıˇrit o tˇret´ı rozmˇer.
71
72
´ ER ˇ KAPITOLA 6. ZAV
Literatura [1] Poli R., Langdon W.B. and McPhee N.F.: A field guide to genetic programming, Lulu Enterprises Uk Limited (2008). [2] Liviu Panait and Sean Luke: Alternative Bloat Control Methods. [3] Diana Gruber: The Mathematics of the 3D Rotation Matrix [online], publikov´ano: 30.10.2000. Dostupn´e z http://www.fastgraph.com/makegames/3drotation/. [4] Millington I.: Game Engine Physics Development Second Edition, Elsevier Inc. (2010). [5] Florin Diacu: Solution of the n-body problem [6] Tancred Lindholm: N-body algorithms (1999) [7] Michal Turek: NeHe OpenGL Tutori´ aly (2004). Dostupn´e z http://nehe.opengl.cz/. [8] Vogel Daniel.: Evolving Steering Behaviours with Genetic Programming [online], publikov´ano: z´aˇr´ı 2004. Dostupn´e z http://www.nonsequitoria.com/2521/.
73
74
LITERATURA
Pˇ r´ıloha A Obsah pˇ riloˇ zen´ eho CD K t´eto pr´aci je pˇriloˇzeno CD, na kter´em jsou uloˇzeny zdrojov´e k´ody. • .\ DP - Sloˇzka obsahuj´ıc´ı text DP. • .\ Experimenty - Sloˇzka s vyvinut´ ymi individu´aly. • .\ Universe3D - Sloˇzka se zdrojov´ ym k´odem projektu Uninverse3D psan´em v jazyce Java. • .\ Zadani - Sloˇzka obsahuj´ıci kopii zad´an´ı DP.
I