Brownian Motion

Innan min arbetsplan var klar hade jag börjat undersöka brownian motion som jag hittade i samband med att jag letade efter information om perlin noise för min bakgrund. Brownian motion upptäcktes utav Robert Brown år 1827. 

Brownian motion är namnet på en modell baserat på en observation som beskriver hur partiklar rör sig. Om man gör den till en graf där man genererar Browniam motion kallas det för  “Random Walk”. Den algoritm jag har använt mig utav för att generera bilder/grafer utav Brownian motion är en Random Walk algoritm i 2D (den är altså uträknad och utrirad i två dimensioner) är relativt simpel och jag lyckades utforma den utifrån den korta beskrivning som finns på Wikipedia. Jag har också tragglat mig igenom delar utav den text som Robert skrev i 1800-talets begynnelse för  och det är en rätt intressant läsning som handlar om hur han observerat små pollen partiklars rörelser och förändringar.

Det jag själv har experimenterat med har gett en del positiva resultat i mån utav användbarhet inom Procedural generation, här kommer ett par utav de textur grafer jag har genererat matematiskt.

Test

Den här bilden i kombination med en Perlin Noise skulle kunna beskriva vart man ska placera vatten tillexempel.

Alternativt att man skulle kunna ha den för att bestämma vart det ska finnas landmassor eller ha den för att styra blandningen utav olika terräng typer.

 

 

 

 

 

 

 

 

 

 

 

Test_x4_smudge_2

Den här bilden är en modifierad version utav algoritmen jag satte ihop och den genererar denna “Random walk” med  med mellanrum och ger en effekt utav en suddigare mer utsmoothad graf. Denna skulle man kunna använda för att beskriva bergskedjor på en kontinent.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Algoritmen jag använder är relativt lättförstådd och jag kommer att utveckla en bättre förklaring med tiden men den fungerar igenom att man väljer ut en punkt att börja på. Man väljer sedan ut en riktning att börja dra ett sträck åt och för varje pixel i bilden väljer vi att addera en ny riktning på den riktning som vi drar sträcket på. Den riktningen som adderas ska vara utav helt slumpmässigt genererad. Eftersom en dator inte kan generera helt slumpmässiga tal måste vi använda oss utav en en slumpgenerator som iallafall försöker efterlikna helt slumpmässiga tal.

Här är ett kodexempel jag skrivit:

http://pastebin.com/LaUCtycm

 

 

 

Brown, R, “A brief account of microscopical observations made in the months of June, July and August, 1827, on the particles contained in the pollen of plants; and on the general existence of active molecules in organic and inorganic bodies.” Phil. Mag. 4, 161–173, 1828

Sammanfattning block 3

Bakgrund

I många av dagens spel används artificiell intelligens och har används sedan ganska tidigt i spelhistorien.

I med hjälp utav den teknologiska utveklingen har vi kunnat bygga mycket mer avancerad AI.

AI används utav spelvärlden för att bland annat skapa ett motstånd i spel så som fiender och monster men också för att förstärka känslan av att spelet är mer levande än vad det egentligen är.

Jag vill undersöka hur spelutvecklare kan dra nytta utav beteenden observerade ifrån naturen.

Och för att specificera mer så vill jag försöka skapa en AI som beter sig som en myra skulle betee sig i olika situationer.

Fråga

Hur kan spelutvecklare använda sig utav observerat beteende ifrån myror som lever i kolonier vid utvecklingen utav en AI?

Arbetsplan:

https://practicalproblem.wordpress.com/arbetsplan-block-3/

 

Metod

Under detta block ville jag undersöka artificiell intelligens som utgår ifrån observerat beteende taget ifrån myror igenom att läsa igenom forsknings resultat och försöka applicera det vid utvecklingen utav en AI.

-Litteratur studie utav beteenden hos myror som lever i kolonier.

– Skapa AI Diagramm/flowcharts för att visualisera hur en simpel AI kan tänka.

– Utföra en spelanalys för att se vilket djup som AI i spel idag kan ha.

– Undersökning med hjälp utav prototyp i C++ Polycode (Safrin I & Polycode Team, 2013) för att se hur det går att anpassa den forskning som finns runt just beteenden ifrån naturen.

 

Beteenden

I min undersökning har jag läst igenom artikeln “Defensive behavior of ants in a mutualistic relationship with aphids” tagen ur Behav Ecol Sociobiol (2005) 59: 321–325.

I artikeln beskrivs tydligt de experiment som utförts på myror som tar hand om bladlöss och hur de reagerar på insekter som blir introducerade till deras territorier.

I undersökningen hittar (Pillips I.D och Willis C.K.R 2005)tydliga beteende mönster hos myrorna som de beskriver med hjälp utav sannolikheter att en myra tillexempel attakerar en viss typ av insekt. Med hjälp utav detta kunde jag skapa diagram som beskriver hur en AI skulle använda detta beteende på et simplifierat sätt.

Diagramen jag skapade är inspirerade utav flowcharts.

flowcharts används inom allt ifrån ekonomi till process teknik och beskriver ett flöde av någonting. I mitt fall beskriver det ett flöde utav logik som flödar ifrån de gråa state lådorna medans de röda lådorna beskriver vilket state som ska bytas till för att fortsätta processa omgivningen. De blåa lådorna är selektorer alltså logiska enheter som bestämmer vilket håll flödet ska flöda.

