EXAMENSARBETE. Developing tactical group-based game-ai

Storlek: px
Starta visningen från sidan:

Download "EXAMENSARBETE. Developing tactical group-based game-ai"

Transkript

1 EXAMENSARBETE 2010:010 HIP Developing tactical group-based game-ai Bo Isaksson Luleå tekniska universitet Högskoleingenjörsprogrammet Datorspelutveckling Institutionen för LTU Skellefteå 2010:010 HIP - ISSN: ISRN: LTU-HIP-EX--10/010--SE

2 I. Förord: Detta examensarbete utfördes under hösten 2009 på Arrowhead Game Studios i Skellefteå. Personligen har Artificiell Intelligens(AI) varit den aspekt av spelutveckling som överlägset intresserat och inspirerat mig mest. Det finns något i ämnet som ligger utöver att bara skapa vacker grafik som grafikprogrammerare, eller skapa ett intuitivt gameplay som gameplayprogrammerare. Det handlar om att skapa förutsättningarna för distinkta personligheter, som beter sig olika utefter förutsättningar, om att skapa något som går utöver ren och skär matematik och data. Det fascinerar mig och står som grund till mitt val av examensarbete. Jag skulle här också vilja tacka alla på Arrowhead Game Studios som tagit emot mig väl och bjudit på en mycket trevlig arbetsplats och många skratt under lunchkonversationerna. II

3 II. Sammanfattning: Detta arbete har haft som mål att skapa en flexibel strategisk gruppbaserad artificiell intelligens till Arrowhead Game Studios spel Magicka, genom att implementera, använda och undersöka olika AItekniker som ofta används i mer eller mindre mån i ett antal andra kommersiella spel. Tanken har varit den att det färdiga resultatet ska passa ovan nämnda spelprojekt så bra som möjligt och däri har utmaningen legat. Utvecklingen har skett med C# som programmeringsspråk och implementationen av de olika teknikerna har gjorts så flexibel som möjligt för att vidareutveckling och utökning av AI-regler etc. kan ske smidigt och enkelt. Abstract: The goal of this work has been to create a flexible strategic group-based artificial intelligence for the Arrowhead Game Studios-game Magicka, by implementing, using and examining different AItechniques that's used in many commercial games in more or less extent. C# is the programming language that has been used in the development, and the implementation has been made as flexible as possible to make further development and extending AI-rules etc. easier. III

4 III. Ordlista: AI - Artificial Intelligence, artificiell intelligens är vetenskapsområdet inom vilket man försöker simulera riktig intelligens i maskiner och program. Agent Benämning på enhet som använder sig av artificiell intelligens. A-Star Heuristisk algoritm för att hitta bästa vägen mellan två punkter. Fuzzy Logic Luddig logik skapad för att simulera tänkande i lingvistiska variabler som t.ex. ganska långt eller helt ok. Garbage Term för icke refererad data i minnet. Poppa Att poppa en lista innebär att man avlägsnar och returnerar det element som ligger först i kön. Script Kod skriven utanför den generella källkoden, ofta till för enkla ändringar utan att behöva vara insatt i källkoden. Statemachine Är ett system som beskriver ett beteende med hjälp av ett antal tillstånd(states) samt hur dessa övergår till varandra. IV

5 Innehållsförteckning: I. Förord II. Sammanfattning III. Ordlista 1. Inledning 1 2. Teori Fuzzy Logic Lingvistiska variabler & Fuzzyfiering Fuzzyregler Åtråvärdhets-värden & defuzzyfiering 2.2. Gruppbeteenden Boids Övriga tekniker 5 3. Metod & Resultat Fuzzy Module, utförande Fuzzy Module, Design Grund Påbyggnader Gruppbeteende, Utförande Additionell styrning Gruppbeteende, Design Övriga tekniker Meddelandesystem Tillstånd Diskussion & Utvärdering V

6 1. Inledning: Syftet med detta examensarbete har varit att undersöka olika AI-tekniker för att tillämpa dem i spelet Magicka som utvecklas av Arrowhead Game Studios. Spel-AI är ett ämne under ständigt utveckling och som fascinerar samt intresserar många, inräknat mig själv. Jag ville därför fördjupa mina kunskaper inom AI och utforska olika tekniker och hur de bäst tillämpas i praktiken i ett spelprojekt vilket tillför både möjligheter och begränsningar. De begränsningar som naturligt infaller beror till viss del på hur spelet är designat, hur miljöer är utformade och hur olika agenter är menade att bete sig. Den andra stora begränsningen är givetvis prestandarelaterade; AI:n får inte vara alltför tung att köra och ta upp för mycket av uppdateringstiden. Häri finner man syftet med denna undersökning; vilka tekniker kan man tillämpa och på vilket sätt kan jag använda dem i projektet utefter förutsättningarna? 1

7 2. Teori: För att bryta isär arbetet i beståndsdelar delade jag upp uppgiften i två olika, större problemområden. Dessa är beslutsfattande och rörelsemönster, alltså två distinkta men avgörande beståndsdelar i min AI-implementation. 2.1 Fuzzy Logic: Innan jag kom in i projektet på Arrowhead var en del av AI-strukturen redan byggd, men en av mina uppgifter blev att implementera ett naturligare beslutssystem för enheterna i spelet. För att simulera ett trovärdigt,oberäkneligt och naturligt beslutsfattande finns det en teknik som lämpar sig bättre än många andra, s.k. Fuzzy Logic Lingvistiska variabler & Fuzzyfiering: Fuzzy logic är en teknik för att få beslutsfattande för olika AI-agenter att verka mänskligt, att inte agera på hård data som t.ex. attackera på 10 meters håll, utan attackera när fienden är ganska nära. Begrepp som definieras är: nära, ganska långt och långt bort som sedan används i beslutsfattandet. Dessa termer är mängder och kan vara delar av varandra (se bild nedan). Som ett exempel använder vi begreppen nära och ganska långt för att beskriva hur processen går till. Nära definieras av avståndet 0 meter ifrån agenten till 10 meter ifrån agenten. Ganska långt definieras i sin tur utav avståndet 7 meter ifrån agenten till 15 meter ifrån agenten. Ifall agentens mål ligger på avståndet 9 så kommer det att både ligga inom mängden nära och mängden ganska långt. Genom att veta graden av nära och graden utav långt bort kan man sedan räkna ut ett s.k. fuzzy-värde. Ett fuzzy-värde får man genom att skicka in ett input-värde i den implementerade fuzzymodulens fuzzify-funktion. Där räknas värdets medlemskap ut i de olika mängderna: Genom att man definierat upp mängderna i ett set där de är representerade som t.ex. trianglar(som i bilden nedan) eller kurvor, kan man få ut medlemskapsgraden(degree of Membership eller DOM) genom att dra en vertikal linje från input-värdet och se där den vertikala linjen skär linjen för en av mängderna. Illustration 1: Medlemskapsgrad 2

