• No results found

Optimering av boids med genetiska algoritmer

N/A
N/A
Protected

Academic year: 2021

Share "Optimering av boids med genetiska algoritmer"

Copied!
25
0
0

Loading.... (view fulltext now)

Full text

(1)

Institutionen för kommunikation och information Examensarbete i datalogi 10p

C-nivå

Vårterminen 2007

Optimering av boids med genetiska algoritmer

Mattias Sossna

(2)

Optimering av boids med genetiska algoritme r

Examensrapport inlämnad av Mattias Sossna till Högskolan i Skövde, för Kandidatexamen (B.Sc.) vid Institutionen för kommunikation och information.

Arbetet har handletts av Marie Gustafsson.

2007-06-03

Härmed intygas att allt material i denna rapport, vilket inte är mitt eget, har blivit tydligt identifierat och att inget material är inkluderat som tidigare använts för erhållande av annan examen.

Signerat: _______________________________________________

(3)

Optimering av boids med genetiska algoritme r

Mattias Sossna

Sammanfattning

Boids handlar om att simulera flockar genom självständiga individer. Styrningen utgår från tre grundregler, undvika kollision, centrera flocken samt matcha hastighet.

För att framhäva vissa beteenden kan reglerna viktas. Dessa vikter kan sättas manuellt, men de kan också optimeras, exempelvis med genetiska algoritmer. Detta examensarbete utgår från Chen, Kobayashi, Huang och Nakao (2006) arbete om optimering av boids med hjälp av en genetisk algoritm. Beteende hos flockar med manuellt satta vikter och optimerade med en genetisk algoritm jämförs. Jämförelsen sker genom mätningar enligt kriterier som reflekterar hur realistiskt flocken beter sig.

Försöken påvisade två olika beteenden, ett där flocken centreras och ett där kollision och leta mat får prioritering.

Nyckelord: Boids, Flockar, Genetiska algoritmer

(4)

Innehållsförteckning

1 Introduktion ... 1

2 Bakgrund... 2

2.1 Boids ... 2

2.1.1 Undvika kollision... 3

2.1.2 Centrera flocken... 3

2.1.3 Matcha hastigheten... 4

2.2 Flockar i naturen... 4

2.3 Genetiska Algoritmer... 4

2.3.1 Selektion... 5

2.3.2 Fitnessfunktion... 6

2.3.3 Korsning ... 6

2.3.4 Mutation... 6

3 Problem ... 7

4 Metod... 8

4.1 Boids ... 8

4.1.1 Extra regler ... 8

4.2 Vikter ... 8

4.3 Genetisk algoritm för viktoptimering ... 9

4.4 Kriterier för realism ... 11

4.5 Testfall ... 11

4.6 Mätning... 11

5 Resultat... 12

5.1 Viktanalys ... 12

5.2 Jämförelse ... 13

5.3 Kollisioner ... 15

5.4 Boids utanför flocken ... 15

5.5 Splittring av flocken ... 16

6 Diskussion... 19

6.1 Resultat ... 19

6.2 Slutsats ... 19

6.3 Framtida arbete ... 20

(5)

Introduktion

1 Introduktion

En flock fåglar eller ett stim med fisk är något väldigt naturligt och enkelt, inget speciellt i sig. Detta så enkla och vardagliga fenomen är något mycket komplext och svårmodellerat. Reynolds (1987) framhåller att bevisen pratar för att varje individ i en flock (eller ett stim) agerar helt individuellt. Vidare framhåller Reynolds (1987) att individuellt styre möjliggörs av tre enkla regler som gör att varje boid strävar efter att undvika kollision, centrera flocken och matcha hastighet (med hastighet avses både fart och riktning, det vill säga en vektor) med resten av flocken. De tre reglerna är enkla men ger kraftfulla och korrekta resultat.

Grunden i flocken ligger i att varje individ är självständig och styrs var för sig, precis som en vanlig fågel. Varje fågel är ett djur som har sina sinnesintryck och reagerar på det den uppfattar med sina sinnen. På samma sätt fungerar en boid, det är vad den som individ registrerar som har betydelse. Det är inte flocken som styrs som en individ, de har bara ett gemensamt mål. De kommer att fungera tillsammans på samma sätt oavsett om det är fem eller 500 individer.

Det finns svårigheter i att avgöra hur bra Reynolds (1987) arbete fungerar. Han nämner själv att det inte är helt trivialt, det som användes i hans artikel är en jämförelse mellan simuleringen och verkliga djur. Även Chen m.fl. (2006) anvä nder realism som ett mått på att avgöra hur bra deras implementation fungerar.

Reglerna som bygger upp beteendet kan viktas, med hjälp av en vikt framför varje regel ges vissa beteenden större inflytande. Dessa regler kan sättas manuellt utifrån önskat beteende eller optimeras exempelvis med hjälp av en genetisk algoritm, vilket är fallet i Chen m.fl. (2006) arbete.

En genetisk algoritm är en imitation av hur naturen utför sin evolution. Tanken ligger i att med hjälp av korsning av två föräldrar skapa en ny lösning. En bra lösning har större chans att väljas som förälder, en parallell till naturligt urval.

Detta arbete handlar om att kombinera boids med en genetisk algoritm. Syftet är att optimera boidsen, där optimeringen avser vikterna för reglerna. Detta har gjorts av Chen m.fl. (2006), i det fallet är utvärderingen en visuell utvärdering av realismen i den optimerade versionen kontra originalet. Tanken ligger här i att få en mer konkret (med konkret avses mätbara resultat) utvärdering med avseende på hur flockar fungerar i verkligheten, detta genom att jämföra den optimerad version av algoritmen med en version med manuellt satta vikter. Där målet är att se på vilket sätt optimeringen förbättrar resultatet.

