• No results found

Framtida arbete

Ett framtida arbete som skulle kunna göras är att byta ut processoranvändningen och mäta minnesanvändningen istället. Det skulle gissningsvis vara mer intressant att se hur algoritmerna nyttjar datorns minne. Hur mycket minne använder t.ex. CA och DLA när de genererar grottor i olika storlekar. Frågor man kan ställa skulle kunna vara om det är ungefär lika mycket, är det något som går att optimera för att få antingen skillnaden att bli försumbar eller om någon av teknikerna får ett övertag.

Ett tillägg till detta arbete skulle kunna vara att mäta grottornas tillgänglighet, hur mycket av grottan går att nå från en slumpad vald punkt. Skulle tillgängligheten vara för låg skulle extra gångar kunna grävas ut, eller området täppas igen.

Som nämndes kort i slutet av kapitel 6.2 är ett annat framtida arbete att utforska hur voronoidiagram och cellulära automater mäter sig mot varandra i olika storlekskategorier. Det hade kanske även varit lättare att få snarlika grottor eller kartor.

Ett annat arbete skulle kunna vara att jämföra dessa tekniker på s.k. kreditkortsdatorer, t.ex. Raspberry Pi eller Arduino då bra prestanda blir ännu viktigare än hos vanliga PC-datorer. Alternativt på mobiltelefoner av olika modeller och/eller operativsystem för att se hur dessa hanterar algoritmerna.

En viktig del i detta arbete har varit slumptalsgenerering som bestämt bl.a. åt vilket håll partiklarna i DLA ska gå eller om en cell ska börja som levande eller död i CA. Något som skulle kunna undersökas är slumptalsgenereringen och hur den påverkar genereringen. Beroende på språk kan olika verktyg för slumptalsgenerering finnas. I C++ finns t.ex. rand, random_device och mt19937. Rand() är en pseudo-slumpad nummergenerator, random_device genererar heltal som är jämt distribuerade och mt19937 använder sig av Mersenne Twister algoritmen som producerar slumptal av hög kvalité. Att testa hur dessa påverkar både DLA och CA skulle kunna vara ett intressant område att titta vidare på.

Det skulle också vara intressant att titta på hur CA och DLA kan användas inom stadstillväxt, detta arbete skulle kunna titta på hur olika regelverk för CA påverkar stadstillväxten. Hur skulle DLA fungera inom stadstillväxt? Inspiration för detta arbete skulle kunna komma från ett arbete av Lahti (Lahti, 2008) som tittar på just stadstillväxt. Lahti skriver i sitt sammandrag följande:

“[---] Cellular automata has been shown successful in capturing complexity with simple rules. However, there are many uncertainties with the technique and more research is required for adapting it better to an urban context. One of the most important parts in making CA more realistic is to find the transition rules which represent the real pushing and pulling forces. [---]”

(Lahti 2008, s. 5)

I arbetet av Olkerud och Virkes (2013) förslogs brus som ett alternativ till hur bruset CA börjar med i generation noll kunde genereras istället för att slumpa med t.ex. rand() funktionen. Det var inget deras eller detta arbete tittade på så det skulle vara intressant att i ett framtida arbete undersöka hur bra brus lämpar sig för hel eller delvis bangenerering. Hur påverkar olika brusalgoritmer grottornas utseende, är det någon stor skillnad i den slutgiltiga grottan? Fördelen med att det finns en bra mängd med olika brusalgoritmer är att det går att undersöka hur just bruset påverkar resultatet även om reglerna för CA inte ändras.

Vad skulle olika testspelare tycka var mer estetiskt? Cellulära automata eller diffusionsbegränsad aggregation? En studie som skulle kunna genomföras skulle kunna innefatta en enkät som testspelare får besvara efter dem spelat ett antal spelkartor som genererats med hjälp av dessa två tekniker. Där studien undersöker vilka grottor som spelarna uppfattar som mer estetiska. Ytterligare en möjlighet är att undersöka om teknikerna skapar grottor som täcker upp lika stora öppna ytor, eller om den ena kommer utnyttja storleken för