8 2.1.2 Fuzzyregler: För att få ut något ur fuzzy-värden används fuzzy-regler. Reglerna definieras av typen: FÖRSATS ger EFTERSATS eller t.ex. FÖRSATS OCH FÖRSATS ger EFTERSATS och med lingvistiska variabler t.ex: nära OCH ganska svag ger väldigt åtråvärt. Den senare kan användas för att räkna ut t.ex. hur åtråvärt det är att attackera en fientlig enhet. Regler måste täcka alla möjliga utgångar[1] för att man skall kunna räkna ut ett fuzzy-värde, ovanstående regel kan ingå i ett regel-set som kan se ut så här: FÖRSATS LOGISK OPERATOR FÖRSATS EFTERSATS nära OCH svag väldigt åtråvärt nära OCH ganska svag väldigt åtråvärt nära OCH stark åtråvärt ganska långt OCH svag väldigt åtråvärt ganska långt OCH ganska svag åtråvärt ganska långt OCH stark ej åtråvärt långt OCH svag åtråvärt långt OCH ganska svag ej åtråvärt långt OCH stark ej åtråvärt Man kan använda andra logiska operatorer såväl som fler försatser i sina regler, men fler försatser kommer att innebära att man måste definiera upp fler regler. regel-set växer exponentiellt. En försats kommer ge 3 regler, två ger 9 och tre ger 27. Man måste tänka på hur komplexa regler man vill ha för att inte antalet regler skall växa explosionsartat. Det finns sätt att skriva om reglerna så de växer linjärt istället [2], men om en implementation endast kräver ett mindre antal försatser är det inte nödvändigt Åtråvärdhets-värden & de-fuzzyfiering: Efter att man räknat ut fuzzy-värden för försatserna och applicerat ev. logiska operatorer på dessa får man ett resultat i form av ett fuzzy-åtråhetsvärde för varje regel. I många fall får man flera utslag(värden över 0) av samma lingvistiska variabel, t.ex. termen åtråvärt. I dessa fall får man använda sig av någon metod för att välja ett av dem, t.ex. räkna ut medelvärdet eller tillämpa den logiska operatorn ELLER på värdena. Fuzzy-åtråhetsvärdet kan ses som tilliten för hur åtråvärt någonting är och används för att kapa de lingvistiska termerna i åtråvärdhets-setet. T.ex. om termen åtråvärt Illustration 2: Åtråvärdhetsset 3

9 har tilliten 0,45 kapas mängden åtråvärt i setet till den nivån. Alla termer i setet kapas till deras tillits-nivå. För att få ut ett s.k. crispvärde, ett värde man sedan kan använda i beräkningar för att beskriva viljan att utföra en uppgift, måste man de-fuzzyfiera sina fuzzy-värden. Det finns ett antal metoder för att räkna ut crispvärdet och den jag tittat närmare på är average of maxima metoden. Formeln för denna är: Crispvärde = (Σ rep.värde * tillit)/ Σ rep.värde där rep.värdet (representativt värde) är högsta värdet i mängden, som t.ex. högsta punkten i en triangel. Andra alternativ till denna metod kan vara den inexakta men snabba mean of maximummetoden, där man tar medelvärdet av utdatan med det högsta tillitsvärdet, eller centroidmetoden som är väldigt exakt, men krävande. Centroid-metoden går ut på att se det kapade åtråvärdhets-setet, som en enhet med massa och räkna ut dess tyngdpunkt. Där tyngdpunkten är ligger är crisp-värdet. Average of maxima är en kompromiss mellan dessa och lägger sig mellan dem i exakthet och tidskostnad[3]. 2.2 Gruppbeteenden: I projektet fanns redan en implementerad A-star pathfinding för AI-agenterna, men eftersom det är väldigt krävande att på flera agenter köra en pathfinding-algoritm hela tiden för att hitta fram, så behövdes en annan lösning. Med gruppbeteenden kan man komma ifrån detta. Genom att låta agenterna styra i grupp efter en ledare som använder traditionell A-star får man inte bara en mer kostnadseffektiv målsökning utan ett beteende där agenter rör sig i grupp och reagerar i förhållande till varandra, istället för att söka sig till målet oberoende av varandra och röra sig på led i ett väldigt förutsägbart mönster Boids: För att simulera ett trovärdigt grupp-/flockbeteende finns en metod som kallas boids. Skapat av Craig Reynolds 1986 simulerar det flockbeteendet hos fåglar och fiskar m.m. [4] Metoden bygger på tre grundkoncept: Separation: Viljan varje agent har att röra sig ifrån sina grannar. Illustration 3: Separation 4

10 Cohesion: Viljan varje agent har att röra sig mot sina grannar. Illustration 4: Cohesion Alignment: Viljan att vilja röra sig i samma riktning som sina grannar. Illustration 5: Alignment Genom att varje agent styr efter dessa regler inom en radie varifrån de påverkas av sina grannar skapas ett beteende som kan vara förbluffande likt flockdjurs rörelser. För att vidare utveckla komplexiteten i beteendet kan man införa flyktbeteenden, jaktbeteenden m.m. 2.3 Övriga tekniker: I addition till ovan nämnda tekniker behövs andra tillägg för att skapa en levande och intressant artificiell intelligens. En AI-statemachine fanns redan sedan tidigare i projektet, men vissa nya tillstånd och additioner till redan implementerade behövdes. Även ett flexibelt message-system för att sända meddelanden från en agent till andra är mycket användbart. Dessa var uppgifter som utöver huvudinriktningarna behövdes för att nå projektets mål. 5

11 3. Metod & Resultat: Till en början tog jag mig tid att analysera programkoden för att förstå den övergripande designen och se hur implementationen av de valda AI-teknikerna skulle gå till. Jag bestämde mig för att implementera fuzzy-logic först. Det är ett väldigt komplext ämne, och eftersom det kan användas i många olika delar av AI-implementationen kändes det naturligt att börja med det. 3.1 Fuzzy Logic, Utförande: Jag modellerade min modul mycket efter ett exempel ifrån boken Programming Game AI by Example av Mat Buckland. Nämnda exempel beskriver en väldigt flexibel och relativt lättförståelig fuzzymodul som passar till de flesta syften. Eftersom min implementation var i C# och exemplet är skrivet skrivet C++ var det fråga om en översättningsprocess, men det var en faktor som inte tog nämnvärt mycket tid Fuzzy Module, Design: För att implementation och testning av modulen skulle gå så fort som möjligt höll jag designen enkel Grund: Grundliga delar är: Fuzzy-module: klassen som ligger i grunden för modulen som helhet. Används för att lägga till nya sets, regler och innehåller fuzzify- och defuzzifyfunktionerna. Alla enheter eller objekt som kan tänkas ha en fuzzy-beslutsamhet ska kunna ha ett eget fuzzymoduleobjekt. FuzzyLinguisticVariable: klass för representation av en lingvistik variabel. FuzzyRule: klass för representation av en fuzzyregel, består av en samling försatser och en eftersats. FuzzySet: klass för representation av ett fuzzyset, denna skrevs för att hålla tre lingvistiska variabler för att hålla komplexiteten låg Påbyggnader: De utökande delarna är: Logistiska operatorer: Dessa begränsades till två olika eftersom mer komplicerade regler inte bedömdes nödvändiga. FuzzyAND: klass för representation av en logisk OCH-operator. FuzzyOR: klass för representation av en logisk ELLER-operator. 6

12 Mängdset: Tre enklare setformer finns representerade i modulen och dessa är: TriangleSet: Triangelformat set definierat av ett högeroffset, ett vänsteroffset och en topp. LeftShoulderSet: Axelformat set åt vänster definierat av offset och en topp. RightshoulderSet: Axelformat set åt höger definierat av offset och en topp. Illustration 6: TriangleSet Illustration 7: LeftShoulderSet Illustration 8: RightShoulderSet Dessa klasser är utbyggnadsklasser som används för att skapa set och regler. Vid behov kan man utöka modulen med fler logiska operatorer och nya set. För att testa modulen byggdes först ett ruleset för agenters val av attack-mål, baserat på avstånd och fiendens hälsa. Två försatser ger nio regler, vilket går snabbt att definiera, samt så är de relativt enkla att testa. Detta ger snabbt en bra indikation på att modulen fungerar som den ska. Efter att testerna gjorts utökades rulesetet även med aggression mot fiender. Reglerna byggde alltså på tre försatser, vilket gav 27 olika regler i rulesetet. Det gav ökat komplext beteende samtidigt som rulesetet inte blev opraktiskt stort och svårimplementerat (se Fuzzyregler). 7