(6)

2 Bakgrund

Kapitlet tar upp nödvändig bakgrundsinformation för att kunna ta till sig resten av arbetet. Inledningsvis kommer en kort förklaring av Reynolds (1987) boids följt av en genomgång av flockar i naturen. Avslutningsvis tas genetiska algoritmer upp.

2.1 Boids

Reynolds (1987) var den som först tog fram boidmodellen. Modellen går ut på att simulera en flock med hjälp av tre enkla regler: undvika kollision, centrera flocken och matcha hastighet. De tre reglerna används för att se till att flocken rör sig naturligt och påverkar varje boids rörelse enligt koden nedan (Figur 1). Grunden ligger i att de ger varsin vektor som returvärde. Boidsens hastighet uppdateras med hjälp av dessa tre vektorer och sedan justeras positionen med den nya hastigheten. Resultatet blir att flocken flyter fram: Skillnaden mellan att låta boidsen leva i två och tre dimensioner är bara skillnaden i vektormatematik. Utan en z-axel (två dimensioner) kommer det att bli ett platt rörelsemönster men likväl ett rörelsemönster och en uppvisning i boidsens beteende. I grunden är det således den underliggande vektormatematiken som avgör hur svårt (eller enkelt) det blir att skifta mellan två och tre dimensioner.

Figur 1 Pseudokod för förflyttning av en boid. Rule1-3 är funktioner som resulterar i varsin vektor utifrån de nedan angivna beskrivningarna.

Originalarbetet innehöll 80 boids och var skapat i ”Symbolic Common Lisp” och kördes på en maskin som under den tiden var att betraktas som en högpresterande persondator (Symbolics 3600 Lisp Machine) vilket resulterade i att varje bildruta tog 95 sekunder att generera (Reynolds, 1987). Att då skapa en testfilm på tio sekunder (300 bildrutor) tog runt åtta timmar. Med dagens teknik bör programmet utan problem kunna köras i realtid. Trots dåtidens sämre maskiner kunde detta arbete genomföras, algoritmen är inte optimerad för hastighet och använder sig av O(N2) (Reynolds, 1987) vilket resulterade i att de 80 boidsen behövde 6400 individuella jämförelser.

Genom att inte låta varje individ beräknas mot alla andra flockmedlemmar kan bättre prestanda fås. En enkel metod är att låta varje fågel enbart beräkna de grannar som finns inom ett vist område vilket bland annat Cui, Gao och Potok (2006) gör. Detta resulterar dock i sämre värden för varje boid (vilket de också nämner) men ger högre hastighet som sagt. En ytterligare utökning är att använda vikter för att premiera vissa regler. I detta fall sätts en vikt vid varje regel för att skala den jämfört med övriga, vilket ger bättre kontroll över flocken (Reynolds, 1999). Här framhålls även att varje vektor ska normaliseras innan vikterna läggs på.

1: moveBoid(Boid boid) 2: vector v, w, u 3:

4: v = rule1(boid) 5: w = rule2(boid) 6: u = rule3(boid) 7:

8: boid.velocity += v + w + u 9: boid.position += boid.velocity

(7)

Bakgrund

2.1.1 Undvika kollision

Den första regeln handlar om att undvika kollision. O m en annan boid befinner sig inom en viss radie från sin flockkamrat förflyttas han med en längd som är lika med avståndet mellan de två individerna bort från boiden.

( )

( )





>

⋅

 

 −

=

i B

i B B

B k

B V

0 1

1

Formel 1 Regel ett, undvika kollision. Funktionen använder avståndet mellan boidsen ( B ) och minsta tillåtna avstånd (k ) för att hålla individerna på rätt avstånd (Chen m.fl., 2006).

Figur 2 Utgångspunkten för regel ett (efter Chen m.fl., 2006).

Formel 1 visar hur vektorn V1 (resultatet av regel ett) beräknas. Så länge en annan boid är inom synhåll (i) är V1 skild från noll. Synhållet, i, är minsta tillåtna avstånd till nästa objekt. Värdet på i väljs beroende av implementationsdetaljer, så som till exempel boidsens storlek. När en annan boid är inom synhåll, och avståndet mellan de båda individerna (B) är mindre än det minsta tillåtna avståndet (k), så flyttas de från varandra. Om avståndet är större, så flyttas de mot varandra. Detta göra att denna formel inverkar på och hjälper regel två, att hålla ihop flocken Det kan också tilläggas att med B avses längden på vektorn B.

2.1.2 Centrera flocken

Den andra regeln ser till att flocken håller ihop (Formel 2) och inte far iväg från varandra. Detta görs genom att kontrollera boiden mot en vektor till centrumet för flocken (c, Figur 3). O m avståndet är större än boidens synfält blir vektorn noll. I fall två blir vektorn den normaliserade (en vektor är normaliserad när dess längd är ett) versionen av vektorn c.

( )

( )





>

 ≤



=

i C

i C C

C V

0

2

Formel 2 Regel två, centrera flocken. Funktionen använder avståndet till flockens centrum för att låta individerna centreras (Chen m.fl., 2006)

k

B V1

(8)

Figur 3 Vektorn c , vilken går från en boid (b) till centrum (stjärnan) av flocken (representerad av den stora cirkeln).

2.1.3 Matcha hastigheten

Den sista regeln går ut på att flockens hastighet. Detta kan göras genom att kontrollera hastigheten bland de boids som är inom synhåll för aktuell boid och sedan matcha hastigheten till medelvärdet av detta (Figur 4).

Figur 4 Pseudokod för regel tre.

2.2 Flockar i naturen