En studie som kan göras tillsammans med denna är att titta på om tiden ökar linjärt med storleken. I detta arbete ökar tiden inte linjärt med antalet generationer, tittar man på t.ex. största kategorin så tog 2 generationer i snitt ungefär 6,5 sekunder att bli färdig medan 10 generationer i snitt tog ungefär 22,9 sekunder. En linjär ökning hade varit om 10 generationer i snitt hade tagit ungefär 32,5 sekunder. Men orsaken till detta är okänd, det skulle kunna bero på att algoritmen inte är implementerad på ett bra sätt eller att något hände under genereringen som fick den att ta längre tid. Detta ger möjlighet för mer forskning, är det ett naturligt beteende hos CA eller var det koden som inte fungerade så bra som den kunnat? I föregående kapitel diskuterades andra användningsområden för både CA och DLA, så det finns utrymme att utforska mer användningsområden. Något som skulle vara intressant som är kopplat till programmering och främst till spel är hur bra dessa två tekniker lämpar sig för att generera t.ex. texturer för miljöer i spel. Kan teknikerna generera t.ex. grästexturer eller berg som ser realistiska ut? Hur realistiska tycker testpersoner att texturerna är om de får jämföra dem mot texturer som är skapade av en grafiker. Är det möjligt att generera mer än texturer, t.ex. hur lava beter sig när det ligger i en vulkan och puttrar eller när det rinner bort från vulkanen? Går det att simulera lava som det beter sig i verkligheten procedurellt med CA och/eller DLA? Skogsbränder var ett användningsområde som visade resultat som ansågs vara realistiska, översätts detta bra mot hur lava beter sig, eller kanske vädersystem?

I förra kapitlet nämndes kort att CA använts för att simulera trafikfenomen som med undantag för ökning och sänkning av hastigheterna fordonen rörde sig i gav realistiska resultat. Hur skulle CA fungera för att simulera t.ex. utrymning av en byggnad, skulle det vara möjligt att med CA simulera verkliga förhållanden? Ett sådant arbete skulle fylla en funktion både i spel och i verkligheten. I ett spel skulle det kunna representera vägen från punkt A till punkt B som ett monster rör sig vilket skulle kunna ge mer realistiska rörelser istället för att använda sig av förutbestämda waypoints som monstret rör sig mellan. Samhällsnyttan skulle vara att det är möjligt att testa om det finns flaskhalsar i byggnader som måste kunna utrymmas snabbt och då kan dessa brister hittas innan något händer på riktigt som skapar problem för människor som försöker komma ut. Skulle DLA kunna användas för att göra samma simuleringar, skulle denna algoritm vara bättre lämpad för detta eller skulle det inte fungera alls? En algoritm som påminner om CA är voronoidiagram. Skulle denna algoritm klara av att skapa realistiska simuleringar för skogsbränder och/eller trafikfenomen? Lämpar sig DLA eller voronoidiagram två bättre till denna typ av simuleringar? Finns det något fenomen som voronoidiagram algoritmen gör bättre än CA?

I det här arbetet har teknikerna anpassats för att skapa grottor som liknar varandra, i normala fall beter sig algoritmerna annorlunda, DLA har en tendens att skapa grottor som påminner om fraktaler medan CA skapar grottor som beroende på generations antal och regler påminner om brus. Ett arbete skulle kunna kolla på hur de olika algoritmerna skiljer sig då mål-utseendet på grottorna inte är neutralt, då denna mer eller mindre påtvingade neutralitet kan påverka resultat.

Referenser

Adams, T. (2016) Dwarf Fortress (Version 0.43.02) [Datorprogram]. Tillgängligt på Internet: http://www.bay12games.com/dwarves/ [Hämtad Maj 16, 2016].

Andersson, F. (2013) Procedurellt genererade provinskartor för strategispel: En jämförelse

mellan Voronoidiagram och Cellular Automata. Kandidatuppsats, Högskolan i Skövde.

Skövde: Högskolan.

Batty, M. Fotheringham, A. Stewart. Longley, P.A. (1989a). Urban growth and form: scaling, fractal geometry, and diffusion-limited aggregation. Environment and Planning A, 1989,

volume 21.

Batty, M. Fotheringham, A. Stewart. Longley, P.A. (1989b). Diffusion-limited aggregation and the fractal nature of urban growth. Regional Science Association, s. 56–57.