13 3.2 Gruppbeteende, Utförande: Implementationen av gruppbeteende, utvecklingen och påbyggnaden av denna var en stor del av arbetet. Den skedde stegvis där de tre första grundläggande boids-reglerna, separation, cohesion och alignment (se Boids), skrevs och testades en efter en. Den första iterationen av utvecklingsprocessen fokuserade på att applicera de tre grundreglerna för att agenter skulle följa en ledande agent som söker sig mot ett mål med hjälp utav A-star pathfinding. Enbart de tre grundreglerna räcker dock inte långt för att skapa ett beteende som känns mer intelligent än planlös flockrörelse. I senare iterationer gjordes flockbeteendet mer fristående ifrån att bara följa ledaren till att fungera generellt med en egna styrkrafter som kan appliceras i ledarens riktning Additionell styrning: Med tiden utvecklades gruppbeteendet vidare för att utöver grundreglerna innefatta ett flertal styrkrafter: Wander: Genom att styra mot en slumpvist vald position inom ett visst avstånd och en viss radie skapas ett planlöst vandrande för agenten som kan användas både som det är, men också kan det adderas till ordinarie beteende för att skapa ett oorganiserat intryck. Illustration 9: Wander LeaderFollow: En vilja att förflytta sig mot ledarens position, nödvändig för annat beteende än planlöst vandrande. Illustration 10: LeaderFollow 8

14 PostionFollow: En vilja att förflytta sig mot en slumpvis position i en formation bakom ledaren. Antingen i en triangelformad formation eller rektangelformad. Detta beteende gick igenom många iterationer innan den slutgiltiga formen fastställdes. Till en början skapade jag ett beteende där ett antal agenter rörde sig i en strikt formation bakom en ledare. Även om det i vissa fall fungerade väldigt bra gick det bort på grund av dynamiken som krävdes då miljöerna är varierande och väggar och stup försvårar formationshållandet. Eftersom medlen för att kontra dessa problem som t.ex. fysikcheckar kostade mer än vad det gav valdes den enklare lösningen nämn ovan i stycket. Pursuit: Pursuit-kraften är viljan att genskjuta sitt mål. För att göra detta räknas en kraft ut proportionell mot målets hastighet och riktning riktad framför målet. Ifall målet är rakt framför söker sig agenten givetvis direkt till målet. Detta utbyggnadsbeteende är kanske det som gör störst skillnad på gameplay om det är använt och ger ett mycket mer levande intryck. Samma uträkningar används även för att räkna målpositionen för agenter som använder sig av A-star pathfinding och för uträkningar för projektilskjutande agenter. Illustration 11: PostitionFollow Illustration 12: Pursuit Gruppbeteende, Design: Det direkta tillvägagångssättet att implementera de tre grundkoncepten till en första början är att ge dem varsina funktioner, men detta blir snabbt onödigt krävande i takt med att antalet agenter växer i antal. Eftersom varje agent måste kolla vilka agenter som är inom dess cirkel av inflytande blir funktionen kvadratisk, d.v.s. alla kollar alla. Lösningen på detta blev att skriva ihop alla beräkningar i en loop, vilken i sin tur blir något oöverskådlig men samtidigt mycket mer effektiv. En andra optimering kommer ur frågeställningen; hur många agenters riktningar behövs egentligen för att bilda en fungerande flock? Att begränsa antalet agenter som undersöks inom influens-cirkeln borde inte påverka slutresultatet märkvärdigt. Om en agent A påverkas av t.ex. tio grannar kommer en annan agent B indirekt påverkas av dessa ifall någon av de tidigare nämnda grannarna inte räknas med men ändå är inom influens-cirkeln, förutsett att den räknar med den först nämnda 9

15 agenten A. Efter snabb implementation fungerade funktionen till synes som förut, men komplexiteten gick ned från en potentiell O(n²) till O(n). Antalet vektoroperationer i gruppbeteendet är många och för att optimera de metoderna användes referenser och vektorklassens egna funktioner, som t.ex. multiply eller divide, i enlighet med artikeln Optimizing performance of XNA on Xbox 360 (vilken beskriver många generella optimeringsmetoder, inte nödvändigtvis och enbart för Xbox 360). Direkt och upprepat nyttjande av vektorer kan bli krävande då de alltid kopieras till stacken när de används, och detta kan leda till att större delen av sagda metods exekverings-tid utgörs av kopiering snarare än till de vektoroperationer som skall göras. Genom användandet av referenser kopieras inte datatyperna till stacken för användning, utan metoderna använder datan direkt. Användning av vektorfunktionerna ger möjligheten att använda referenser till skillnad mot de vanliga operatorerna '*' eller '/' [5]. Som det också står i ovan nämnd artikel blir koden något oöverskådlig, men i detta fallet var det av mindre betydelse då tillfället för optimeringen var i slutfasen på examensarbetet och det främst var en fråga om konvertering av kod som var i ett litet behov av eventuell vidareutveckling. En annan svårighet med ett stort antal vektoroperationer är att olika styrkrafter ofta motverkar varandra, detta skapar ett ryckigt rörelsemönster där agenter kan stå på samma plats och vända sig fram och tillbaka och agera väldigt konstigt. Att man kommer stöta på detta förr eller senare när man arbetar med styrkrafter är nog mer eller mindre oundvikligt om man inte är beredd på problemen som medföljer. Lösningen är dock enkel. Genom att spara undan den resulterande styrvektorn från ett godtyckligt antal (detta får man testa sig fram till) uppdateringar, och räkna ut medelvärdet för dessa, får man ut en vektor som sedan används av agenten istället. Detta ger ett mycket mjukare rörelsemönster och det enda man behöver tänka på är antalet uppdateringar man skall räkna medelvärdet för. För få hjälper lite och för många kan resultera i att agenten inte ändrar riktning tillräckligt ofta. Eftersom gruppbeteendet alltid var tänkt för att underlätta prestandan genom att ett antal agenter följer en ledare infördes även en ökning av separation-viljan när en agent är inom en liten radie runtom ledaren. Detta för att ledaren ska kunna komma fram obehindrat till dennes mål. Det är ett bra exempel på hur man kan utveckla sitt gruppbeteende för ett speciellt spel med enkla medel. Miljöerna i spelet skiftar kraftigt i utformning och agenterna är tvungna att ha ett fysikcheck för att se vart de är på väg så att väggar undviks. Detta sker genom att en check för kollisioner sker på ett lämpligt avstånd framför dem t.ex. 1,5 m. Sker detta byter agenten från att styra genom flockregler till att köra en A-star pathfinding en kort stund. Illustration 13: Miljöerna varierar med bl.a. broar och stup. Magicka Arrowhead Game Studios 10