Reynolds (1987) berättar att naturliga flockar består av individer med två huvudsakliga mål, att inte krocka med de andra medlemmarna men samtidigt hålla sig nära dem. Vidare framhålls även att flockar inte kan bli fulla, det vill säga det finns alltid utrymme för en extra fågel.

För att analysera flockar i naturen krävs tid och tålamod. Bekoff (1995) studerade aftonstenknäckan i Colorado mellan 1986 och 1992. Detta skedde från en punkt parallell med djurens matplats, där han placerade ut samma fågelmat varje dag vid samma tidpunkt. Ett kriterium som användes var att en fågel som avvek mer än en halvmeter från de andra fåglarna inte ansågs tillhöra den flocken.

2.3 Genetiska Algoritmer

En genetisk algoritm är skapad med naturens evolutionssystem som mall. En lösning består av ett antal kromosomer, där varje kromosom är en del av lösninge n. I fallet med boids är det vikterna som bygger upp lösningen. Första uppsättningen lösningar slumpas fram, dessa blir föräldrar till första generationens barn. Barnen blir sedan föräldrar till nästa generation. Ett barn tas fram genom att korsa två föräldrar. För att bestämma hur bra en lösning är används en fitnessfunktion. Metoden för att ta fram en ny lösning från föräldrarna kan se ut på lite olika sätt, i Figur 5 rad 18 till 21 används en enp unktskorsning. Genetiska algoritmer kan användas inom flera olika

1: rule3(Boid boid) 2: vector v = 0 3: i = 0

4:

5: for every visible boid b do 6: v += b.velocity

7: i += 1 8:

9: boid.velocity = v / i C

(9)

Bakgrund

användningsområden, dock säger Russell och Norvig (2003) att de haft stor inverkan på framförallt optimeringsproblem.

Figur 5 Pseudokod för en g enetisk algoritm, efter Russell och Norvig (2003) .

2.3.1 Selektion

Selektion kan ske på olika sätt, där slumpen spelar olika stor roll. Den enklaste varianten är att helt slumpa fram individerna. Detta ger dock lika stor sannolikhet att välja en svag lösning som en bra. Det finns flera metoder för att välja ut individer där de som är starkast har större chans att bli valda. En metod är rouletthjulsselektion, grunden är att varje individ blir en bit av rouletthjulet. I detta fall är dock inte alla bitar lika stora, utan är proportionerliga mot fitnessen (Figur 6). Sedan slumpas en del fram och ger på så sätt en individ, här följer att alla individer har chans att bli valda, men en högre fitness ger större sannolikhet.

Figur 6 Modellen av rouletthjulsselektion (e fter Buckland, 2002) 1: GeneticAlgorithm(population, fitnessFunc) 2: repeat

3: newPopulation = empty set 4:

5: for i from 1 to population.size do

6: x = randomSelection(population, fitnessFunc) 7: y = randomSelection(population, fitnessFunc) 8: child = Reproduce(x, y)

9:

10: if (small random probability) then 11: child = mutate(child)

12:

13: newPopulation.add(child) 14: population = newPopulation

15: until some individual is fit enough or out of time 16:

17: return population.bestIndvidual

18: Reproduce(x, y) 19: n = x.length

20: c = random number from 1 to n

21: return substr(x, 1, c) + substr(y, c + 2, n)

(10)

2.3.2 Fitnessfunktion

Varje barn skapas utifrån två föräldrar (båda föräldrarna kan vara samma individ), för att kunna avgöra och framhäva bra lösningar används en fitnessfunktion. Denna funktion ger ett högt värde för en bra lösning och ett lägre värde för en sämre lösning (Russell & Norvig, 2003). Det är dock inte bara fitnessen som avgör föräldern, utan även en viss del slump spelar in. Annars skulle den bästa lösningen (eller de bästa om flera lösningar är likvärdiga) användas alltid, vilket inte skulle resultera i någon större evolution.

2.3.3 Korsning

För att kunna utveckla lösningen används korsning av två föräldrar för att få fram barn. I Figur 7 används en enpunktskorsning, vilket betyder att en punkt slumpmässigt väljs ut, sedan används de två delsträngarna för att skapa en ny sträng (lösning), vilket kan ses på rad 21. Korsningsprocessen gör störst framsteg i början, medan hastigheten på utvecklingen avtar allt medan lösningarna blir bättre (Russell & Norvig, 2003).

Figur 7 En enpunktskorsning fungerar genom att en punkt väljs ut och allt efter denna byts ut. (Efter Chambers, 1995)

En tvåpunktskorsning fungerar på ett liknande sätt som enpunktskorsning. Dock väljs två punkter och allt mellan dessa skiftas, Figur 8.

Figur 8 En tvåpunktskorsning fungerar genom att två punkter väljs ut och allt mellan dessa byts ut.

(Efter Chambers, 1995)

2.3.4 Mutation

För att inte fastna i lösningar som är lokala optima används mutation, vilket innebär att en del av en lösning muteras Detta medför att en del i strängen ändras till ett värde vilket skiljer sig från det värdet barnet fick i korsningen. Sannolikheten för att mutation sker är oftast satt till ett lågt värde.

0110100

1011001 1010101

0111000 1011001

0110100

0111001

1010100

(11)

Problem

3 Problem