Berechet, T. Togelius, J. Mark, B. Mahlmann, T. (2015). Procedural Generation of 3D Caves for Games on the GPU. Foundation of Digital Games, 2015.

Bourke, P.D. (2006) Constrained diffusion-limited aggregation in 3 dimensions. Computers

and Graphics, Vol. 30, no. 4 (2006), s. 646-649. DOI: 10.1016/j.cag.2006.03.011

Cellular Automata Music (2010). [Video] Tillgänglig på Internet: https://www.youtube.com/watch?v=ZZu5LQ56T18 [Hämtad Juni 7, 2016].

Conti, M. Marconi U. M. B (2010) Diffusion Limited Propagation of Burning Fronts. WIT

Transactions on Ecology and the Enviornment, 2010, DOI: 10.2495/FIVA10004.

de Berg, M. de Groot, Marko M. Overmars, Mark H. (1997) Perfect binary space partitions.

Computational Geometry 7 (1997). s. 81-91. DOI: 10.1016/0925-7721(95)00045-3.

Dwarffortresswiki. (2016). 40d:Region. Tillgänglig på Internet: http://dwarffortresswiki.org/index.php/40d:Region [Hämtad Maj 16, 2016].

Encinas, L. H. White, S.H. del Ray A. M. Sánchez G. R. (2007) Modelling forest fire spread using hexagonal cellular automata. Applied mathematical Modelling, Volume 31, issue 6,

June 2007. s. 1213-1227 DOI: 10.1016/j.apm.2006.04.001.

Freedman, D.A, Persi Diaconis, P. (1981). On the histogram as a density estimator: L2 theory.

Zeitschrift für Wahrscheinlichkeitstheorie und Verwandte Gebiete, 1981 DOI:

10.1007/BF01025868.

Game Freak (1996) Pokémon (Version 1.0) [Datorprogram]. Nintendo. Tillgänglig på Internet: http://www.pokemon.co.jp/game/other/gb-rg/summary.html [Hämtad Maj 16, 2016]. Gardner, M. (1970) Mathematical Games: The fantastic combinations of John Conway’s new

solitaire game “life”. Scientific American, 1970, s. 120-123.

Gomilla, L. (2015) Simple and Fast Multimedia Library (version 2.3) [Datorprogram]. Tillgängligt på internet: http://www.sfml-dev.org/ [Hämtad Mars 28, 2016].

Intel. (u.å.). Intel® Turbo Boost Technology 2.0. Intel. Tillgänglig på Internet:

http://www.intel.com/content/www/us/en/architecture-and-technology/turbo-boost/turbo-boost-technology.html [Hämtad: Maj 11, 2016].

King, A. (2015) The Key Design Elements of Roguelikes. Envatotuts+. Tillgänglig på Internet: http://gamedevelopment.tutsplus.com/articles/the-key-design-elements-of-roguelikes--cms-23510 [Hämtad: Februari 10, 2016].

Lahti, J. (2008) Modelling Urban Growth Using Cellular Automata: A case study of Sydney,

Australia. Msc-uppsats, The International Institute for Geo-Information Science and Earth

Observation. Enschede: Universitet.

Nintendo R&D1, Intelligent Systems (1994) Super Metroid (Version 1.0) [Datorprogram] Nintendo.

Game Freak (1997) Pokémon Red (Version 1.0) [Datorprogram] Nintendo.

Johansson, L. (2016) Fraktal och agentbaserad grottgenerering. Kandidatuppsats, Högskolan i Skövde. Skövde: Högskolan.

Johnson, L. Yannakakis, G.N. Togelius, J. (2010) Cellular automata for real-time generation of infinite cave levels. PCGames '10 Proceedings of the 2010 Workshop on Procedural

Content Generation in Games. DOI: 10.1145/1814256.1814266

Lee, Y.K. Hoon, K. (1995) Brownian Motion. Surprise 95. Tillgänglig på Internet: http://www.doc.ic.ac.uk/~nd/surprise_95/journal/vol4/ykl/report.html [Hämtad Januari 28, 2016].

Olkerud, M. Virke, M. (2013) Processuell generering av oändliga spelvärldar: Praktiska