16 För att däremot kolla efter stup fungerar inte fysikcheck. Lösningen på det problemet var att beräkna närmsta nod till punkten agenten för tillfället styr, är denna nod lokaliserad ifrån styrpunkten på ett avstånd större än det vanliga avståndet mellan noderna betyder det med stor sannolikhet att styrpunkten ligger i tomma intet och därav ut över ett stup. Lösningen på detta var även här att köra en tillfällig A-star pathfinding för att på så sätt få agenten på rätt kurs. Flockbeteendet är fullt scriptat för att man skall kunna skapa det beteende man vill för vilken fiendetyp man vill. För alla styrkrafter kan man scripta in en multiplier för att förstärka, försvaga, eller helt eliminera kraften. För att skapa det oorganiserade kaotiska beteendet hos små goblins är wander-beteende väldigt framträdande, tillsammans med viljan att följa ledaren får man resultatet att de rör sig i en vild oorganiserad flock med ett inslag av målmedvetenhet. För att ge ett organiserat och strategiskt intryck som hos de mer rustade goblin warriors ger man dem stark vilja att följa formation, ha mycket alignment och cohesion. Med rätt inställningar ger man intrycket att de rör sig i organiserade formationer. Gruppbeteendet kan man om man vill helt slå av, som t.ex. hos större fiender som troll vilka är relativt få samtidigt. Att dessa fåtal troll skulle röra sig i grupp skulle eventuellt se konstigt ut. Det är viktigt att göra en spel-ai så flexibel som möjligt så att man skall kunna påverka den så mycket som möjligt utan att behöva vara mycket insatt i programmering. Illustration 14: Agenterna kommer i olika former och storlekar. Magicka Arrowhead Game Studios 3.3 Övriga tekniker: I addition till det övriga innehållet skrevs ett messagesystem för att skicka olika meddelanden mellan och till agenterna. Ett smidigt sådant system kan vara mycket användbart för många olika situationer såsom när en agent behöver använda sig av tidigare nämnd temporär A-star pathfinding( se Gruppbeteende, Design). Då en sådan situation sker skickar agenten ett meddelande till sig själv om att sluta använda pathfinding. Detta meddelande försenas ett antal sekunder för att agenten ska hinna utföra sin uppgift innan meddelandet kommer fram och får agenten att byta tillbaka till flockbeteende Meddelandesystem: Messagesystemet är enkelt att implementera och är intuitivt att använda. Min implementation är inspirerat av systemet i exemplet WestWorld with messaging [7] ifrån boken Programming Game AI by Example, vilken erbjuder den flexibilitet som jag var ute efter. Något enklare än förlagan innehåller den en klass för representation av ett meddelande, vilket innehåller data som visar avsändare, mottagare, typ av meddelande samt övrig information ifall det behövs, som t.ex. en vektor för representation av en position. Utöver meddelandeklassen finns en klass för skapande och distribution av meddelanden, MessageDispatcher. Denna är byggd som en singelton eftersom det bara behövs en instans som behandlar 11

17 meddelandena i spelet. MessageDispatcher innehåller en lista där meddelandena sorteras in efter vilken tid de skall skickas. För detta ändamål använde jag mig av en listtypen SortedList. Med denna typ av lista kan man även fastställa storleken när man definierar upp den, vilket stämmer bra överens med förhållningsreglerna beskrivna i artikeln Optimizing performance of XNA on Xbox 360. Genom att veta hur stor en lista maximalt kommer vara skapar man inget garbage genom att listan aldrig behöver göras större [8]. När MessageDispatcher uppdateras kollas sändningstiden på meddelandet högst upp i listan ifall det är tid att skicka iväg det. Listan poppas fram till att sändningstiden på det aktuella meddelandet är senare än den aktuella uppdateringstiden. På så sätt får man ut meddelandena på ett snabbt och effektivt sätt. Varje agent har sedan en funktion för hantering av meddelanden. Beroende på vilket meddelande som ankommer utför agenten olika handlingar Tillstånd: I en modern spel-ai är det i det närmaste otänkbart att inte ha en implementerad statemachine. Innan jag kom in i projektet så var det, likt nämnt ovan, redan implementerat en statemachine med vanliga tillstånd som move, idle och attack. En av mina uppgifter på Arrowhead Game Studios var att implementera nya tillstånd och arbeta med gamla sådana. Gruppbeteende-arbetet skedde mycket inom move-tillståndet, medans nya tillstånd var jump-state och kanske framför allt aggressive idle-state. Det sistnämnda är ett bra exempel på hur utomstående testares feedback har en direkt påverkan på AI-utvecklingen. Under testningen av Magicka under DreamHack Skellefteå, anmärkte ett antal testare att det var skönt de gånger agenterna inte funkade precis som de skulle och stannade, eller sprang åt andra håll, istället för att attackera. Detta gav ett andrum i ett annars hektiskt speltempo. Efter detta ombads jag skriva ett aggressive idle-beteende, alltså ett beteende där agenterna inte direkt attackerar utan agerar aggressivt på avstånd. För att skapa detta beteende gavs varje agent ett curage-value som beskriver dess mod. Det är lågt till en början, men ökar linjärt medan de befinner sig i ett aggressive idle-tillstånd, och när modet är högt nog attackerar de. I närhet av agentens mål minskar i sin tur modet i förhållande till avståndet, vilket till slut resulterar i att de flyr för att känna sig säkra så att modet kan öka igen. I beteendet ligger också att agenter flyr ifall fienden kommer för nära, innan modet blivit tillräckligt högt. Modet och radien för aggressive idle-reaktion är scriptat och kan ställas in för att skapa ett speciellt beteende i varje fiendetyp. 12

18 4. Diskussion & Utvärdering: Detta examensarbete riktade sig till att utveckla en strategisk gruppbaserad AI, och det har erbjudit många spännande utmaningar och gav många nya lärdomar. Det slutgiltiga resultatet var lyckat, det bestod av en vidareutvecklad AI med fungerande fuzzy logic, ett välfungerande scriptbart gruppbeteende och andra nyttiga lösningar på problem. Eftersom jag hade en begränsad tid på mig var det viktigt att göra allt så intuitivt och flexibelt som möjligt för att användande och vidareutveckling ska vara så enkel. Det har jag gjort så gott som möjligt med utformandet av rulesets, scripting osv. Fuzzy logic är ett avancerat ämne, men att titta på en annan implementation hjälpte mycket för förståelsen och min egen implementation fungerade förvånansvärt snabbt och enkelt. Det är ett kraftfullt sätt att skapa en intressant och mer oförutsägbar grund för beslutstagande hos agenter. Att skapa upp regler och allt annat som hör till beslutsfattande kan dock kosta lite tid, men resultatet man får ut tycker jag gör det värt besväret många gånger. En av inriktningarna för arbetet var att skapa en strategisk AI, men strategiska aspekten av AI:n blev dock lidande av ett antal orsaker. Kanske främst spelets utformning med tanke på tempo och miljöer. Tempot gör det svårt att implementera mer avancerade strategier och begränsningarna miljöerna gav gjorde det svårare att implementera ett mer invecklat formationssystem, vilket jag la ned mycket tid på men inte riktigt lyckades skapa som jag planerat i början. Det hade givetvis varit enklare att jobba med sådana saker om man kunnat planera AI:n från början i projektet sida vid sida med andra finesser, men så var ju inte fallet och däri låg en stor del utav utmaningen med examensarbetet. Den strategiska aspekten bestod i slutändan av möjligheten att skapa enklare men mer dynamiska formationer, koordinerade pilskyttar som agerar på skjutmeddelanden från ledare, väntan inför attacker, val av attacksätt och förmåga att förutse målets framtida position. Eftersom det i slutändan är ett spel man utvecklar är inte det faktiska strategiska djupet det viktigaste utan att spelaren skall uppleva det som taktiskt. Gruppbeteendet var i övrigt ett mycket effektivt sätt att göra AI:n mer levande och spännande. Med relativt enkla medel kan man skapa beteenden som skiljer sig markant från andra. Ett utvecklat boids-beteende var ett givet inslag i spelet som har både spelmässiga som prestandamässiga fördelar. 13

19 Referenser: [1] Buckland M, Programming Game AI by Example, Wordware Publishing Inc, Plano, 2005, pp. 452 [2] Buckland M, Programming Game AI by Example, Wordware Publishing Inc, Plano, 2005, pp. 452 [3] Buckland M, Programming Game AI by Example, Wordware Publishing Inc, Plano, 2005, pp [4] Reynolds C. W., Flocks, Herds, and Schools: A Distributed Behavioral Model, 1987 [5] Leischner N, Liebe O,Denninger O, Optimizing performance of XNA on Xbox 360, 2008, pp. 5-6 [6] Leischner N, Liebe O,Denninger O, Optimizing performance of XNA on Xbox 360, 2008, pp. 6 [7] Buckland M, Programming Game AI by Example, Wordware Publishing Inc, Plano, 2005, pp [8] Leischner N, Liebe O,Denninger O, Optimizing performance of XNA on Xbox 360, 2008, pp. 4 Källor: Illustration 3-5: 14

Kognitionsvetenskapliga Programmet LiU. AI i spelet Magicka. Gruppbeteende/Grupprörelser. Jonathan Nilsson