Boids är en teknik vilken först presenterades av Reynolds (1987). Den har använts till mycket, till exempel använder Cui m.fl. (2006) boids för att klustra dokument, och är enkel men funktionell. Grunden är tre regler vilka alla returnerar vektorer, dessa är viktade och summeras ihop, resultatet blir en förändring i hastighet. En genetisk algoritm kan användas för att förbättra resultatet (Chen m.fl., 2006) genom att optimera vikterna. Målet med detta arbete är att se hur en genetisk algoritm kan förbättra flocken, likt Chen m.fl. (2006). Dock handlar det här om att på ett konkret sätt visa på hur den genetiska algoritmen förändrar resultatet av Reynolds (1987) arbete, med avseende på realism. Det bör tilläggas att optimeringen kräver korrekt vald fitnessfunktion eftersom det är denna som styr resultatet.

Den mätmetod som används av Chen m.fl. (2006) för att avgöra förbättringen till följd av den genetiska algoritmen, är svåranvänd och svårtolkad. Deras sätt att mäta förbättringen handlar om att vara mer realistisk genom att visa skillnader i två olika skärmdumpar. Realism är något som kan ses som väldigt subjektivt. Realism handlar här inte om en visuell bedömning utan mätning av kriterier vilka kan ses från flockar i den verkliga världen. På vägen fram till att se hur den genetiska algoritmen förbättrar resultatet kommer fö ljande delmål: implementera algoritmerna, testköra dem och slutligen jämföra de båda implementationerna med avseende på realism.

(12)

4 Metod

Detta arbete handlar till viss mån om att replikera Chen m.fl. (2006) och visa på ett bättre sätt att mäta resultatet. Fitnessfunktionen som används bygger på deras, vilken ska vara väl förankrad i hur en flock fungerar.

När det handlar om att jämföra två olika algoritmer finns det två alternativ. Antingen kan testning användas eller analys. I detta fall är det dock en optimering av en algoritm där optimeringen handlar om förändringar i vikter, vilket resulterar i att de håller samma komplexitet och ingen skillnad i resultat skulle fås. Det viktiga är hur boidsen beter sig som en flock, vilket skulle vara mycket svårt att se utan en testning.

I detta fall kommer en testkörning av de båda exemplen (med och utan optimering av vikterna) att ske och data kommer att insamlas och jämföras utifrån valda kriterier.

4.1 Boids

Miljön i vilken flocken rör sig består av två matbitar och flocken. Alla delar har slumpmässigt utplacerade positioner. Beräkningarna för boidsen sker till den individ eller matbit vilken är närmast till hands. Att bara räkna på den närmsta kommer som en följd av hur Chen m.fl (2006) räknar. Funge (2004) visar på en annan möjlig metod där alla individer som är för nära tas med i beräkningen och ett medelvärde av dessa används. Då utgångspunkten är Chen m.fl. (2006) arbete har deras betraktningssätt valts.

4.1.1 Extra regler

I originalarbetet presenterades tre regler, senare arbeten har lagt till flera olika regler (till exempel hinder, mat och fiender). I detta arbete har dessa regler utökats med Chen m.fl. (2006) första extraregel, att följa mat. Två matbitar finns slumpmässigt utplacerade i miljön. Anledningen till att det är fler än en matbit är för att det ska finnas flera alternativ för boidsen och inte den enda matbiten ska bli till ett verktyg för att sammanhålla flocken.

Reynolds (1987) har även en egen regel för att matcha hastigheten i flocken till varje individ. I Chen m.fl. (2006) finns ingen egen regel som tar hand om detta fall, varpå det även är utlämnat i detta arbete.

Chen m.fl. (2006) har även några regler som utelämnats i detta arbete, dessa handlar om att undvika fiender och hinder. Utelämnandet av dessa har grundats på att miljön i försöken saknar fiende boids och hinder varpå dessa regler skulle vara utan påverkan på resultatet.

4.2 Vikter

För att skapa en viss prioritering av boidsens beteende används vikter till de olika reglernas resultat. Formel 3 visar beräkningen av resultatvektorn utifrån godtyckligt antal regler. I detta arbete har enbart en regel om att flocken rör sig mot mat lagt till, samma regel som Chen m.fl. (2006) använder. Reynolds (1999) använder exemplet om ett flyende djur, vilket inte stannar för att hämta mat, men däremot krävs både undvikande av hinder och fly bort från faran för att visa på hur en prioritering där enbart en regel används åt gången har sin svaghet och hur det inte fungerar i ett verkligt scenario. Vidare anger han även två svagheter med att använda denna linjärkombination, det är inte beräkningsmässigt den mest effektiva metoden samt att

(13)

Metod

risken alltid finns för att vektorerna tar ut varandra, det vill säga drar åt olika håll och ger ett nollresultat.

=

i i

iV

w V

Formel 3 Hastighetsvektorn (V) är summan av alla regler multiplicerat med dess vikt.

Trots att vikter används flitigt har det varit svårt att hitta motiveringar och metoder för att bestämma vikterna. Helser (1998) talar om vikterna som en metod att prioritera olika beteenden, likt Reynolds (1999), och ger även exempel på lågprioriterade regler, i detta fall att matcha hastighet och centrera flocken.

I implementationen utan optimering används fördefinierade vikter. För första regeln, undvika kollision, används värdet 0,65 på grund av att detta är det viktigaste beteendet då en kollision mellan fåglar i luften skulle vara förödande. Andra regeln, hålla ihop flocken har fått ett lågt värde, likt Funge (2004) används 0,1 eftersom detta är ett mindre primärt mål. Slutligen används 0,25 till att leta mat, vilket är en viktig del men inte lika viktig som att inte krocka.

4.3 Genetisk algoritm för viktoptimering

Chen m.fl. (2006) använder en tvåpunkts korsning för att generera barn utifrån föräldrarna, där varje föräldrapar skapar två barn. Mutering sker i enlighet med Formel 4. Kromosomen har fem bitar (det står här klart att det inte kan syfta på bitar som i binärttal, då detta skulle ge noll eller ett) vilket i detta arbete har realiserats genom fem flyttal, en kromosom per vikt.