problem och optimering. Kandidatuppsats, Södertörns Högskola. Södertörn: Högskola.

One Laptop per Child (U. å). One Laptop per Child. Tillgänglig på Internet: http://one.laptop.org/ [Hämtad 15 Maj, 2016].

Oxman, G. Shlomon, W. Be´ery, Y. (2014) Computational methods for Conway’s Game of Life cellular automaton. Journal of Computational Science, Vol. 5, issue 1, 2014. s. 24-31. Poleszczuk, J. Enderling, H. (2014) A High-Performance Cellular Automaton Model of Tumor

Growth with Dynamically Growing Domains. U.S. National Library of Medicine.

RogueBasin. (2012a) Diffusion-limited aggregation. Tillgänglig på Internet: http://www.roguebasin.com/index.php?title=Diffusion-limited_aggregation [Hämtad Januari 27, 2016].

RogueBasin. (2012b) Winding ways. Tillgänglig på Internet: http://www.roguebasin.com/index.php?title=Winding_ways [Hämtad Februari 16, 2016] RogueBasin. (2012c) Basic BSP Dungeon generation. Tillgänglig på Internet: http://www.roguebasin.com/index.php?title=Basic_BSP_Dungeon_generation [Hämtad Februari 16, 2016].

RogueBasin. (2014a) Cellular Automata Method for Generating Random Cave-Like Levels.

http://www.roguebasin.com/index.php?title=Cellular_Automata_Method_for_Generati ng_Random_Cave-Like_Levels [Hämtad Januari 29, 2016].

RogueBasin. (2014b) Random Walk Cave Generation. Tillgänglig på Internet: http://www.roguebasin.com/index.php?title=Random_Walk_Cave_Generation [Hämtad Februari 16, 2016]

RogueBasin. (2015) Abstract Dungeons. Tillgänglig på Internet: www.roguebasin.com/index.php?title=Abstract_Dungeons [Hämtad Februari 16, 2016]. Shiffman, D. (2012) Cellular Automata. The Nature of Code. The Nature of Code.

Smith, G. (2015) Interview: How Does Level Generation Work In Brouge?.

Rockpapershotgun. Tillgänglig på Internet: https://www.rockpapershotgun.com/2015/07/28/how-do-roguelikes-generate-levels/ [Hämtad Februari 16, 2016].

Softology (2010). Cellular Automata Music. Tillgänglig på Internet: https://www.youtube.com/watch?v=ZZu5LQ56T18 [Hämtad Juni 7, 2016].

Sundström, T. (2009) Användbarhetsboken. Lund: Studentlitteratur.

The Other Experiment Studio (2013) ETB Update – The Crypts (Unfinished). Tillgänglig på Internet: http://theoestudio.com/?p=332 [Hämtad Februari 5, 2016].

Toy, M. Wichman, G. Arnold, K. (1983) Rogue: Exploring the Dungeons of Doom (Version:

1.0) [Datorprogram]. Tillgänglig på Internet:

http://www.gamasutra.com/view/feature/4013/the_history_of_rogue_have__you_.php [Hämtad Februari 10, 2016].

Yves M. (2014) Map a 2D array onto a 1D array C. Tillgänglig på Internet: http://stackoverflow.com/a/2151141 [Hämtad Mars 31, 2016]

Verruma P. (2015) Game of life. (Version 3.1) [Datorprogram]. Tillgänglig på Internet: http://pmav.eu/stuff/javascript-game-of-life-v3.1.1/ [Hämtad Februari 10, 2016].

Wahlman, K. (2016) BachelorDegreeProject. (Version 1.0) [Datorprogram]. Tillgänglig på Internet: https://bitbucket.org/kimwahlman/bachelordegreeproject [Hämtad Juni 2, 2016].

Walker, B. (2009) Brogue. Tillgänglig på Internet:

http://www.roguebasin.com/index.php?title=Brogue [Hämtad Februari 16, 2016].

Wang, K. Skadron, K. Cellular Automata on the Micron Automata Processor. University of

Virginia Departement of Computer Science.