De gröna lådorna är handlingar som kan utföras.

StateSearching InspectState

 

 

Spelanalys

Jag har analyserat spelet Skyrim (Bethesda Softworks, 2011) och de har använt artificiell intelligens mycket flitigt. I Skyrim finner man alla möjliga sorters djur och monster.

En del djur som lever i Skyrims natur är där för att antingen fylla ut skogarna för att skapa känslan av liv men fyller också syftet att de kan jagas för mat och säljas till de människor som finns i Skyrim.

Skogarna är också fulla utav andra monster som är där för att skapa en utmaning för spelaren igenom att vara aggressiv och vilja ha ihjäl spelaren.

Skyrim skapar en känsla av liv och verklighet igenom att använda sig utav mänsklig AI. De har lyckats ganska bra med att undkomma ”Uncanney valley” igenom att blanda förskriptade konversationer med den artificiella intelligensen.

Om man pratar med en karaktär i Skyrim så kommer karaktären att anpassa sig till hur väl karaktären känner spelaren och ge svar som passar er relation vilket iallafall ger en svag känsla utav att spelet observerar spelarens handlingar. Denna intelligens är ganska så statisk och är mestadels för-inställd dialog som beter och uttrycker sig väldigt mänskligt.

Om denna karaktär skulle ogilla spelaren starkt så kan karaktären gå till attack mot spelaren och då tar den artificiella intelligensen över och gör sitt bästa för att få död så spelaren.

Ett par exempel på typisk djur AI ifrån Skyrim är rådjur de går runt i ett ”roaming state” och letar efter till exempel föda och om den hittar det så stannar den och betar.

Så fort rådjuret hör spelaren börjar det genast försöka komma undan.

En varg däremot har ett territoriellt beteende om spelaren börjar närma sig vargen så kommer den att yla och morra för att indikera att spelaren närmar sig den distansen som vargen kommer att gå till attack på.

I Borderlands är fienderna mycket mer rakt på sak. Oavsett om man försöker smyga sig på dem eller inte så attackerar de direkt så fort man kommer inom en viss distans. De har dock ett par olika sätt att attackera spelaren på vissa kastar is block på spelaren medans andra hoppar på spelaren och skapar förvirring.

Prototyp

I min C++ prototyp letar en myra efter mat och samlar in den.

Myran har den artificiella intelligens som beskrivits ovan och man kan testa hur myran reagerar om man introducerar en annan insekt.

Under utvecklingen av denna simpla prototyp som är skriven i C++ har jag haft en hel del problem. Mestadels eftersom jag inte har arbetat med C++ på en längre stund men också för att ramverket Polycode jag har arbetat med Myra som ltarmatinte är helt färdigbyggt och har en del problem.

 

 

 

 

 

 

 

 

 

 

 

 

 

Resultat

Att använda forsknings rapporter för att göra artificiell intelligens utav djurs beteende är mycket intressant och ett roligt sätt att utföra det på.

Igenom att ta ut de viktiga delarna som handlade om de olika val och de olika ”states” som en myra skulle kunna vara i så blev det ganska lätt att överföra till ett flödesschema som sedan kan användas för att göra objekt kod för en AI.

Att skapa en realistisk AI för spel igenom att använda sig utav forsknings rapporter kan nog vara en aning överflödigt speciellt med tanke på att i ett spel så som Skyrim till exempel så framställs den artificiella intelligensen på ett sätt som spelaren föreställer sig att en viss djurart ska beter sig.

Även om Skyrims AI är mycket utförlig så behöver man inte gå in på lika djup nivå som en forskningsrapport kan göra.

Man behöver alltså till exempel inte förmedla till spelaren att vid vissa årstider då vargarna har ungar så beter sig vargarna på ett annorlunda sätt och de är mer intresserade utav att säkra mat och så vidare.

Spelaren kanske till och med finner detta vara ett overkligt beteende eftersom det inte har förväntats eller att spelaren inte har någon aning om att det brukar beter sig på detta sätt och i och med det reagerar negativt på att vargarna ur spelarens synpunkt beter sig konstigt.

Självklart kan man ha nytta av att veta hur de faktiskt beter sig i naturen men man behöver inte alltid följa verkligheten för att förmedla en känsla av verklighet, vid ljudläggning utav film överdriver man ofta ljudeffekter för att det annars inte skulle kännas verkligt. Man förstärker alltså verkligheten för att få den att kännas verkligare men man går egentligen längre ifrån verkligheten.

Om man utvecklar en simulation av något slag kan det vara en mycket bra ide att använda sig utav forsknings resultat då tanken är att efterlikna verkligheten för att kunna utföra forskning. Men vid användning i spel räcker alltså det upplevda beteendet.

 

 

 

Ai planer

Bestämde mig för att skapa ett par illustrationer som beskriver hur informationen ifrån den föregående posten kan tillämpas i ett AI exempel.

En myra som interagerar enligt beskrivningen ifrån experimenten beskrivs här igenom olika flowsharts.

Varje grå box är ett “State” alltså ett tillstånd som den artificiella intelegensen kan befinna sig i och då utför olika handlingar och byter mellan states för att ta hand om problemen.

Ett state byte sker när flowchartet når en röd nod. En blå nod är en selektor som bestämmer vad som ska hända härnäst. Gröna noder är handlingar.

StateSearchingInspectState StateAttacking