(

u x

)

l

x'= +β

Formel 4 Ekvationen för mutering där x omvandlas med hjälp av övre och undre g ränserna u och l samt β vilken är ett slumpmässigt värde i intervallet

[ ]

01, efter Chen m.fl. (2006).

För att beräkna fitness (Formel 8) används kostnadsberäkningar som relaterar till de olika reglerna. Tre olika kostnader beräkna s för att sedan användas till att få fram fitnessen. En hö g kostnad ger ett lägre fitnessvärde, eftersom kostnaderna är i nämnaren (Formel 8). Vektorn B är en vektor mellan två boids, på samma sätt är F en vektor mellan en boid och maten. I båda fallen går vektorn från boiden till närmsta mat/boid. Begreppet centrum av flocken är relativt till varje individ, det är dess synliga flockmedlemmar som används för att beräkna flockens centrum, C.

Variablerna k och i är konstanter och bestämmer minsta avstånd innan en kollision inträffar samt hur stort synfältet är. Hastigheten hos flocken betecknas s, medan individens hastighet benämns v. Slutligen är variabeln l längden på boidens riktningsvektor. Dessa variabler återfinns i Tabell 1.

(14)

B En vektor aktuell boid och en annan boid F En vektor från aktuell boid till mat

C En vektor från aktuell boid till centrum för dess synliga flockmedlemmar

k Minsta avstånd två boids har mellan varandra för att inte räknas som kolliderande

i Längden på boidsens synfält s Hastigheten på flocken

l Längden på boidens riktningsvektor v Boidens hastighet

Tabell 1 Tabell för de olika variablerna som förekommer i formlerna.

( )

( )

( )





− >

− ≤

=

k B k

i i B i

k k B

k B i C

2 2 2

2

1

Formel 5 Kostnad ett handlar om kollision mot andra boids, efter Chen m.fl. (2006).

( )

( )

( )

( )





− ≥

<

<

− ≤

=

i F i

i F i

i F i

i F i

i F i

C

5 2 2

5 2

2 5 2

5 2 3

1

3 1 2

3 1

2 3 1

2 0

Formel 6 Kostnad två beräknas utifrån avståndet till mat, efter Chen m.fl. (2006).

( )





− <≤ ≤

− <

=

v v l

v l i

s l s

v l l i v

v l C

5 , 5 0

, 0

5 , 0

5 , 1 5

, 0 0

10 5

, 5 1 , 1

2 2

3

Formel 7 Kostnad fem handlar om hastigheten hos boidsen samt flocken, efter Chen m.fl. (2006).

(

1 2 3

)

1

1 C C Fitness C

+ +

= +

Formel 8 Fitnessen beror på summan av kostnaderna, efter Chen m.fl. (2006).

I Chen m.fl. (2006) försök uppmättes resultatet efter 100 generationer. I detta arbete används en population på 15 boids där varje ny generation tas fram efter 75 förflyttningsberäkningar (uppdatering av flockens position), detta för att miljön ska hinnas ändras innan beräkningar gör, skulle räkningen ske för ofta blir miljön nästan

(15)

Metod

samma varje gång och det är en flock som fungerar i en varierande miljö som vill åstadkommas. Resultatet tas fram efter 150 generation.

4.4 Kriterier för realism

Målet är att mäta realismen i simuleringarna. Det första kriteriet handlar om att se hur väl varje boid håller sig inom flocken. På samma sätt som i 2.2 mäts även i detta arbete de boids som är för långt borta från resten av flocken. Ytterligare ett värde används för att avläsa hur väl samlad flocken är, det är storleken på flocken. Storleken räknas som avståndet mellan de två yttersta individerna. Det sista kriteriet är hur ofta två boids kolliderar. Med kollision avses att två individer är närmare varandra än minsta avståndet, k (se 4.3) vilket innebär att en fysisk kollision inte nödvändigtvis inträffar. Detta värde räknar alla kollisioner mellan alla boids, vilket betyder att antalet möjliga krockar är 105 (med 15 boids). Detta beroende på att alla flockmedlemmar kan kollidera med alla andra, det vill säga en mindre än maxantalet.

Dock innehåller varje kollision två individer vilket ger att Formel 9 definierar maxantalet kollisioner.

( )

2

−1 n n

Formel 9 Det maximala antalet kollisioner i kollisionsmätningen, där n är antalet boids.

4.5 Testfall

Testningen kommer att utföras genom att låta de båda implementationerna köras under en bestämd tid (20 sekunder, ett tidsintervall valt för att flocken ska kunna få chansen att uppvisa sitt beteendemönster) samtidigt som data samlas in. En mängd olika data kommer samlas in kontinuerligt för att få underlag att kunna genomföra jämförelsen mellan de båda testfallen. Mätvärdena kommer att upptas en gång per bildruta. För varje bildruta görs fem beräkningar på flockens förflyttning. Trots fler förflyttningar per bildruta syns inte detta för ögat, utan en kontinuerlig rörelse kommer ritas.

4.6 Mätning

Mätningen kommer att ske kontinuerligt under hela körningen. Där de olika mätningarna kommer att ske oberoende av varandra. Det som kommer att mätas är ett antal uppsatta kriterier för hur en flock uppfattas realistisk (4.4). Mätresultatet kommer att presenteras från och med att en sekund har passerat, detta för att kunna få bort fel som kommer sig av hur boidsen placeras ut i sina startpositioner. Denna process är slumpmässig och ger således ett felaktigt (felaktiga med avseende på att boidsen inte fått chansen att skapa en flock då de startar utspritt) resultat då reglerna inte kan påverka detta.