Kognitionsvetenskapliga Programmet LiU. AI i spelet Magicka. Gruppbeteende/Grupprörelser. Jonathan Nilsson Kognitionsvetenskapliga Programmet LiU AI i spelet Magicka Gruppbeteende/Grupprörelser Jonathan Nilsson jonni544@student.liu.se 2011-09-01 2 Sammanfattning Den här fördjupningsuppgiften kommer handla om

Läs mer

729G11 Artificiell Intelligens Marcus Johansson Marjo581. Fuzzy logic. Marcus Johansson Marjo581

729G11 Artificiell Intelligens Marcus Johansson Marjo581. Fuzzy logic. Marcus Johansson Marjo581 Fuzzy logic 880328-2535 Innehåll Fuzzy logic... 1 1. Inledning... 4 2. Jämförelse mellan fuzzy logic och tvåvärdeslogik.... 4 3. Fuzzy sets.... 4 4. Linvistiska variabler... 5 5. Operatorer... 5 6. If-

Läs mer

Fuzzy Logic. När oskarpa definitioner blir kristallklara. Åsa Svensson. Linköpings Universitet. Linköping

Fuzzy Logic. När oskarpa definitioner blir kristallklara. Åsa Svensson. Linköpings Universitet. Linköping Fuzzy Logic När oskarpa definitioner blir kristallklara Linköpings Universitet Linköping Sammanfattning I denna fördjupningsuppgift har jag fokuserat på Fuzzy Logic och försökt att beskriva det på ett

Läs mer

FUZZY LOGIC. Christopher Palm chrpa087

FUZZY LOGIC. Christopher Palm chrpa087 FUZZY LOGIC 900223-1554 Innehållsförteckning INLEDNING...2 HUR DET FUNGERAR...3 Crisp Sets och Fuzzy Sets...3 Operatorer...5 IF THEN regler...7 FUZZY INFERENCE...7 Fuzzification...8 Regelsättning...8

Läs mer

Beräkning med ord. -hur en dator hanterar perception. Linköpings universitet Artificiell intelligens 2 2010-10-03 Erik Claesson 880816-1692

Beräkning med ord. -hur en dator hanterar perception. Linköpings universitet Artificiell intelligens 2 2010-10-03 Erik Claesson 880816-1692 Beräkning med ord -hur en dator hanterar perception 2010-10-03 Erik Claesson 880816-1692 Innehåll Inledning... 3 Syfte... 3 Kan datorer hantera perception?... 4 Naturligt språk... 4 Fuzzy Granulation...

Läs mer

Fuzzy Logic Linköpings Universitet

Fuzzy Logic Linköpings Universitet Fuzzy Logic Linköpings Universitet 2 Innehållsförteckning 1. Inledning... 4 2. Bakgrund... 4 3. Fuzzy Logic... 5 3.1. Fuzzy Sets... 6 4. Operatorer... 7 4.1. Union och snitt... 7 4.2. IF, THEN, AND och

Läs mer

Fuzzy Logic: Den oskarpa skarpheten

Fuzzy Logic: Den oskarpa skarpheten Fuzzy Logic: Den oskarpa skarpheten Av: 1 Innehåll Inledning... 3 Vad är Fuzzy Logic?... 4 Fuzzy sets... 4 Medlemsskapsfunktion... 5 Operatorer... 7 Union... 7 Snitt... 8 Komplement... 8 Exempel med de

Läs mer

729G Artificiell jakt och flockbeteende inom datorspel

729G Artificiell jakt och flockbeteende inom datorspel Artificiell jakt och flockbeteende inom datorspel Abstrakt Chasing and Evading är ett begrepp som används för att beskriva hur agenter rör sig mot (jagar), eller undviker en spelare. Liksom i de flesta

Läs mer

Spelutveckling - Gameplay. Design och produktion

Spelutveckling - Gameplay. Design och produktion Spelutveckling - Gameplay Design och produktion Vad är ett spel? Finns olika åsikter Några exempel som räcker på egen hand Coola features Akta er för feature creep För mycket features kan dränka gameplay

Läs mer

JavaScript del 3 If, Operatorer och Confirm

JavaScript del 3 If, Operatorer och Confirm JavaScript del 3 If, Operatorer och Confirm Under förra uppgiften så kollade vi på hur användaren kan ge oss information via promt(), vi använde den informationen både för att skriva ut den och för att

Läs mer

Slutrapport för Pacman

Slutrapport för Pacman Slutrapport för Pacman Datum: 2011-05-30 Författare: cb222bj Christoffer Bengtsson 1 Abstrakt Jag har under våren arbetat med ett projekt i kursen Individuellt Mjukvaruutvecklingsprojekt. Målet med mitt

Läs mer

SPELTESTNING FUZZY LOGIC. Kandidatuppsats i Informatik. Patrik Lundqvist Michael Enhörning VT 2010

SPELTESTNING FUZZY LOGIC. Kandidatuppsats i Informatik. Patrik Lundqvist Michael Enhörning VT 2010 SPELTESTNING FUZZY LOGIC Kandidatuppsats i Informatik Patrik Lundqvist Michael Enhörning VT 2010 Svensk titel: Speltestning Engelsk titel: Gametesting Utgivningsår: 2010 Författare: Patrik Lundqvist, Michael

Läs mer

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad 1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen

Läs mer

Ett spel skapat av Albin Wahlstrand

Ett spel skapat av Albin Wahlstrand Viking vs. Demons Ett spel skapat av Albin Wahlstrand 2012-06-03 1 Abstrakt Denna rapport kommer att handla om mina positiva och negativa erfarenheter inom projektet jag jobbat på de senaste 10 veckorna.

Läs mer

Tillämpad Programmering (ID1218) :00-13:00

Tillämpad Programmering (ID1218) :00-13:00 ID1218 Johan Montelius Tillämpad Programmering (ID1218) 2014-03-13 09:00-13:00 Förnamn: Efternamn: Regler Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.

Läs mer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1 Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut

Läs mer

LINKÖPINGS UNIVERSITET. Fuzzy Logic. Johan Brage 9/16/2012

LINKÖPINGS UNIVERSITET. Fuzzy Logic. Johan Brage 9/16/2012 LINKÖPINGS UNIVERSITET Fuzzy Logic Johan Brage 9/16/2012 Innehållsförteckning 1. Inledning... 1 2. Fuzzy Logic... 2 3. Crisp Sets... 3 4. Fuzzy Sets... 4 4.1 Operatorer... 5 4.2 IF-THEN... 7 4.3 Hedges...

Läs mer

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt Binära träd (forts) Ett binärt träd kan lagras i ett enda sammanhängande minne Roten har index 1 Vänster barn till nod i har index 2*i Höger barn till nod i har index 2*i + 1 Föräldern till nod i har index

Läs mer

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet.

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet. Uppgift 1 Ett programmeringsparadigm är i grund och botten ett sätt att arbeta, ett sätt att möta problem. Det finns flera olika paradigm där varje paradigm har sina egna styrkor och svagheter. Det som

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18 TDDC74 Programmering: Abstraktion och modellering Datortenta - 017-10-7, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

Laboration i datateknik

Laboration i datateknik KUNGLIGA TEKNISKA HÖGSKOLAN Laboration i datateknik Felsökning och programmering av LEGO NXT robot Daniel Willén 2012 09 06 dwill@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Syftet med

Läs mer

Artificiell Intelligens II, 729g11 Linköpings universitet Fuzzy logic

Artificiell Intelligens II, 729g11 Linköpings universitet Fuzzy logic Fuzzy logic Sammanfattning Inom klassiska logiska system är ett påstående antingen sant eller falskt. Fuzzy logic använder sig istället av grader av medlemskap som är värden mellan 0(inte alls sant) och

Läs mer

Artificiell Intelligens inom datorspel Är det ett seriöst ämne?