Watson, B. (2009) Determine CPU usage of current process (C++ and C#). Philosophical

Geek. Tillgänglig på Internet:

Weisstein, E. W. (u.å.) Elementary Cellular Automaton. MathWorld. Tillgänglig på Internet: http://mathworld.wolfram.com/ElementaryCellularAutomaton.html [Hämtad Juni 2, 2016].

Wikipedia (2015) Rogue. Tillgänglig på Internet:

https://en.wikipedia.org/wiki/Rogue_(video_game) [Hämtad Februari 3, 2016].

Wikipedia (2016a) Gameboy. Tillgänglig på Internet:

https://en.wikipedia.org/wiki/Game_Boy [Hämtad April 5, 2016].

Wikipedia (2016b) One Laptop per Child. Tillgänglig på Internet: https://en.wikipedia.org/wiki/One_Laptop_per_Child [Hämtad Maj 15, 2016].

Wikitroid (2016) Maridia. Tillgänglig på Internet: http://metroid.wikia.com/wiki/Maridia [Hämtad Mars 6, 2016]

Wolfram, S. (1983) Statistical Mechanics of Cellular Automata. Reviews of Modern Physics

55, no. 3 (1983), s. 601. DOI: dx.doi.org/10.1103/RevModPhys.55.601

Wolfram, S. Packard, Norman H. (1985) Two-Dimensional Cellular Automata. Journal of

Teknikgalleri

I detta kapitel kommer ett par namngivna och icke-namngivna algoritmer presenteras, syftet med detta underkapitel är att ge läsaren en idé om vad andra tekniker kan producera. Olika spel använder olika tekniker för att generera grottor. Det är inte alltid de använder specifika eller namngivna tekniker utan utvecklarna kan ha ändrat algoritmerna för att få mer unika resultat för sitt spel eller skrivit en ny algoritm som inte har ett namn. I dessa fall finns många gånger ingen information tillgänglig om vilken algoritm som används eller hur den ser ut. Är tekniken okänd kommer ett exempelspel användas för att visa tekniken. Teknikerna kommer inte beskrivas ingående.

Figur 1 En abstrakt grotta (efter RogueBasin, 2015).

Abstrakta grottor (AG) ger en känsla av att grottan är utgrävd och inte naturlig. Jämför man denna typ av grotta med t.ex. CA grottan som syns i Figur 7, har grottan genererad med CA tekniken en mer naturlig form, den känns inte utgrävd.

Figur 2 En “winding ways” grotta (efter RogueBasin, 2012b).

Denna typ av grottor påminner om de grottor turister får vandra runt i. Det är svårt att gå vilse i dem då det bara finns ett fåtal eller inga utstickande gångar man kan gå in i. Dessa är inte jätte intressanta i ett spel. Denna typ av grotta må ha en naturlig form men den ger inget intryck av spänning. Grottorna som tekniken genererar påminner även om gruvor som går djupt in berg.

Figur 3 En grotta genererad med tekniken Binary Space Partition(BSP) (efter

RogueBasin, 2012c).

BSP grottor ger ett intryck av att någon eller något aktivt grävt ut rummen och gångarna. De ser väldigt onaturliga ut. Tekniken påminner lite om AG på grund av att både gångar och rummen har en “designad” känsla. Rummen har raka väggar och gångarna är raka.

Figur 4 Redigerad bild på en grotta från spelet Brogue (Walker, 2009).

Walker berättar vilka mål han hade med bangenereringen för spelet Brouge i en intervju med RockPaperShotgun:

Primarily, my goal was that the dungeon should feel concrete and exciting — not just a flat substrate for monsters and items, but a living and atmospheric place to explore, filled with useful information and tactical significance. Indiana Jones is a good template: a lone adventurer in a hostile place, guided by torchlight, searching for clues, hunting for treasure, surviving by his wits, never knowing when some infernal machinery will activate and cause the floor to collapse, or flesh-eating rats to burst out of the walls, or water to flood the area. I want it to have a hand-designed quality that is revealed in stages as you discover that a hidden lever opens a twisty worm-filled passage to a key that unlocks a vault of hidden artifacts. Procedurally generated levels will probably

never quite close the gap with hand-crafted levels designed by experts, but I want to push it as close to that standard as I can — including for selfish reasons, so that I can explore fresh levels and be surprised by its secrets like any other player.

Smith, 2015

Grottorna som genereras i Brogue ger både intryck av naturliga formationer och områden som har grävts ut med verktyg. Vissa delar av grottorna påminner om CA och DLA (se Figur 9), medan andra delar påminner om BSP som visats ovan.

Figur 5 En grotta som genererats med algoritmen “Drunkard’s Walk” (efter

RogueBasin, 2014b).

Denna teknik påminner om DLA, då utgrävningen sker med en eller flera “agenter” som slumpmässigt gräver ut grottan. Detta ger grottan en mer naturlig form, grottan ser inte ut att vara utgrävd.

Balans i Conway’s Game of Life

Figur 1 Egen skärmdump av CGoL i balans, bild 1 av 2.

Cellulära Automater

I detta appendix syns exempel på hur grottor kan se ut med olika antal generationer. I Figur 1 till Figur 4 syns grottor som har storleken 640x480, I Figur 5 till Figur 8 syns grottor som har storleken 100x100. Dessa grottor har genererats med dödsgränsen tre och födelsegränsen fyra. I Figur 9 till Figur 11 har dödsgränsen två och födelsegränsen tre använts.

Värt att notera är att generationsinställningen för grottan inte betyder att varje generation ser annorlunda ut, hamnar CA:n i balans kan det mycket väl hända att inget händer mellan generationerna.

Figur 1 Grotta som enbart genomgått sin slumpgenerering för cellerna i

grottan. CA tekniken har inte använts ännu.

Figur 3 CA grotta som genererats i tio generationer.

Figur 4 Cellulär automat grotta som genererats i 100 generationer.

Figur 6 CA grotta som genererats i 1 generationer.

Figur 7 CA grotta som genererats i tio generationer.

Figur 8 CA grotta som genererats i 100 generationer.

Figur 9 CA grotta som genererats 1 generationer, med födelsegränsen på 3 och

dödsgränsen på 2.

Figur 10 CA grotta som genererats 10 generationer, med födelsegränsen på 3

och dödsgränsen på 2.

Figur 11 CA grotta som genererats 100 generationer, med födelsegränsen på 3

och dödsgränsen på 2.

Diffusionsbegränsad aggregation

Grottan i Figur 1 grävdes ut av en ensam partikel. Det man kan se är en stor grottor med ett par mindre grottor. De mindre grottorna har uppstått p.g.a. att partikel har krockat med ytterkanten av grottan och då flyttas till en slumpad plats på kartan.

Figur 1 En 640x480 grotta som grävts ut av en partikel, denna partikel kunde

gräva ut upp till 76800 block, 76796 blev utgrävda.

Nedan syns två grottor, grottan i Figur 2 genererades med färre partiklar än grottan i Figur 3. Detta exempel visar hur viktigt det är att anpassa antalet partiklar och ur mycket varje partikel kan gräva ut efter storleken av grottan.

Figur 2 En 640x480 grotta som grävts ut med DLA tekniken.

I Figur 2 kunde totalt 1000 partiklar kunde vara ute samtidigt. Totalt skapades 24 partiklar. Dessa partiklar kunde gräva 3850 block. När genereringen var färdig var 76794 block är vita, resterande 230406 block är svarta. Detta motsvarar ungefär en fjärdedel av grottan.

Figur 3 En till 640x480 grotta som grävts ut med DLA tekniken.

I Figur 3 kunde totalt 1000 partiklar vara ute samtidigt. Totalt skapades 158 partiklar, varje partikel kunde gräva ut upp till 76800 block. När genereringen var klar var 76803 block vita, resterande 230397 block är svarta. Detta motsvarar ungefär en fjärdedel av grottan.

Figur 4 En 640x480 grotta med 1557 skapade partiklar.

Figur 4 visar en grotta där 1557 partiklar har skapats under genereringens gång. Som man ser är det många ”prickar” på bilden, om detta är något man är ute efter eller inte beror helt på vad man kan göra i ett spel som använder en grotta som denna.

Pilotstudie

Analysens kartor

Figur 2 Diffusionsbegränsad aggregations-grottan som syns i Figur 24 i kapitel

5.1.

Related documents