(16)

5 Resultat

Resultatet är framtaget genom kontinuerliga mätningar vid varje bildruta. På varje utritning sker tre beräkningar på flockens rörelse. Mätningen sker från start av simuleringen. I fallet med optimering med hjälp av genetisk algoritm definieras start som det tillfälle då flockens vikter sätts till det optimerade värdet, det vill säga när evolveringsprocessen är slutförd. Först kommer en diskussion om hur vikterna satts, följt av en summering av alla testerna för att sedan gå igenom var och av kriterierna som satts upp i avsnitt 4.4.

Figur 9 Två skärmbilder (färgerna har ändrats för att göra bilderna tydligare) från körning av testet med manuellt satta vikter, där de röda fyrkanterna representerar en boid och de gröna ringarna

föreställer mat.

5.1 Viktanalys

Vikterna i det ickeoptimerade exemplet är satta för hand utifrån de värden som är viktiga. Helser (1998) framhåller att centrering av flocken är av låg prioritet viket även har getts i detta fall. Ett högt värde här ger mer kollisioner då regeln som trycker ut flocken får mindre betydelse. I ett fall då vikterna närmar sig samma värde kommer kollisionensregeln få för lite utrymme och de andra reglerna kommer ta över, vilket resulterar i att individerna klumpar ihop sig.

(17)

Resultat

0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1

1 2 3 4 5 6 7 8 9 10 11 12 13 14

Testkörning nummer

Viktvärde

Undvika kollision Centrera flocken Jaga mat

Figur 10 Viktfördelningen hos de 14 optimeringarna.

I Figur 10 syns hur vikterna fördelade sig under de 14 olika körningarna. Vikten för centrering av flocken höll i majoriteten av fa llen låga värden, medan vikten för att jaga mat håller sig till mittenvärden. I jämförelsefallet hade kollisionen fått ett värde på 0,65. Här syns att värdet håller sig runt det eller högre utom i undantagsfall.

Skillnaderna i körningarna kan bland annat förklaras av att miljöns startvärde är slumpmässigt. Men också att de olika fördelningarna ger olika beteenden. En väldigt hög kostnad för centrering av flocken kan vägas upp av en väldigt låg kostnad för de andra reglerna.

Försök 13 och 14 ger den bästa bilden av hur värdena fördelar sig i majoritetsfallen, även om det blir lite för extrema värden på centrera flocken samt undvika kollision.

5.2 Jämförelse

När alla körningarna ställs mot varandra och ett medelvärde tas fram syns tydligt hur det finns två olika resultat. Under optimering två, tre, sju, åtta och nio har antalet kollisioner varit maximalt eller nästintill. I dessa fall har även flockens storlek varit betydligt mindre än hos övriga testkörningar. De övriga testerna har mycket mer gemensamt med original versionen, vilket tydligt kan ses i Figur 11 där fem staplar har betydligt avvikande värden.

(18)

0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105

Original GA 1 GA 2 GA 3 GA 4 GA 5 GA 6 GA 7 GA 8 GA 9 GA 10

GA 11 GA 12

GA 13 GA 14

Antal kolliderande boids

Figur 11 Medelvärdet för antalet kollisioner hos alla testkörningarna.

0 1 2 3

Original GA 1 GA 2 GA 3 GA 4 GA 5 GA 6 GA 7 GA 8 GA 9 GA 10 GA 11

GA 12 GA 13 GA 14

Antal boid utanför flocken

Figur 12 Medelvärdet för antalet boids som hamnat utanför flocken hos alla testkörningarna.

I Figur 12 visas antalet boids som inte räknas till flocken. Värdet håller sig runt ett i de flesta körningarna. Det är endast när centrering av flocken får ett väldigt stort värde som flocken håller sig samman under hela testet.

(19)

Resultat

0 0,5 1 1,5 2 2,5 3 3,5 4 4,5

Original GA 1 GA 2 GA 3 GA 4 GA 5 GA 6 GA 7 GA 8 GA 9 GA 10

GA 11 GA 12

GA 13 GA 14

Storlek på flocken

Figur 13 Medelvärdet för flockens storlek hos alla testkörningarna.

Figur 13 visar hur det åter finns två grupper, de med dominerande centralisering har väldigt små storlekar. Testförsök två är dock lite annorlunda, den har en hög vikt på att centrera flocken, men även höga värden på de andra vikterna (se Figur 10, kapitel 5.1).

5.3 Kollisioner

Antalet kollisioner höll sig till låga värden i de fall där regel ett, undvika kollision fick stort utrymme, precis som i originalförsöket. De andra fallen maximerade, eller var nära att maximera, antalet kollisioner. Där låg antalet på mellan 90 och maximala 105, medan resterande försök låg på fem till 15 kollisioner i snitt per mätning (Figur 11 kapitel 5.1).

5.4 Boids utanför flocken

Under vissa omständigheter kan en enskild boids hamna utanför flocken. Det vill säga en, individ åker iväg och får ett för långt avstånd till närmsta flockmedlem. Den viktigaste anledningen beror på att hitta mat tar över framför centreringsregeln.

(20)

0 1 2 3

1 1,24 1,74 2,37 2,99 3,61 4,25 4,87 5,49 6,11 6,74 7,37 7,99 8,6 9,2 9,81 10,4 11 11,7 12,3 12,9 13,5 14,1 14,7 15,3 15,9 16,5 17,2 17,8 18,4 19,4

Sekunder

Antal boids utanför flocken

Figur 14 Antal boids utanför flocken under körning av icke optimerat exempel.

0 1 2 3 4