Artificiell Intelligens inom datorspel Är det ett seriöst ämne? Artificiell Intelligens inom datorspel Är det ett seriöst ämne? Tobias Andersson, tan10006@student.mdh.se Erik Johnasson, ejn11015@student.mdh.se Information kunskap vetenskap etik DVA223 SAMMANFATTNING

Läs mer

Case-based resoning. och dess användning inom sjukvården. Linköpings universitet Artificiell intelligens II 729G11 HT 2011

Case-based resoning. och dess användning inom sjukvården. Linköpings universitet Artificiell intelligens II 729G11 HT 2011 Linköpings universitet Artificiell intelligens II HT 2011 Case-based resoning och dess användning inom sjukvården Sammanfattning Det här arbetet handlar om vad case-based resoning är, hur den funkar, vilka

Läs mer

Öka prestanda i Shared-Cache multi-core processorer

Öka prestanda i Shared-Cache multi-core processorer Öka prestanda i Shared-Cache multi-core processorer 1. Abstract Många processorer har nuförtiden flera kärnor. Det är även vanligt att dessa kärnor delar på högsta nivås cachen för att förbättra prestandan.

Läs mer

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson Lab 4: Anti Tower Defence Oskar Mothander Alan Mendez Larsson dit06omr dit06mln Lärare: Handledare: Johan Eliasson Johan Granberg Tor Sterner-Johansson Thomas Johansson Daniel Henriksson Innehåll 1. Problemspecifikation...

Läs mer

Innehållsförtekning Sida. Inledning 3 Vad är fuzzy logic? 3 Mängder 3 Medlemsfunktioner 5 Operationer 6 Fuzzification 8 Litteraturförteckning 9

Innehållsförtekning Sida. Inledning 3 Vad är fuzzy logic? 3 Mängder 3 Medlemsfunktioner 5 Operationer 6 Fuzzification 8 Litteraturförteckning 9 Fuzzy Logic Innehållsförtekning Sida Inledning 3 Vad är fuzzy logic? 3 Mängder 3 Medlemsfunktioner 5 Operationer 6 Fuzzification 8 Litteraturförteckning 9 2 Inledning Med detta fördjupningsarbete vill

Läs mer

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen? ICT LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen? Daniel Lindfors 12/9/07 dlindf@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Denna laboration

Läs mer

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg Introduktion till programmering D0009E Föreläsning 1: Programmets väg 1 Vad är en dator? En maskin vars beteende styrs av de innehållet (bitmönster) som finns lagrade i datorns minne (inte helt olikt förra

Läs mer

Slutrapport för SquareShooter

Slutrapport för SquareShooter Slutrapport för SquareShooter Författare: Björn Overå Datum: 100609 Page 1 Abstrakt: Detta är en slutrapport för ett projekt jag har haft i kursen Individuellt Mjukvaruutvecklingsprojekt. Denna rapport

Läs mer

Logik och kontrollstrukturer

Logik och kontrollstrukturer Logik och kontrollstrukturer Flödet av instruktioner i ett programmeringsspråk bygger vi upp med hjälp av dess kontrollstrukturer. I C har vi exemplen if, if else, while, do while. Dessutom finns switch

Läs mer

i LabVIEW. Några programmeringstekniska grundbegrepp

i LabVIEW. Några programmeringstekniska grundbegrepp Institutionen för elektroteknik Några programmeringstekniska grundbegrepp 1999-02-16 Inledning Inom datorprogrammering förekommer ett antal grundbegrepp som är i stort sett likadana oberoende om vi talar

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,

Läs mer

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson Uppsala Universitet Matematiska Institutionen Thomas Erlandsson LÄSANVISNINGAR VECKA 36 VERSION 1. ARITMETIK FÖR RATIONELLA OCH REELLA TAL, OLIKHETER, ABSOLUTBELOPP ADAMS P.1 Real Numbers and the Real

Läs mer

Regression med Genetiska Algoritmer

Regression med Genetiska Algoritmer Regression med Genetiska Algoritmer Projektarbete, Artificiell intelligens, 729G43 Jimmy Eriksson, jimer336 770529-5991 2014 Inledning Hur många kramar finns det i världen givet? Att kunna estimera givet

Läs mer

Programmering = modellering

Programmering = modellering Programmering = modellering Ett datorprogram är en modell av en verklig eller tänkt värld. Ofta är det komplexa system som skall modelleras I objektorienterad programmering består denna värld av ett antal

Läs mer

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem Översikt Stegvis förfining Pseudokod Flödesdiagram Dekomposition KISS-regeln Procedurell dekomposition DRY-regeln Algoritmer Sortering och sökning Stegvis förfining Metod för att skapa ett program från

Läs mer

Objektorientering/1.2. 3 Klasser

Objektorientering/1.2. 3 Klasser 3 Klasser 3.1 Att hantera många objekt 3.2 Klasser 3.3 Krav för att bilda en klass 3.4 Får två objekt vara helt identiska? 3.5 Måste vi använda klasser i objektorientering? 3.6 En klassbeskrivning 3.7

Läs mer

Universe Engine Rapport

Universe Engine Rapport 1 Universe Engine Rapport Alexander Mennborg 2017-05-08 2 Inledning I denna rapport diskuteras utvecklingsprocessen till projektet Universe Engine. Denna diskussion omfattar hela utveckling från starten

Läs mer

Ekvivalensrelationer

Ekvivalensrelationer Abstrakt datatyp för disjunkta mängder Vi skall presentera en abstrakt datatyp för att representera disjunkta mängder Kan bl.a. användas för att lösa ekvivalensproblemet avgör om två godtyckliga element

Läs mer

Logging Module into the PRIME Core

Logging Module into the PRIME Core Datavetenskap Opponent: Andreas Lavén Respondenter: Anders Ellvin, Tobias Pulls Implementing a Privacy-Friendly Secure Logging Module into the PRIME Core Oppositionsrapport, E-nivå 2005:xx 1 Sammanfattat

Läs mer

Lektion 8: Konstruktion av semantiska tablåer för PTL-formler

Lektion 8: Konstruktion av semantiska tablåer för PTL-formler Lektion 8: Konstruktion av semantiska tablåer för PTL-formler Till denna lektion hör uppgift 2, 6 och 0 i lärobokens avsnitt.6 (sid. 255). Lös uppgift 2 genom att konstruera en semantisk tablå. Följande

Läs mer

Fuzzy logic. Julia Birgersson, julbi

Fuzzy logic. Julia Birgersson, julbi Fuzzy logic, Innehållsförteckning Inledning 3 Vad är Fuzzy Logic, varför finns det? 3 Fuzzy sets och crisp sets 4 Medlemsfunktioner 4 Operationer 7 Lingvistiska termer och lingvistiska variabler 9 Artificiell

Läs mer

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp Dag Wedelin, bitr professor, och K V S Prasad, docent Institutionen för data- och

Läs mer

Thinking in systems - Donella H. Meadows

Thinking in systems - Donella H. Meadows Thinking in systems - Donella H. Meadows Förklaring av system Definition: Ett system är en mängd sammankopplade element som är organiserade på ett sådant sätt att något uppnås. Ett system måste alltså

Läs mer

Övningsuppgifter kapitel 8

Övningsuppgifter kapitel 8 Inst. för Systemteknik Introduktion till programmering (SMD 180), 5 p Övningsuppgifter kapitel 8 1. Listor är en viktig datatyp i Python. Hur definierar kursboken lista? Vad kallas de värden som tillsammans

Läs mer

MinMax Algoritmen Implementation och optimering. Joakim Östlund 15 juni 2004

MinMax Algoritmen Implementation och optimering. Joakim Östlund 15 juni 2004 MinMax Algoritmen Implementation och optimering Joakim Östlund 15 juni 2004 1 Samanfattning MinMax är en algoritm som kan användas i turbaserade spel för att skapa en virituell motståndare. Algoritmen

Läs mer

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska Matlab-föreläsning 3 (4), 17 september, 2015 Innehåll Sekvenser (från förra föreläsningen) Upprepning med for-slingor och while-slingor Villkorssatser med if - then -else - Logik Sekvenser - repetion från

Läs mer

MMA132: Laboration 2 Matriser i MATLAB

MMA132: Laboration 2 Matriser i MATLAB MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen

Läs mer

Artificiell intelligens

Artificiell intelligens 2013-08-13 Introduktion Artificiell intelligens Vad är AI? Olika mål Intelligenta agenter Områden inom AI Arne Jönsson HCS/IA Vad är AI? Intelligens: Förmågan till tänkande och analys (Svenska ORboken)

Läs mer

Reagera på WoW-event Att använda OnUpdate Introduktion Att kapa funktioner Automatisering och AI

Reagera på WoW-event Att använda OnUpdate Introduktion Att kapa funktioner Automatisering och AI Reagera på WoW-event Att använda OnUpdate Introduktion Att kapa funktioner Automatisering och AI Introduktion pptplex Section Divider The slides after this divider will be grouped into a section and given

Läs mer

Inledning. Kapitel 1. 1.1 Bakgrund. 1.2 Syfte

Inledning. Kapitel 1. 1.1 Bakgrund. 1.2 Syfte Sammanfattning Vi har i kursen Modelleringsprojekt TNM085 valt att simulera ett geléobjekt i form av en kub. Denna består av masspunkter som är sammankopplade med tre olika typer av fjädrar med olika parametrar.

Läs mer

Objektorienterad programmering, allmänt

Objektorienterad programmering, allmänt Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 juni 2005 1 Vilka egenskaper vill vi att program ska ha? Förslag (en partiell lista): De ska... gå snabbt att skriva vara

Läs mer

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha? Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 mars 2005 1. Korrekthet 2. Robusthet 3. Utökbarhet 4. Återanvändbarhet 5. Kompatibilitet

Läs mer

Tentamen: Programutveckling ht 2015

Tentamen: Programutveckling ht 2015 Tentamen: Programutveckling ht 2015 Datum: 2015-11-04 Tid: 09:00-13:00 Sal: Ansvarig: Resultat: Hjälpmedel: Maxpoäng: Betygsgränser: Anslås inom 3 veckor. Inga 40 p 20 p för G, 32 p för VG. Iakttag följande:

Läs mer

Facit Tentamen TDDC (7)

Facit Tentamen TDDC (7) Facit Tentamen TDDC30 2014-03-18 1 (7) Teoretisk del 1. (3p) "Snabba frågor" a) Varför kan man tänkas vilja dölja metoder och variabler med private? (0.5p) Svar:För att skydda interna variabler från ändringar