4 4,39 4,78 5,31 5,69 6,07 6,45 6,83 7,21 7,6 7,98 8,37 8,81 9,45 10,1 10,7 11,4 12 12,7 13,5 14,3 15,2 16,1 17 17,8 18,7 19,6 20,6 21,5 22,5 23,4

Sekunder

Antal boids utanför flocken

Figur 15 Antal boids utanför flocken under körning av optimerad flock nummer 14.

I den tredje optimeringen uppmättes ett resultat med väldigt hög centrering av flocken. I detta fall var heller ingen boid någonsin utanför flocken. Inget fall gav heller några större mängder individer som irrat sig från sin flock. Intressant är dock att den ickeoptimerade fick liknande resultat som optimering nummer 14 (Figur 14 och Figur 15).

5.5 Splittring av flocken

Reglerna handlar bland annat om att hålla ihop flocken. För att avgöra hur väl flocken

(21)

Resultat

0 1 2 3 4 5 6 7 8 9

1 1,24 1,75 2,38 3,01 3,65 4,29 4,92 5,55 6,18 6,8 7,44 8,07 8,67 9,29 9,9 10,5 11,1 11,8 12,4 13 13,6 14,2 14,9 15,5 16,1 16,7 17,3 18 18,7 19,8

Sekunder

Storlek på flocken

Figur 16 Storleken (avståndet mellan de två yttersta boidsen) på flocken under körning av icke optimerad flock.

I Figur 16 visas hur storleken på flocken ser ut när de fasta vikterna används. Vid två tillfällen ökar storleken drastiskt, vilket beror på att flocken går åt olika håll för att skaffa mat.

0 0,005 0,01 0,015 0,02 0,025 0,03 0,035 0,04 0,045 0,05

1 1,91 2,69 3,39 4,07 4,72 5,39 6,04 6,67 7,31 7,93 8,56 9,19 9,82 10,5 11,1 11,7 12,4 13 13,6 14,3 14,9 15,5 16,2 16,8 17,4 18 18,7 19,3 19,9

Sekunder

Storlek på flocken

Figur 17 Storleken (avståndet mellan de två yttersta boidsen) på flocken under körning av optimerad flock nummer tre.

Den tredje körningen av optimeringen gav ett högt värde på centrering av flocken,

(22)

0 1 2 3 4 5 6 7 8 9

4 4,39 4,79 5,33 5,72 6,09 6,48 6,86 7,26 7,64 8,03 8,43 8,92 9,56 10,2 10,9 11,5 12,2 12,8 13,7 14,6 15,5 16,4 17,3 18,1 19 19,9 20,9 21,8 22,9 23,8

Sekunder

Storlek på flocken

Figur 18 Storleken (avståndet mellan de två yttersta boidsen) på flocken under körning av optimerad flock nummer 14.

Den 14:e körningen gav resultat som liknade hur de fasta vikterna var satta. Resultatet kan ses i Figur 18, precis som i Figur 16 syns några toppar, vilka även här kommer sig av att flocken delat sig i jakten på mat. I båda fallen var också centreringen väldigt lågprioriterad, vilket tydligt visar skillnaden mot Figur 17 där den delen hade fått väldigt stor vikt.

(23)

Diskussion

6 Diskussion

6.1 Resultat

Resultatet av optimeringen blev varierande. Dock visade det sig vid flera körningar att vikternas värden höll sig inom vissa intervall. En anledning till variationen är slumpen, den inverkar mycket. Framförallt om maten hamnade långt bort från varandra eller väldigt när varandra. Eftersom bara den närmaste matbiten användes i beräkningen gav inte detta en slitning i flocken på samma sätt. Det går dock dela in försöken i två delar, som gav två resultat. En del gav resultat som påminde om hur de manuella vikterna betedde sig, medan de andra försöken istället fick väldigt stor fokus på att centrera flocken.

Det gick se att vid vissa tester blev det extrema värden, när en regel fick väldigt stort inflytande medan de andra hölls tillbaka. Resultatet blev att den funktionen blev nästan felfri medan de andra orsakade stora mängder fel. Det stora antalet fel visade sig aldrig i andra fall. Lika så fanns det inget test som kunde mäta sina positiva resultat med dessa test.

Chen m.fl. (2006) arbete innehåller en hel del brister. Först är resultatet väldigt svårtolkat. Förutom detta är detaljerna kring försöket väldigt diffusa vilket har gjort att en del antaganden har fått gjorts angående formler och utförande. Det handlar framför allt om variabler som inte helt uttryckligen specificeras, men även om detaljer om försöket som inte tydligt redovisas utan lämnas underförstådda.

Fitnessfunktionen var inte helt felfri. Med tanke på att det framträdde två olika resultat tyder det på att det finns förbättringar att göra. Ett onaturligt bra resultat på en del kan uppväga ett dåligt resultat på andra delar, som till exempel när flockens storlek höll mått som inte rymmer alla boids utan att individerna kolliderar med varandra.

Kriterierna fungerade bra och visade på ett tydligt sätt hur boidsen uppförde sig. Dock hänger de lite ihop, om storleken på flocken är liten, är antalet kollisioner högt och antalet boids som inte räknas till flocken litet.

Det fanns fall som generellt presterade bättre än de manuellt satta vikterna, men också fall som gjorde arbetet sämre. Framför allt de försök som resulterade i en hög vikt för centralisering av flocken gav mycket sämre realism enligt kriterierna. Övriga försök gav resultat som låg runt de manuella vikterna, varken mycket bättre eller mycket sämre.

6.2 Slutsats

Det är väldigt svårt att avgöra om en testkörning är bättre än en annan, om inte alla värden är bättre. Är alla värden bättre är det rätt självklart, men i andra fall handlar det om vad som är viktigast för resultatet.

Det är svårt att säga om resultatet gav en mer realistisk flock. De fall som gav en väldigt centrerad flock borde dock antas inte vara det, då de kolliderade väldigt mycket och även höll individerna på en yta som ger dem väldigt lite utrymme.

Helt klart är att resultatet är mer konkret än Chen m.fl. (2006) resultat där två bilder

(24)

Sammanfattningsvis kan det sägas att optimeringen inte gjorde speciellt mycket i den ena gruppen av fall medan den klar försämrade realismen i det andra fallet. En brist låg i fitnessfunktionens förmåga att inte upptäcka orealistiskt bra resultat, så som när hela flocken har en storlek som med knapp marginal överstiger storleken på en enskild boid.

6.3 Framtida arbete

Det mest påtagliga att fortsätta med är att utöka miljön och reglerna till att innefatta de två utelämnade reglerna från Chen m.fl. (2006). Framför allt vore det intressant att se hur optimeringen fungerar på fler regler. Kommer det att ge ett mer entydigt resultat? Det vore också intressant att fortsätta och kontrollera skillnaderna mellan att ha flockens beteende i en linjärkombination samt att prioritera ett beteende i taget, likt Reynolds (1999) diskuterar. Vidare skulle det finnas ett värde i att testa andra fitnessfunktioner vilka premierar andra beteenden.

Beräkningarna av reglerna skulle också vara intressant att göra om. Det vore intressant att testa skillnaden mellan att räkna på bara en individ i taget (vilket är fallet i detta arbete) kontra att räkna på medelvärdet hos alla aktuella.

Flertalet av de observationer som görs på verkliga fåglar har fallit bort. Att göra en intressantare och mer komplex modell skulle vara en idé. Där beteenden som att avsöka området genom att vrida på huvudet hos varje individ skulle kunna simuleras.

Detta skulle kräva en mycket mer komplex modell av boidsen, men skulle kunna ge ännu bättre jämförelse mot verkliga flockar och observationer av dessa, likt Bekoff (1995).

Det vore också intressant att testa hur andra optimeringsfunktioner skulle klara optimeringen. Speciellt vore det intressant att använda ett neuralt nätverk. Men också hur resultatet skulle variera om andra beteenden premierades, det vill säga att kostnadsformlerna skiftades.

(25)

Referenser

Bekoff, M. (1995) Vigilance, flock size, and flock geometry: information gathering by western evening grosbeaks. Ethology,99 (s. 150--161).

Buckland, M. (2002) AI techniques for game programming. Rocklin, Premier Press.

Chambers, L. (1995) Practical handbook of genetic algorithms volume 1. Boca Raton, CRC press.

Chen, Y., Kobayashi, K., Huang, X. & Nakao, Z. (2006) Genetic algorithms for optimization of boids model. Knowledge-based intelligent information and engineering systems,4252 (s. 55--62). Berlin/Heidelberg, Springer-Verlag.

Cui, X., Gao, J. & Potok, T. E. (2006) A flocking based algorithm for document clustering analysis. Journal of systems architecture, 52(8-9) (s. 505--515). Special issue on nature inspired applications and systems, augusti-september, 2006.

Funge, J. D. (2004) Artificial intelligence for computer games. Wellesey, A K Peters, Ltd.

Helser, A. (1998) Flocking, boids and tag. Final project paper. University of North Carolina. [Elektronisk version]. Tillgänglig på Internet:

http://www.cs.unc.edu/~helser/239/finalproj/239_final_paper.htm [Hämtad 07.04.13].

Reynolds, C. W. (1987) Flocks, herds, and schools: a distributed behavioural model.

Computer Graphics, 21(4) (s. 25--34). ACM SIGGRAPH’87 Conference Proceedings, juli, 1987, Anaheim, California, USA. [Elektronisk version].

Tillgänglig på Internet: http://www.cs.toronto.edu/~dt/siggraph97-course/cwr87/

[Hämtad 07.01.17].

Reynolds, C. W. (1999) Steering behaviors for autonomous characters. Proceedings of game developers conference (s. 763--782). Game Developers Conference, 1999, San Francisco, California, USA.

Russell, J. S. & Norvig. P. (2003) Artificial intelligence a modern approach (andra internationella upplagan). Upper Saddle River, Prentice Hall.

References

Related documents

Detta yttrande har beslutats av generaldirektör Daniel Barr efter föredragning av Analyschef Ole Settergren. I beredningen av ärendet har jurist Johan Schütt och

I konsekvensutredningen uppges att förändringen som innebär att personaloptionen kan användas för att förvärva en teckningsoption och att personaloptionen kan ges ut av ett

I promemorian föreslås följande skrivning i 11 a kap. ”Optionsinnehavaren ska vara anställd i företaget eller inneha ett uppdrag som styrelseledamot eller styrelsesuppleant

Reglerna föreslås i stället gälla för företag där medelantalet anställda och delägare som arbetar i företaget är lägre än 150 och med en nettoomsättning eller

Vid tillämpning av reglerna om villkor för företaget, personaloptionen och optionsinnehavaren ska vad som sägs om företaget gälla det företag i vilket personaloptionen ger rätt

Föreningen Svenskt Näringsliv har beretts tillfälle att avge yttrande över angivna promemoria och ansluter sig till vad Näringslivets Skattedelegation anfört i bifogat

Det gör att systemet blir säkrare i förhållande till att personer kan vilseledas att arbeta för en mycket låg lön med löfte om framtida stora vinster, vinster som i denna typ

Myndigheten för tillväxtpolitiska utvärderingar och analyser (Tillväxtanalys) har mottagit Promemorian Utvidgade regler om lättnad i beskattningen av personaloptioner i vissa fall