Läs mer

729G11 ARTIFICIELL INTELLIGENS 2, LINKÖPINGS UNIVERSITET. Fuzzy Logic. Caroline Allmér, caral

729G11 ARTIFICIELL INTELLIGENS 2, LINKÖPINGS UNIVERSITET. Fuzzy Logic. Caroline Allmér, caral 729G11 ARTIFICIELL INTELLIGENS 2, LINKÖPINGS UNIVERSITET Fuzzy Logic Caroline Allmér, caral281 2011-09-19 Innehåll Innehåll... 2 1. Inledning... 3 2. Hur det fungerar... 4 2.1 Crisp-set och fuzzy set...

Läs mer

Space Shooter. Projektrapport i kursen Avancerad C/C++ (DVA303) vid Mälardalens Högskola av Lars Lindqvist och Niklas Nolte

Space Shooter. Projektrapport i kursen Avancerad C/C++ (DVA303) vid Mälardalens Högskola av Lars Lindqvist och Niklas Nolte Space Shooter Projektrapport i kursen Avancerad C/C++ (DVA303) vid Mälardalens Högskola av Lars Lindqvist och Niklas Nolte Innehåll: Inledning 3 Metod 4 Utförande 5 Klassdiagram 5 Sprite och underklasser

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

Att göra spel med Game Maker. Rum. Grundläggande delar. Gamemaker, dagens föreläsning. Programmeringsmodell

Att göra spel med Game Maker. Rum. Grundläggande delar. Gamemaker, dagens föreläsning. Programmeringsmodell Gamemaker, dagens föreläsning Vad innehåller Gamemaker? Rum Objekt Händelser Aktioner Sprites Ljud Variabler och uttryck Live exempel: Början på Pac Man Att göra spel med Game Maker Programmeringsmodell

Läs mer

Mälardalens högskola

Mälardalens högskola Teknisk rapportskrivning - en kortfattad handledning (Version 1.2) Mälardalens högskola Institutionen för datateknik (IDt) Thomas Larsson 10 september 1998 Västerås Sammanfattning En mycket viktig del

Läs mer

Molly Lundberg 729G43 Kognitionsvetenskap mollu341 Artificiell Intelligens Linköpings Universitet. Fuzzy Logic. Vad är det och hur fungerar det?

Molly Lundberg 729G43 Kognitionsvetenskap mollu341 Artificiell Intelligens Linköpings Universitet. Fuzzy Logic. Vad är det och hur fungerar det? Fuzzy Logic Vad är det och hur fungerar det? Molly Lundberg Sammanfattning Den här rapporten har ämnat att skapa förståelse i vad Fuzzy Logic är för något, hur det fungerar och hur det används. Traditionell

Läs mer

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Lab 04 Muterbara strukturer, omgivningar TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden

Läs mer

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering... Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering... 4 Bussen (projektförslag)... 5 Bakgrund... 5 Klassen Buss

Läs mer

JavaScript del 5 Funktioner

JavaScript del 5 Funktioner JavaScript del 5 Funktioner När man skriver JavaScriptkod eller program i andra programmeringsspråk för den delen så kan det finnas anledningar till att man vill dela upp sitt stora program i flera mindre

Läs mer

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel Tentamen TNM061, 3D-grafik och animering för MT2 Onsdag 20/8 2014 kl 14-18 SP71 Inga hjälpmedel Tentamen innehåller 7 uppgifter, vilka tillsammans kan ge maximalt 50 poäng. För betyg G (registreras som

Läs mer

Manual för ett litet FEM-program i Matlab

Manual för ett litet FEM-program i Matlab KTH HÅLLFASTHETSLÄRA Manual för ett litet FEM-program i Matlab Programmet består av en m-fil med namn SMALL_FE_PROG.m och en hjälp-fil för att plotta resultat som heter PLOT_DEF.m. Input För att köra programmet

Läs mer

Det ska endast finnas två bilder av samma typ på spelplanen.

Det ska endast finnas två bilder av samma typ på spelplanen. Laboration 3 Laboration 3, Memory Observera För att bli godkänd på laborationen ska din källkod följa den standard vad det gäller kommentering, val av variabelnamn m.m. som gåtts igenom på föreläsning.

Läs mer

Fuzzy Logic. Ellinor Ihs Håkansson, ellih

Fuzzy Logic. Ellinor Ihs Håkansson, ellih Fuzzy Logic, 2016-01-09 Innehållsförteckning Introduktion... 3 Vad är Fuzzy Logic?... 3 Fuzzy eller crisp?... 4 Fuzzy set... 5 Medlemskapsfunktioner... 6 Operationer... 8 Fuzzy expert systems och Fuzzy

Läs mer

Fuzzy control systems

Fuzzy control systems Institutionen för datavetenskap Artificiell intelligens II, 729g11 Projekt HT-12 LINKÖPING UNIVERSITET Fuzzy control systems Användning av fuzzy logic I tvättmaskiner Karolin Nissa 9/17/2012 Abstract Den

Läs mer

Laboration i datateknik

Laboration i datateknik KUNGLIGA TEKNISKA HÖGSKOLAN Laboration i datateknik Programmering av LEGO-robot Rickard Eriksson 2012-09-06 rieri@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Denna rapport är till följd

Läs mer

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator Viktiga begrepp Den här ordlistan är till för dig som går kursen Om Programmering. Eftersom detta är en grundläggande kurs har vi i vissa fall gjort en del förenklingar. En del begrepp är svåra att förenkla,

Läs mer

PARALLELLISERING AV ALGORITMER PROCESSORER FÖR FLERKÄRNIGA

PARALLELLISERING AV ALGORITMER PROCESSORER FÖR FLERKÄRNIGA PARALLELLISERING AV ALGORITMER FÖR FLERKÄRNIGA PROCESSORER 870928 3017 Johan Gustafsson 870303 4952 Gustaf David Hallberg 880525 8210 Per Hallgren 801117 0597 Wuilbert Lopez 1/7 Innehållsförteckning Table

Läs mer

Datastrukturer och algoritmer

Datastrukturer och algoritmer Innehåll Datastrukturer och algoritmer Föreläsning 2 Fält Specifikation, Konstruktion och Specifikation, Konstruktion Dynamiska resurser Länk Länkade celler 25 26 Fält Modell Schackbräde Organisation n-dimensionellt

Läs mer

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon. Datastrukturer och algoritmer Föreläsning 7 Tabell, hashtabell Relation & lexikon Innehåll Tabell Tabell Hashtabell Relation, lexikon Modell Uppslagsbok Organisation Ändlig avbildning av argument på värden

Läs mer

Laboration Fuzzy Logic

Laboration Fuzzy Logic BILAGA B Laboration Fuzzy Logic Lär dig simulera ett program! ABB INDUSTRIGYMNASIUM Fuzzy Logic Wikingsons Wåghalsiga Wargar Projekt ABB VT 2006 Västerås Innehåll 1 Introduktion... 3 2 Uppgiften... 3 2.1

Läs mer

Department of Information Technology Digitala projekt. SuperKull. Daniel Öhman Alexander Persson

Department of Information Technology Digitala projekt. SuperKull. Daniel Öhman Alexander Persson Department of Information Technology Digitala projekt SuperKull Daniel Öhman Alexander Persson Abstract The purpose of this course was to design and construct an electronic

Läs mer

Post Mortem för Get The Treasure!

Post Mortem för Get The Treasure! Post Mortem för Get The Treasure! Av: Emil Lindberg - Grupp 15 Vi skulle göra ett action multiplayerspel som spelades över nätverket. Vilket vi nästan lyckades göra. Tiden tog slut och programmerarna han

Läs mer

Föreläsning 12. Söndra och härska

Föreläsning 12. Söndra och härska Föreläsning 12 Söndra och härska Föreläsning 12 Söndra och härska Maximal delsekvens Skyline Closest pair Växel Uppgifter Söndra och härska (Divide and conquer) Vi stötte på dessa algoritmer när vi tittade

Läs mer

1 LP-problem på standardform och Simplexmetoden

1 LP-problem på standardform och Simplexmetoden Krister Svanberg, mars 202 LP-problem på standardform och Simplexmetoden I detta avsnitt utgår vi från LP-formuleringen (2.2) från föreläsning. Denna form är den bäst lämpade för en strömlinjeformad implementering

Läs mer

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS Individuellt Mjukvaruutvecklingsprojekt (Utvecklare av digitala tjänster) Den 1 juni 2011 ABSTRAKT Rapporten tar upp positiva och negativa erfarenheter som jag erhållit

Läs mer

TUTORIAL: SAMLING & KONSOLL

TUTORIAL: SAMLING & KONSOLL TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även

Läs mer

Beräkningsvetenskap föreläsning 2

Beräkningsvetenskap föreläsning 2 Beräkningsvetenskap föreläsning 2 19/01 2010 - Per Wahlund if-satser if x > 0 y = 2 + log(x); else y = -1 If-satsen skall alltid ha ett villkor, samt en då det som skall hända är skrivet. Mellan dessa

Läs mer

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML Målet Mer OOP Mer om klasser Några exempel UML Modularitet Språkligt modulära enheter Få gränssnitt Små gränssnitt Tydliga gränssnitt Dold information Återanvändbarhet Variation i typer Variation i datastrukturer

Läs mer

Artificial Intelligence

Artificial Intelligence Omtentamen Artificial Intelligence Datum: 2014-08-27 Tid: 09.00 13.00 Ansvarig: Resultat: Hjälpmedel: Gränser: Anders Gidenstam Redovisas inom tre veckor Inga G 8p, VG 12p, Max 16p Notera: Skriv läsbart!

Läs mer

IT för personligt arbete F5

IT för personligt arbete F5 IT för personligt arbete F5 Datalogi del 1 DSV Peter Mozelius 1 En dators beståndsdelar 1) Minne 2) Processor 3) Inmatningsenheter 1) tangentbord 2) scanner 3) mus 4) Utmatningsenheter 1) bildskärm 2)

Läs mer

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) Snabba frågor Alla svar motiveras väl. Facit Tentamen TDDC30 2015-08-28 kl 08-12 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är syftet med ett interface? (1p) Svar:Att ange vilka metoder som ska finnas, utan

Läs mer

4 grundregler. Minneshantering. Problemet. Windows minkrav

4 grundregler. Minneshantering. Problemet. Windows minkrav 4 grundregler 1. Man kan aldrig få för mycket minne 2. Minnet kan aldrig bli för snabbt Minneshantering 3. Minne kan aldrig bli för billigt 4. Programmens storlek ökar fortare än minnet i datorerna (känns

Läs mer

Tentaupplägg denna gång

Tentaupplägg denna gång Några tips på vägen kanske kan vara bra. Tentaupplägg denna gång TIPS 1: Läs igenom ALLA uppgifterna och välj den du känner att det är den lättaste först. Det kan gärna ta 10-20 minuter. Försök skriva

Läs mer

Software Technology. Josef Svenningsson

Software Technology. Josef Svenningsson Software Technology Josef Svenningsson Software Technology Software Technology Området Software Technology handlar i mångt och mycket om följande frågeställning: Hur designar man programmeringsspråk för

Läs mer

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4 Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa

Läs mer

Magnus Nielsen, IDA, Linköpings universitet

Magnus Nielsen, IDA, Linköpings universitet Föreläsning 7 Introduktion till sortering TDDC91,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 24 september 2018 Magnus Nielsen, IDA, Linköpings universitet 7.1 1

Läs mer

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.

Läs mer

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:

Läs mer

729G43 Artificiell intelligens / Maskininlärning 3. Marco Kuhlmann

729G43 Artificiell intelligens / Maskininlärning 3. Marco Kuhlmann 729G43 Artificiell intelligens / 2015 Maskininlärning 3 Marco Kuhlmann Förra gången: Perceptroninlärning Beslutsregel predicerat y-värde Exempel: AND Välj parametrar θ 0, θ 1, θ 2 sådana att perceptronen

Läs mer

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn. Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0

Läs mer

Styrsystem. Quantum, M340 o Momentum. Kom-igång med konvertera Concept till Unity Rev

Styrsystem. Quantum, M340 o Momentum. Kom-igång med konvertera Concept till Unity Rev Styrsystem Quantum, M340 o Momentum Kom-igång med konvertera Concept till Unity 2014-08-06 Rev. 2016-10-12 INNEHÅLLSFÖRTECKNING 1 INLEDNING... 3 2 FÖRBERED CONCEPT... 3 2.1.1 Ethernet modul... 3 2.1.2

Läs mer

Cacheprobe: programbibliotek för extrahering av cacheminnesparametrar

Cacheprobe: programbibliotek för extrahering av cacheminnesparametrar Cacheprobe: programbibliotek för extrahering av cacheminnesparametrar Gabriel Gerhardsson Cacheprobe p.1/38 Abstract Kan analytiskt ta reda på associativitet, line storlek och storlek på processorns cacheminnen

Läs mer