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

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

SPELTESTNING MED FUZZY LOGIC. Examensarbete Systemarkitekturutbildningen. Patrik Lundqvist Michael Enhörning 2010SA04

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

FUZZY LOGIC. Christopher Palm chrpa087

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

Beräkning med ord. -hur en dator hanterar perception. Linköpings universitet Artificiell intelligens Erik Claesson

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

Regression med Genetiska Algoritmer

Detaljbeskrivning av Player

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

Grundläggande Idéer Algoritmens komponenter Numerisk optimering Genetisk Programmering. Genetiska Algoritmer

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

Genetisk programmering i Othello

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

TDP005 Projekt: Objektorienterat system

Interaktionsdesign som profession. Föreläsning Del 2

Fördjupningsarbete HT 2012 FUZZY LOGIC

i LabVIEW. Några programmeringstekniska grundbegrepp

3. Välj den sprajt (bild) ni vill ha som fallande objekt, t ex en tårta, Cake. Klicka därefter på OK.

Laboration Fuzzy Logic

Kravspecifikation TDP005 Projekt: Objektorienterat system

Övningshäfte 2: Induktion och rekursion

Programmering B med Visual C

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

Legorobot. Lär dig programmera en legorobot. Teknikåttan Ola Ringdahl Lena Kallin Westin

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

Utveckling av ett 2d spel i Java. Examensarbete av: Rickard Borg, EDTD13 Examensår: 2016 Opponent: Jesper Larsson Handledare: Jimmy Jansson

kl Tentaupplägg

Översikt. Experimentell metodik. Mer exakt. Människan är en svart låda. Exempel. Vill visa orsakssamband. Sidan 1

Li#eratur och empiriska studier kap 12, Rienecker & Jørgensson kap 8-9, 11-12, Robson STEFAN HRASTINSKI STEFANHR@KTH.SE

HI1024 Programmering, grundkurs TEN

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

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

Tentamen i. TDDC67 Funktionell programmering och Lisp

EXAMINATION KVANTITATIV METOD vt-11 (110204)

Logik. Dr. Johan Hagelbäck.

Slumpförsök för åk 1-3

Lutande torn och kluriga konster!

Business research methods, Bryman & Bell 2007

Kravspecifikation. TDP005 Projekt: objektorienterade system. Version 4.0 Datum Anna Ahlberg Johan Almberg

IBSE Ett självreflekterande(självkritiskt) verktyg för lärare. Riktlinjer för lärare

C++ Slumptalsfunktioner + switch-satsen

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

MATEMATIKENS SPRÅK. Avsnitt 1

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

LAB 1. FELANALYS. 1 Inledning. 2 Flyttal. 1.1 Innehåll. 2.1 Avrundningsenheten, µ, och maskinepsilon, ε M

Handbok Rymdduell. Andreas Zehender Eugene Trounev Översättare: Stefan Asserhäll

Objektorientering i liten skala

Resurscentrums matematikleksaker

Laboration: Grunderna i MATLAB

Tentamen i. Programmering i språket C

TATM79: Föreläsning 1 Notation, ekvationer, polynom och summor

Provverktyg för elever instruktioner [SE]

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS

Vad är det där? STEG 1: Få olika saker att visas på svarta tavlan

Utförliga regler för TRAX

HKGBB0, Artificiell intelligens

Logik och kontrollstrukturer

Oppositionsprotokoll-DD143x

Talsystem Teori. Vad är talsystem? Av Johan Johansson

Dependensregler - Lathund

Introduktion till logik

ETT TRÄFFSÄKERT VAL FÖR SKYTTEN. Skytteappen Logga. Två appar som hjälper dig i ditt skytte.

de var svåra att implementera och var väldigt ineffektiva.

34% 34% 13.5% 68% 13.5% 2.35% 95% 2.35% 0.15% 99.7% 0.15% -3 SD -2 SD -1 SD M +1 SD +2 SD +3 SD

Ekvivalensrelationer

Meteor 1.0. När man startat Meteor möts man av huvudmenyn:

LEKTION PÅ GRÖNA LUND GRUPP A (GY)

Ett spel skapat av Albin Wahlstrand

KALLE ANKA CUP Matchskola

Spel som interaktiva berättelser

Genetiska algoritmer. Henrik Hansson Rapport, CDT212 Mälardalens Högskola

Ärftliga sjukdomar och egenskaper hos hund

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Uppdrag för LEGO projektet Hitta en vattensamling på Mars

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

UPPGIFT 1 V75 FIGUR 1.

Anvisningar till rapporter i psykologi på B-nivå

Finns det vissa typer av människor som du inte gillar?

UPPGIFT 1 TVÅPOTENSER. UPPGIFT 2 HISSEN I LUSTIGA HUSET.

Kundhandledning för EBIS. E-space Business Intelligence System. Version

Grunderna i stegkodsprogrammering

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

ROCKJET GRUPP A (GY) FRITT FALL

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

Sphero SPRK+ Appen som används är Sphero Edu. När appen öppnas kommer man till denna bild.

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

TDP005 Projekt: Objektorienterat system

Slump och statistik med Scratch

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

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

kl Tentaupplägg

Tentamen i Programmering grundkurs och Programmering C

For more information please visit

BaraTrav fliken Poäng Version 2.2

INNEHÅLLSFÖRTECKNING... 2 FÖRORD... 3 INLEDNING... 4 ATT ANVÄNDA MOTORERNA... 9 LOOP (UPPREPANDE) FUNKTIONEN SKAPA EN EGEN KLOSS...

William Hernebrink

Människans möte med den mänskliga kroppen. Ett pedagogiskt studiematerial

Transkript:

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 Enhörning Handledare: Rikard König Abstract (på engelska) Keywords: (på engelska) I

Sammanfattning (på svenska) Extrahera fuzzy logic regler som beskriver spelarens strategier och se om de stämmer överens med speldesignerns tanke för spelet. Nyckelord: (på svenska) II

III

Innehållsförteckning 1 Inledning...- 1-1.1 Introduktion...- 1-1.2 Syfte...- 3-1.3 Problemformulering...- 3-1.4 Delproblem...- 3-1.5Abstract...- 4-1.7 Teori... Fel! Bokmärket är inte definierat. 1.7.1 Fuzzy logic...- 5 - Lingvistiska variabler och häckar...- 6-1.8 Relaterat arbete...- 9 - Microsoft & Bungie Studios : Halo serien...- 9 - Turn 10 : Forza 2...- 11-2 Metod...- 16 - Spelet...- 16 - Insamling av data...- 17 - Fuzzy Evaluering...- 18 - Egna Fuzzy...- 19 - Egna Fuzzyregler...- 20 - Egna fuzzyregler - Pass 1...- 20 - Egna fuzzyregler - Pass 2...- 20 - Egna fuzzyregler - Pass 3...- 21 - Egna fuzzyregler - Pass 4...- 21 - G-REX regler...- 22 - All / 10 Fold...- 22 - G-REX Fuzzy...- 23 - G-REX Fuzzy - Egna regler...- 24 - G-REX Fuzzy G-REX regler...- 24 - Egna regler med alla pass...- 25 - G-REX regler med alla pass...- 25-3. Experiment...- 26 - Pass 1...- 26 - Pass 2...- 26 - Pass 3...- 27 - IV

Pass 4...- 27-4. Resultat...- 28 - Föklaring av testresultat...- 28 - Pass 1...- 29 - Pass 2...- 31 - Pass 3...- 33 - Pass 4...- 35 - Alla Pass...- 37-5. Analys...- 39 - Pass 1... Fel! Bokmärket är inte definierat. 6. Slutsatser...- 43-3 Ordlista...- 47 - V

1 Inledning 1.1 Introduktion Vid design av ett dataspel försöker man ofta skapa banor och fiender som tvingar spelaren att använda olika strategier för att överleva. Speltestning är ett ämne som är väl utforskat i den akademiska världen men trots detta är det inte någon majoritet av speldesigners som tar del av och använder sig utav forskningsrapporter, böcker och konferenser inom ämnet (Hopson, John, 2006). Speltestning är den viktigaste aktiviteten en speldesigner ägnar sig åt, ironiskt nog är det oftast den aktiviteten en speldesigner vet minst om. (Fullerton, Tracy, 2008) Den allmänna uppfattningen om speltestning är att det är en enkel process. Testpersoner spelar spelet och data samlas in. Men processen är mycket mer avancerad än så. Att spela spelet är bara en av alla de delar som ingår i speltestning. Selektion, rekrytering, förberedelse, övervakning och analys är alla delar som man behöver beakta vid speltestning. När Microsoft utvecklade spelet Halo 3 till Xbox360 genomfördes mer än 3000 timmar av speltestning med över 600 personer (Thompson, Clive, 2007). Enligt Bill Fulton (Fullerton, Tracy, 2008) är nyckeln i att utveckla ett framgångsrikt spel just speltestningen. Problemet utvecklare har vid spelutveckling är att det är svårt att få en objektiv syn på spelet då utvecklaren både vet mer om det aktuella spelet och om spel i allmänhet än målgruppen. Det är svårt för en speldesigner att förutsäga vilka strategier som en spelare kommer att använda, just därför krävs en omfattande speltestning under hela utvecklingsprocessen. Speldesignern vill i så stor utsträckning som möjligt undvika s.k. kryphål, strategier som alltid är dominanta, i spelet. För att undvika detta ska spelet påvisa tydliga strategier för spelaren att följa. Detta för att spelet ska vara så utmanande och ha den svårighetsgrad som designern planerat för. En av speltestningsmetoderna är one-on-one testning. Den metoden innebär att en utvecklare sitter och tittar på när en testperson spelar. Utvecklaren antecknar och ställer frågor före och efter spelsessionen. Denna speltestningsmetod kräver tid och blir därför dyr då tid är pengar vid spelkonstruktion. En annan av speltestningsmetoderna som är mindre tidskrävande är data hooks. Den innebär att data så som position och knapptryckningar samlas in och lagras från spelsessioner vid testning. Det är enkelt att samla in mycket data med hjälp av data - 1 -

hooks men problemet ligger i att förklara och tolka datan. De två största fördelarna med data hooks är att det är objektivt och billigt. Ett av tillvägagångssätten för att tolka den insamlade datan skulle kunna vara att man använder sig av data mining och fuzzy logic. Data mining är en metod för att hitta mönster i datamängder samt skapa regler för t.ex. fuzzy logic. Fuzzy logic är ett sätt att beskriva komplexa funktioner med mänskligt språk, baserat på logik. Resultatet av en fuzzy logic-funktion är inte ett binärt värde utan mer en beskrivning hur mycket ett värde tillhör en viss beskrivning. - 2 -

1.2 Syfte Utveckla en metod för att i så stor utsträckning som möjligt automatiskt kunna hitta kryphål och strategier i ett spel, samt kunna jämföra detta mot hur speldesignern ämnat att spelet skulle spelas. 1.3 Problemformulering Är det möjligt att automatiskt testa om de tänkta strategierna är tillräckligt tydliga för spelarna med hjälp av data mining och fuzzy logic? 1.4 Delproblem Vilka data och på vilket sätt ska data samlas in? Hur ska data fuzzifieras för att visa tydliga resultat? Hur ska resultaten presenteras för att visa mönster och strategier? Kan man med hjälp av fuzzy logic analysera data från speltest och dra användbara slutsatser om spelstrategier och hur spelet kommer spelas? - 3 -

1.5Abstract - 4 -

2 Bakgrund Fuzzy logic Själva begreppet fuzzy logic började med en uppsatts om "fuzzy sets" som skrevs av professor L. A. Zadeh vid California Barkeleys universitet 1965. (Mukaidono, Masao, 2001) Den publicerades i en akademisk journal vid namn "Information and Control". Zadeh beskrev i uppsatsen att fuzzymängder var mängder som inte hade tydliga gränser som t.ex. "en mängd vackra kvinnor", "en mängd långa män" och "en mängd stora nummer". (Mukaidono, Masao, 2001) Fuzzy logic är det engelska uttrycket och översätts enklast till oskarp logik. Det man måste förstå är att fuzzy logic handlar om osäkra svar, det är inte logiken i sig som är osäker. Till skillnad från binär logik som är antingen sann eller falsk så använder fuzzy logic relativa värden mellan 0 och 1 som ett mått på hur sant eller falskt ett påstående är. Man säger då att värdet är delvis medlem i en fuzzymängd. Exempel: Kalle är 30 år, Sven är 50 år. För att avgöra om en person är gammal eller ung så skulle den binära logiken använda sig av regler som t.ex. ålder < 40 = ung, ålder >= 40 = gammal. I det fallet skulle Kalle vara ung och Sven vara gammal. I fuzzy logic så skulle reglerna se ut på ett annorlunda sätt som t.ex. ung = (1/0,0/50), gammal = (0/25,1/100). En mer detaljerad beskrivning av fuzzymängden ung set ut på följande sätt: 1 iiii xx 0 50 xx YY(xx) = iiii 0 xx 50 50 0 iiii 50 xx Regeln säger att fuzzymängden för ung är mellan 0 och 50 år. Vid 0 års ålder så är sanningsgraden 1 att personen är ung och vid 50 års ålder så är sanningsgraden 0. Dessa värden kan liknas med den binära logikens sant och falskt. Är åldern mellan 0 och 50 så är sanningsgraden ett flyttal mellan 0 och 1. I Kalles fall, då åldern är 30år, så är sanningsgraden enligt fuzzymängden ung (50-30) / 50 = 0,4. Fuzzymängden gammal: 0 iiff xx 25 xx 25 ZZ(xx) = iiii 25 xx 100 75 1 iiii 100 xx - 5 -

Regeln för gammal skiljer sig lite från regeln för ung. Detta pågrund av att fuzzymängden börjar från 0 och går mot 1 istället för tvärtom. Detta påvisas då vi tar x minimivärdet istället för maxvärdet x. Sanningsgraden för att Kalle är gammal är (30-25) / (100-25) = 0,07. Här påvisas då skillnaden mellan fuzzy logic och binärlogik eftersom kalle är både ung och gammal. Grafen visar att värden som ligger under den röda linjen har ett sanningsvärde större än 0 och mindre än 1. Ligger värdet ovanför den röda linjen så är sanningsvärdet 0. Det samma gäller för den blå linjen. Lingvistiska variabler och häckar En lingvistisk variablel är en fuzzyvariabel som kan anta ett lingvistiskt värde. I påståendet Kalle är gammal så är Kalle en lingvistisk variabel och värdet gammal är ett lingvistiskt värde. Detta används senare för att enkelt bestämma vad som skall göras vid varje värde, exempelvis om Kalle är gammal så går han långsamt. Detta kan vara användbart om man t.ex. simulerar rörelse i en stad. Häckar är termer som används för att ändra utseendet på en fuzzymängd. Exempel på termer är väldigt, ganska, troligtvis, inte troligtvis. Dessa används tillsammans med fuzzymängder för att tydligare visa resultatet inom en fuzzymängd. Om värdet ligger i fuzzymängden så vill vi ofta ha mer information om värdet. Om vi använder häcken väldigt på mängden gammal som använts i tidigare exempel så kan vi se tydligare resultat. Fuzzymängden väldigt gammal blir då en delmängd av fuzzymängden gammal. Detta skulle se ut på följande vis: - 6 -

- 7 -

Speltestning Speltestning är en av de viktigaste delarna när ett spel designas. Den allmänna uppfattningen om speltestning är att det är en enkel process. Testpersoner spelar spelet och ger feedback på känslan och upptäckta buggar. Processen är mycket mer avancerad. Nedan följer flera viktiga delar i speltestning. (Fullerton, Tracy, 2008) En-och-en-testning Metoden innebär att en utvecklare sitter och tittar på när en testperson spelar. Utvecklaren antecknar och ställer frågor före och efter spelsessionen. Denna metod är tidskrävande men kan ge ett bra resultat från spelkänslans synvinkel. Grupptestning Denna metod går ut på att en testgrupp samlas ihop och de spelar spelet ihop. Spelandet spelas med eller mot varandra beroende på vad spelet går ut på. Gruppen observeras och frågor ställs under tiden som de spelar. Denna metod fungerar väl för spel som ska spelas i grupp. Feedback forum I denna metod ges varje person som har testat spelet en lista med frågor och sedan jämför man hur alla svarat. Denna metod är mycket bra för att få kvantitativ feedback. Vid t.ex. Microsoft Games User Research används digitala frågeformulär för att samla in feedback. Datan förs sedan in i en databas där all feedback sparas vilket gör att det kan skapas rapporter som sedan analyseras. Intervju Testpersonen får efter speltestet genomgå en intervju där denne blir grundligt utfrågad om speltestet. Detta är ingen diskussion utan mer som ett förhör. Denna metod är bra eftersom intervjuledaren kan styra intervjun dit denne vill beroende på svaren från testspelaren. Öppen diskussion Denna metod inriktar sig på att ha en diskussion och kan göras en och en eller i grupp. Diskussionen genomförs efter ett speltest och den som är ledare för anteckningar. Diskussionen kan vara helt öppen eller så kan ledaren välja att strukturera den och ta upp specifika frågor och på så sätt leda konversationen. Data hooks Denna metod innebär att data så som position och knapptryckningar samlas in och lagras från spelsessioner vid testning. Det är enkelt att samla in mycket data med hjälp av data hooks men problemet ligger i att förklara och tolka datan. Data hooks kombineras ofta med några av de andra metoderna och ger då ett bra underlag för ett komplett speltest. - 8 -

Relaterat arbete Microsoft & Bungie Studios : Halo serien Spelet Halo 3 är ett resultat av samarbetet mellan Microsoft och Bungie Studios. Inför releasen av Halo 3 så var testningen av spelet en väldigt viktig aspekt i utvecklandet. Då skapade Microsoft ett laboratorie och gav Bungie Studios fri tillgång dit. Dagliga speltester utfördes och analyserna av speltesterna var omfattande. (Thompson, Clive, 2007) Laboratoriet Laboratoriet skapades en kort tid före releasen av Halo 2 år 2004. Det startade med att data hooks användes som främsta metod för insamlandet av data då 2300 timmar av speldata samlades in på två månader från spelet Halo 2. Från dessa data analyserades och hittades många problem som t.ex. monster som var för svåra, vapen som var för bra, terrängsvårigheter. Andra metoder som numera används i laboratoriet är bl.a. intervju, feedback forum, en-och-en-testning. (Thompson, Clive, 2007) En typisk speltestningssession går ut på att en testperson spelar en del av spelet, laboratoriet filmar testpersonens reaktioner och knapptryckningar. Med några minuters mellanrum så pausas spelet och några frågor som behandlar spelarens nuvarande humör, spelglädje mm. visas på skärmen. Testledaren uppmanar spelaren till att hela tiden förmedla vad denne tänker. Minsta möjliga detalj kan vara viktig (Kaufman, Wendy, 2007) Ett konkret exempel från utvecklingen av Halo 3 och testerna i laboratoriet beskriver Thomas Clive i en intervju med laboratoriets chef Randy Pagulayan. Pagulayan berättar att de hade ett stort problem med att spelare begick självmord när de försökte skjuta med en fiendetank. Efter att ha analyserat spelarnas beteende och tittat på videor från testsessionerna så hittades problemet. Spelaren siktade rakt ner för att döda alla fiender som var tillräckligt nära. Problemet var att spelaren dog själv på kuppen. Detta löstes av design-teamet genom att låta styrningen av vapnet bara gå till en viss vinkel så att det inte gick att sikta ner i marken.. (Thompson, Clive, 2007) Pagulayan beskriver även ett annat problem som fanns under utvecklingen av spelet Halo 3. Detta problem löstes genom att använda data hooks och sedan analysera den insamlade datan. Problemet var att spelare som spelade i det västra laget på banan Valhalla hade svårare att klara sig. Problemet syntes tydligt när datan ritades ut i en värmekarta (eng. heat map). Se bild 1.1. På bilden visas det att spelare i den västra basen (längst till vänster på kartan) dör i basen. Detta ändrades så att banan blev mer balanserad.. (Thompson, Clive, 2007) - 9 -

Bild 1.1. Clive Thompson skriver även att många av spelföretagen som släpper spel inte utför tillräcklig speltestning. Thompson antyder att företagen bara betalar testpersoner för att spela spelet och återkomma med feedback gällande grafik som strular, fiender som beter sig konstigt och dylikt.. (Thompson, Clive, 2007) - 10 -

Turn 10 : Forza 2 Spelet Forza 2 är ett bilspel utvecklat av spelföretaget Turn 10 som släpptes under sommaren 2007. Spelet har ett spel läge som heter Time-Trial där det går ut på att köra en bana under en viss tid. Hur ska då designern veta vilken tid som skall sättas som gräns? För att avgöra detta utfördes speltester där data samlades in med hjälp av data hooks. I testningen som spelades på banan Tsukuba Short Circuit var måltiden satt till 45.7 sekunder. Testet utfördes på sex personer som körde tio lopp var. Resultatet var slående, ingen klarade testet och medeltiden var 84.9 sekunder per lopp. Detta verkade katastrofalt då medeltiden var nästan 40 sekunder ifrån måltiden. När testledarna från Turn 10 tittade närmare på den insamlade datan så såg de att uppgifterna inte var så katastrofala. Se bild 1.2. Bilden visar att variansen mellan loppen var väldigt stor och därför blir medelvärdet väldigt missvisande. När testledarna analyserade testspelarnas resultat var för sig så insåg de flera olika saker, exempelvis att röd spelare var väldigt nära fyra gånger medan grön spelare skiljde sig väldigt mycket från lopp till lopp. Bild 1.2. Turn 10 hade före testen gjordes skapat mål för banan Tsukuba Short Circuit att det skulle vara möjligt att nå måltiden på tio försök. Eftersom detta var målet visade testdatan att måltiden borde vara 50.2 sekunder istället för 45.7 sekunder som den var tidigare. Speldesignern däremot bestämde att måltiden skulle vara 48.8 sekunder istället för denne visste att bilarna inte var riktigt färdiga samt andra aspekter som spelade in. Bild 1.3 visar hur resultatet av testdatan blir med den nya måltiden 48.8 sekunder. Fem av sex testpersoner klarade den nya måltiden inom 10 försök. - 11 -

Bild 1.3-12 -

G-REX Fuzzifiering G-REX använder sig av en klustringsmetod som kallas K-means med Kaufmans (L. Kaufman, P. J. Rousseeuw, 1990) initiering vid fuzzifieringen, detta för att få fram brytpunkterna i de olika fuzzyfunktionerna. K-means är den mest använda metoden för klustring och några anledningar till detta är att den är snabb, deterministisk och lätt att implementera. J.B MacQueen (1967) var den som skapade den algoritm som löser klustringsproblemet. K-means fungerar genom att k antal centroider placeras ut, instanserna tillhör det kluster de är närmast. Sedan flyttas centroiderna till centrum av respektive kluster och alla instanser kontrolleras för vilket kluster de tillhör, detta upprepas tills centroiderna inte flyttar sig längre. Det kan ge olika resultat beroende på vart centroiderna placeras ut initialt. Detta leder till att olika initieringsmetoder kan användas. G-REX använder sig av Kaufmans metod för initiering och den använder sig av medoider som fungerar på samma sätt som centroider men med skillnaden att medoiderna alltid är en av instanserna. Genetisk Programmering Genetisk programmering (GP) är en metod där evolution används för att skapa lösningar på ett definierat problem. För att använda GP måste vissa saker definieras: Primitiva funktioner Terminaler Fitnessfunktioner Parametrar för att styra körningen Metod för att tilldela ett resultat Termineringsfunktion Här följer en övergripande beskrivning av algoritmen som GP använder sig av: Tilldela 0 till generation x. Initialisera en population Pop(x) som är gjord av de primitiva funktionerna och teminalerna. Evaluera vilken fitness varje individ har i Pop(x). Så länge termineringsfunktionen inte är uppfylld, gör följande: o Skapa en ny population Pop(x+1) med lösningar genom att använda mutation, korsning, selektion och andra genetiska tekniker. o Evaluera varje individs fitness i den nya populationen Pop(x+1). o Öka generationen x med 1. Returnera den lösning som blev identifierad av metoden att tilldela resultat. - 13 -

Varje individ i populationen evalueras utifrån deras fitness vilken baseras på hur bra det löser det specifika problemet. Det som gör själva evolveringen är de olika genetiska teknikerna som används för att skapa de nya populationerna. Det är alltid individer med tillräckligt hög fitness som väljs för att föras vidare. Vid mutation väljs en förälder ut och en kopia av denna görs. Om vi ser på föräldern som ett träd, väljs sedan en mutationspunkt slumpmässigt ut. Detta kan vara en lövnod eller ett subträd. Lövet eller subträdet vid mutationspunkten ersätts av ett nytt löv eller subträd som skapats slumpmässigt. Den nya individen förs sedan vidare till nästa generation. Vid korsning väljs två föräldrar och kopior av dessa skapas. Sedan väljs en korsningspunk ut slumpmässigt i varje kopia. De slutgiltiga avkommorna skapas genom att byta de subträd som är under respektive korsningspunkt. De nya individerna med delar från båda föräldrar är de som förs vidare till nästa generation. Vid selektion väljs helt enkelt en individ som helt utan förändring förs vidare till nästa generation. (Wong, Man Leung och Leung, Kwong Sak, 2000) Fuzzy Genetisk Programmering Bild 1.4 visar ett fuzzy regelträd som det kan se ut vid fuzzy genetisk programmering. Addition (+) används för fuzzy operator ELLER (OR) för att slå samman resultatet av två subträd. Multiplikation (*) används för fuzzy operator OCH (AND). På detta sätt blir summan av en instans medlemsvärde alltid 1. Detta leder till att varje klass får en egen fuzzy medlems funktion. En specifik instans klass avgörs sedan av den klass som fått högst medlemsvärde. - 14 -

Exempel som visar hur en instans I klassificeras: Vi säger att fuzzy medlemsfunktionen µung(ålder) ger oss 0,9 och µmedium(längd) ger oss 0,3. Fuzzy medlemsfunktionen för Klass A: ρ(a) = (1 - µung(ålder)) + (µung(ålder) * (1 - µmedium(längd))) Fuzzy medlemsfunktionen för Klass B: ρ(b) = µung(ålder) * µmedium(längd) Ung(Ålder) 1 - µung(ålder) µung(ålder) Klass := A Medium(Längd) 1 - µmedium(längd) µmedium(längd) Klass := A Klass := B Bild 1.4 ρ(a) = (1 0,9)) + (0,9 * (1 0,3)) = 0,73 ρ(b) = 0,9 * 0,3 = 0,27 Detta ger att instansen I i exemplet prediceras till Klass A eftersom den klassen har fått högst medlemsvärde (0,73 > 0,27). (Eggermont, Jeroen, 2002) - 15 -

3 Metod Spelet Spelet som modifierats är ett så kallat top down shooter och går ut på att tjäna ihop poäng. Detta genom att förstöra fiendeskepp, spelaren får 10 poäng för varje fiende som förstörs. Spelaren styr ett rymdskepp som möter olika typer av fiender. Varje typ pågår i 20 sekunder och har ett specifikt rörelsemönster. Under dessa 20 sekunder kommer fienderna i grupper om 20 och det kommer inte nya förrän alla 20 blivit nerskjutna eller 20 sekunder har passerat. Spelet har 4 typer av fiender och pågår därför i 80 sekunder. Eftersom spelarens uppgift är att samla mycket poäng och det inte kommer nya fiender för än alla är nerskjutna gör detta att man får fler fiender att skjuta av varje typ om spelaren är snabb med att skjuta ner de som är på skärmen. För att bekämpa fienderna kan spelaren använda sig av bomber och vanlig skott. Spelaren har en bomb vid början av spelet och får en ny varje minut. Bomben är en horisontell linje av 60st skott som börjar vid skeppet och färdas uppåt på skärmen. Spelaren har 10st vanliga skott vid början av spelet men kan spara upp till 20st genom att spelaren får 2st/sek och kan skjuta 6/sek. Skeppet har även 11 HP (Health Points) och förlorar 1 HP varje gång det kolliderar med en fiende, efter 11 kollisioner är spelet slut. Första typen av fiender är konstruerad med syfte att det inte ska vara optimalt att stå stilla i mitten och skjuta. Tanken är att spelaren ska flyga ut till en av kanterna på skärmen och sedan stanna där för att skjuta så många fiender som möjligt. Fienderna kommer uppifrån och åker neråt i raka led längs båda sidorna av skärmen. De byter sida när de kommit ner till mitten av skärmen vilket gör att det är mest optimalt att välja en sida och sedan stanna där. Spelare som står i mitten eller försöker byta sida går miste om många poäng under denna typ. Det är inte klokt att använda bomben på denna typ då den gör mycket större nytta vid andra typer. Den andra typen av fiender bekämpas mest optimalt genom att spelaren befinner sig i mitten av skärmen längst ner och skjuter alla fiender där ifrån. Fienderna startar i översta vänstra och högra hörnet, åker sedan i en båge neråt för att sammanstråla i mitten strax ovanför botten av skärmen. Detta är en bra typ att använda sin bomb på, speciellt första omgången fiender vilket gör att spelaren hinner spara på sig fler skott och kan skjuta ner en hel grupp på en gång. Tredje typen av fiender startar i översta vänstra och högra hörnet, åker ner mot mitten men vänder utåt i en loop och korsar till sist skärmen horisontellt på mitten. Spelaren får som mest poäng här då han står vid sidan om mitten, skjuter en hel sida, sedan byter sida och tar den andra sidan i nästa vända. Bomben är även bra att använda på denna typ av fiender eftersom alla kan bli nerskjutna med en bomb. - 16 -

Fjärde typen av fiender kommer nu underifrån för att spelaren inte ska kunna stå längst ner och detta tvingar spelaren att tänka om något. Fienderna startar nere i vänstra och högra hörnet, åker in i mitten innan de åker diagonalt uppåt, korsar sedan skärmen horisontellt och loopar in mot mitten. Optimal position för spelaren är ute vid en av sidorna, strax över botten på skärmen, där alla fiender åker förbi under en vända. Spelaren använder minst en bomb eftersom spelaren får en bomb i början av denna typ. Insamling av data Data loggas med tidigare beskrivna data hooks-metoden. Fyra gånger i sekunden sparas attribut till en loggfil som innehåller all data för ett spel. När spelaren har dött och startar en ny omgång skapas en ny loggfil med data. De attribut som loggas är vid varje loggtillfälle är: Time - Tiden sedan omgången startades. PosX - Spelarens position I X-led PosY - Spelarens position I Y-led HP - Spelarens aktuella hälsa Ammo - Spelarens tillgängliga ammunition Bombs - Antal tillgängliga bomber för spelaren FShots - Antal skott avfyrade av spelaren Points - Spelarens poäng EType - Typ av fiende på skärmen ECurve - Fiendens rörelsemönster #Enemies - Antal fiender på skärmen. - 17 -

Fuzzy Evaluering För att kunna evaluera den insamlade datan så skapades ett framework för fuzzy logic. Alla loggfiler läses in och informationen för de fyra passen omvandlas antingen till fuzzyvärden eller till crisp-värden och sparas i filer som sedan kan läsas in i G-REX. Där startar fuzzy evalueringen som sker på flera olika sätt beskrivet nedan. - 18 -

Egna Fuzzy Egna fuzzy innebär att ramverket innehåller regler för att omvandla informationen från loggfilerna till attribut bestående av fuzzy-värden. Attributen speglar ett medelvärde sett över ett helt pass. De attribut som används är: HighAmmo Hur ofta har spelaren haft mycket ammunition? LowAmmo Hur ofta har spelaren haft lite ammunition? HighHP - Hur ofta har spelaren haft mycket hälsa? LowHP - Hur ofta har spelaren haft lite hälsa? LostHP Hur mycket hälsa har spelaren förlorat? Movement - Hur rörlig har spelaren varit? UsedBombs Hur många bomber har spelaren använt? LowX Hur mycket har spelaren varit I en position till vänster? HighX - Hur mycket har spelaren varit I en position till höger? LowY - Hur mycket har spelaren varit I en position långt ner? HighY - Hur mycket har spelaren varit I en position högt upp? MediumX Hur mycket har spelaren varit I en position I mitten sett till X-led? FiredShots Hur mycket har spelaren skjutit? Klassificeringen av spelare sker till två klasser good och bad som representerar en bra respektive en dålig spelare. Dessa attribut sparas till en fil som senare läses in i G-REX för evaluering. Attributen används även till ramverkets egen evaluering. - 19 -

Egna Fuzzyregler För att avgöra ifall en spelare är bra eller dålig så rankas poängen och en viss gräns sätt för bra och dåliga spelare. Det ramverkets regler har i uppgift att göra är att predicera vilka spelare som kommer vara bra respektive dåliga. Detta utförs genom att sätta upp regler för hur en bra spelare ska spela och sedan jämförs varje spelares data med reglerna. Som resultat av jämförelsen prediceras en poäng för varje spelare. Alla predicerade poäng rankas sedan och jämförs sinsemellan för att kunna se vilka spelare som predicerats till bra respektive dåliga. Reglerna skiljer sig för varje pass då det är olika taktiker som är bra i de olika passen. Alla regler testas med träffsäkerhet vilket innebär att man kontrollerar hur många av varje klass som placeras i den rätta klassen. Denna metod använder sig av all data för att validera reglerna. Egna fuzzyregler - Pass 1 I Pass 1 är den optimala taktiken att förflytta sig till höger eller vänster och skjuta så mycket som möjligt. Därför ser fuzzyregeln för pass 1 ut på följande vis: float fuzzyvalue = 0; fuzzyvalue += LowX; fuzzyvalue += HighX; fuzzyvalue += FiredShots / 2; fuzzyvalue += UsedBombs; Regeln säger att det är bra att stå antingen till höger eller vänster, skjuta skott samt att använda bomber. Fuzzyvärdet defuzzifieras sedan för att få en kalkylerad poäng för varje spelare. Egna fuzzyregler - Pass 2 Pass 2 är det pass där man kan samla mest poäng om man är duktig. Den bästa taktiken är att stå i mitten och skjuta alla fiender när de kommer in mot mitten. Att använda bomben i detta passet är ett stort plus då man kan skjuta en hel våg med en bomb. När man använder bomben så hinner man samla ammunition som räcker för att skjuta ner en hel våg. Ifall man inte använder bomben så har man svårt att samla tillräckligt med ammunition för att skjuta ner en våg och på så sätt blir det svårare att hinna skjuta så många fiender. - 20 -

float fuzzyvalue = 0; fuzzyvalue += UsedBombs; fuzzyvalue += FiredShots; Regeln ser väldigt enkel ut då den bara räknar på FiredShots och UsedBombs men detta räcker för att få en bra predicering. Egna fuzzyregler - Pass 3 I pass 3 är det lite svårare att få mycket poäng. Den bästa taktiken är att gå till ena sidan och skjuta hälften av fienderna och sen flyga över till andra sidan och skjuta de fienderna där. float fuzzyvalue = 0; fuzzyvalue += UsedBombs; fuzzyvalue += Movement-0.3f; fuzzyvalue += Math.Pow(FiredShots,3); Math.Pow(FiredShots,3) är detsamma som FiredShots upphöjt till 3. Detta för att skapa en häck (eng. hedge) som kan jämföras med VeryVery. Egna fuzzyregler - Pass 4 Pass 4 är det svåraste passet eftersom fienderna kommer underifrån och det finns inte så många platser att stå oskyddat. Står man en bit upp i mitten så står man bra men man hinner inte skjuta så många fiender. Bästa platsen är ute till höger eller vänster men där är det svårt att hitta platsen som man inte blir träffad av fienderna på. float fuzzyvalue = 0; fuzzyvalue += LowX; fuzzyvalue += HighX; fuzzyvalue += MediumX / 8; fuzzyvalue -= HighY; fuzzyvalue += UsedBombs; fuzzyvalue *= FiredShots*3; - 21 -

G-REX regler Filerna som skapas av ramverket och innehåller fuzzyvärden läses in i G-REX för att låta programmet skapa regler. Här kontrolleras träffsäkerhet för reglerna samt reglerna längd. Reglerna från G-REX jämförs mot ramverkets regler gällande träffsäkerhet. Även vilka attribut som anses viktiga jämförs. På detta sätt kan vi enkelt se ifall det går att skapa egna fuzzyregler som i ramverket eller ifall det är bättre att låta program som G-REX sköta regelskapandet. Denna metod använder sig av 10 fold för att korsvalidera regler och testresultat. All / 10 Fold All innebär att all data används för att skapa regler. Ingen testning av reglerna utförs. 10 Fold innebär att datan delas in i tio delar. Sedan korsvalideras foldrarna så att nio foldrar används för att träna reglerna och en folder används för att testa reglerna. Detta genomförs tio gånger så att alla foldrar används en gång till att testa reglerna. Träffsäkerheten räknas sedan ut som ett medel ifrån dessa tio träningar och testningar av reglerna. - 22 -

G-REX Fuzzy Denna funktion innebär att ramverket sparar filer med Crisp-värden istället för Fuzzy-värden. På det sättet så kan G-REX inbyggda fuzzifieringsteknik användas för att fuzzifiera datan. Precis som med den egna fuzzyfieringen så består här attributen av medelvärden sett över ett helt pass. Värdena här är lite annorlunda som input då G-REX väljer HIGH och LOW för attributen så istället för attribut som HighAmmo som används i den egna fuzzyfieringen så används här endast Ammo som input. Inputattributen ser då ut på följande vis: HP Medelvärde för hälsan. LostHP - Hur mycket Hälsa spelaren förlorat. Movement - Hur mycket spelaren rört sig. UsedBombs Hur många bomber spelaren använt. PosX Medelvärde för position I X-led. PosY Medelvärde för position i Y-led. Ammo Medelvärdet för hur mycket ammunition spelaren har. FiredShots Antal avfyrade skott. Klassificeringen av spelare sker till två klasser, good och bad som representerar en bra respektive en dålig spelare. - 23 -

G-REX Fuzzy - Egna regler När G-REX läst in filen med Crisp-värden så fuzzifieras datan. Denna fuzzifierade data används sedan som input till ramverket för att se ifall det går att se skillnader på fuzzifieringen i ramverket eller i G-REX. Ifall G-REX kan fuzzifiera datan lika bra som ramverket så betyder det att ramverkets fuzzifiering är överflödig då det går mycket enklare att direkt fuzzifiera datan i G- REX. Denna metod använder sig av all data för att skapa regler. G-REX Fuzzy G-REX regler Även här läses filen med Crisp-värden in och fuzzifieras för att kunna skapa bra regler. Här sköter G-REX regelskapandet och testningen av träffsäkerhet. Dessa regler och resultat används sedan för att jämföra denna metod mot metoden att skapa fuzzydatan via ramverket och sedan låta G-REX skapa reglerna. (Se kopplingar på bild) Denna metod använder sig av 10 fold för att korsvalidera reglerna och resultatet. - 24 -

Egna regler med alla pass Först evalueras alla pass var för sig och för att sedan få fram hur spelaren ska spela generellt sett över alla pass läggs alla regler för passen ihop till en stor regel. I ramverket görs detta så att den kalkylerade poängen i varje pass summeras och jämförs mot spelarens slutgiltiga poäng. I All på bilden till höger så räknas alla attribut från varje pass ihop och körs genom en generell regel för att få ut bästa resultat. Detta lämnas till vidare forskning. G-REX regler med alla pass Precis som med de egna reglerna med alla pass så evalueras här de fyra passen var för sig och summeras senare till en stor regel. Detta lämnas till vidare forskning då G-REX inte stödjer denna typ av funktionalitet. Däremot så evalueras attributen för alla passen i G-REX för att få fram en generell regel för att hitta en bra spelare över alla pass. Detta utförs genom att ramverket skapar en fil med attribut från alla pass med passnamnet som ett prefix till attributnamnet. - 25 -

3. Experiment Klassificeringen av spelare baseras på spelarens poäng efter varje utfört pass. Klassificerbara klasser är bra och dålig (good / bad). Pass 1 Spelarnas poäng kan enkelt delas in i två olika grupper då dåliga spelare har poäng under 200 och bra spelare har över 330 poäng. Detta leder till att vi har fler bra än dåliga spelare i pass 1. 600 500 400 300 200 Serie1 100 0 1 6 111621263136414651566166717681 Pass 2 Poängen för pass 2 har inga tydliga nivåer som i pass 1. Därför delas spelarna in så att de 30 % bästa poängen från testdatan är bra spelare. Detta innebär att de som har poäng över 479 är bra spelare. 800 700 600 500 400 300 200 100 0 1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73-26 -

Pass 3 I pass 3 finns en tydlig gräns vid 400 poäng, därför är gränsen för en bra spelare 399 poäng. Detta leder till att väldigt få, endast 15 % av testdatan, klassificeras som bra. 700 600 500 400 300 200 Serie1 100 0 1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 Pass 4 Även här finns en gräns vid 350 poäng som skiljer bra spelare från de dåliga. Detta betyder att 20 % av testdatan klassificeras till bra spelare. 600 500 400 300 Serie1 200 100 0 1 4 7 101316192225283134374043464952555861646770-27 -

4. Resultat Föklaring av testresultat Det som testas på varje pass är hur bra reglerna kan predicera bra och dåliga spelare till rätt klass. Även längden på träden testas. Attributen för fuzzyvärden och crispvärden skiljer sig något. Fuzzyattributen LowX och HighX respektive LowY och HighY visar hur mycket spelaren har varit i en position nära varje attribut. Ifall spelaren har varit längst ner till vänster på skärmen så motsvarar det höga värden på LowX och LowY. Crispattributen skiljer sig på det sätt att endast positionen i X och Y led läses in och sedan omvandlas denna till Low(X) och HighX respektive Low(Y) och HighY. Dessa attribut motsvarar då crispvärdet fuzzifierat, t.ex om spelaren står längst ner till vänster så kommer Low(X) och High(Y) vara höga eftersom XNA mäter skärmen från hörnet uppe till vänster. Train ACC Hur bra regeln predicerar på träningsdatan Träningsdata 9/10 delar av datan vid 10 fold cross validation och all data vid testning i ramverket. Test ACC Hur bra regeln predicerar på testdatan (1/10 vid 10 fold cross validation) Length Medellängden på regelträdet som genereras Gräns för en bra spelare Gränsen i poäng som skiljer en bra spelare från en dålig. Bra spelare i % Procentsats på hur många av testdatan som är bra spelare. Naiv klassificering i % Procentsats på hur bra prediceringen blir ifall alla instanser klassificeras till samma klass. G-REX med vanlig fuzzy Regler från G-REX med vanlig fuzzy logic G-REX med very/rather fuzzy Regler från G-REX med fuzzy logic som tar hjälp av häckarna very och rather (beskrivet I Teoriavsnittet) G-REX Crisp Values Regler från G-REX med vanlig fuzzy. G-REX har själv fuzzifierat crisp values från ramverket. G-REX Crisp Values med very/rather Regler från G-REX med fuzzy logic innehållande häckarna very och rather. G-REX har själv fuzzifierat crisp values från ramverket. - 28 -

Pass 1 Pass 1 Train ACC Test ACC Length Gräns för en bra spelare 330 Bra spelare i % 56 Naiv klassificering i % 56 Fuzzy regler (egna) 80 Korrelation fuzzy regler 0,86 G-REX - med vanlig fuzzy 88 83 11 G-REX - med very/rather fuzzy 87 87 11 G-REX - Crisp Values 85 79 12 G-REX - Crisp Values med Very/rather 85 81 11 G-REX - med vanlig fuzzy G-REX Good/Bad - med very/rather fuzzy - 29 -

G-REX - Crisp Values G-REX - Crisp Values med Very/rather - 30 -

Pass 2 Pass 2 Train ACC Test ACC Length Gräns för en bra spelare 479 bra spelare i % 30 Naiv klassificering i % 70 Fuzzy regler (egna) 92 Korrelation fuzzy regler 0,89 G-REX - med vanlig fuzzy 92 92 9 G-REX - med very/rather fuzzy 92 92 8 G-REX - Crisp Values 94 92 6 G-REX - Crisp Values med Very/rather 94 92 7 G-REX - med vanlig fuzzy G-REX - med very/rather fuzzy - 31 -

G-REX - Crisp Values G-REX - Crisp Values med Very/rather - 32 -

Pass 3 Pass 3 Train ACC Test ACC Length Gräns för en bra spelare 399 bra spelare i % 15 Naiv klassificering i % 85 Fuzzy regler (egna) 70 Korrelation fuzzy regler 0,59 G-REX - med vanlig fuzzy 89 89 4 G-REX - med very/rather fuzzy 89 88 4 G-REX - Crisp Values 88 86 7 G-REX - Crisp Values med Very/rather 88 86 7 G-REX - med vanlig fuzzy G-REX - med very/rather fuzzy - 33 -

G-REX - Crisp Values G-REX - Crisp Values med Very/rather - 34 -

Pass 4 Pass 4 Train ACC Test ACC Length Gräns för en bra spelare 350 bra spelare i % 20 Naiv klassificering i % 80 Fuzzy regler (egna) 74 Korrelation fuzzy regler 0,68 G-REX - med vanlig fuzzy 89 85 10 G-REX - med very/rather fuzzy 91 86 11 G-REX - Crisp Values 89 84 9 G-REX - Crisp Values med Very/rather 89 83 9 G-REX - med vanlig fuzzy G-REX - med very/rather fuzzy - 35 -

G-REX - Crisp Values G-REX - Crisp Values med Very/rather - 36 -

Alla Pass Pass Alla Pass Train ACC Test ACC Length Fuzzy regler (egna) 85 G-REX Fuzzy 82 73 11 G-REX Fuzzy med very/rather 83 80 11 Naiv klassificering i % 75 G-REX - Crisp Values 86 74 14 G-REX - Crisp Values med Very/rather 88 74 15 G-REX - med vanlig fuzzy G-REX - med very/rather fuzzy - 37 -

G-REX - Crisp Values G-REX - Crisp Values med Very/rather - 38 -

5. Analys Vilka data och på vilket sätt ska data samlas in? Som beskrivet i kapitlet metod - insamling av data så loggas data fyra gånger i sekunden under en hel spelsession. Datan lagras till en loggfil med ett värde för varje attribut. De viktigaste attributen som visat sig efter testningar var spelarens position samt hur mycket skott och bomber denne avfyrar. Även spelarens hälsa har visat sig vara ett viktigt attribut. Detta visar sig tydligt på de regler G-REX skapar då dessa attribut är med i de flesta av reglerna. Exempelvis regeln på bilden nedan kommer från en G-REXkörning med fuzzifierad data från pass 1. Regeln visar tydligt att det är viktigt att veta hur mycket spelaren skjuter och i vilken position han är. För att vara en bra spelare så säger regeln att man ska skjuta mycket men inte stå i mitten på skärmen i X-led. Om man inte skjuter mycket så måste man stå långt till vänster (LowX) för att kunna klassificeras som en bra spelare. Mer information om vilken data som samlas in finns under kapitlet Metod Insamling av data. Hur ska data fuzzifieras för att visa tydliga resultat? Datan fuzzifierades på två olika sätt. Det första sättet var att ett ramverk skapades som fuzzifierade datan från loggfilerna till attribut så som LowAmmo, LowHP och FiredShots. Parametrarna för fuzzifieringen är enkla att ändra på för att få bästa möjliga fuzzifiering. För att manuellt fuzzifiera datan krävs vetskap om hur datan ser ut då värdena varierar mycket beroende på hur fuzzyfunktionerna definieras. En viktig del i fuzzifieringen är att - 39 -

få ett brett resultat så att inte alla värden blir 0 eller 1. Då blir logiken mer som binär logik än fuzzy. Det andra sättet som datan har fuzzifierats på är med G-REX. Datan har då lästs in i ramverket som skapar filer med crisp, inte fuzzifierade, värden. Dessa filer läses in i G- REX som då fuzzifierar värdena. På detta sätt är det ingen manuell påverkan på fuzzifieringen vilket innebär att mycket arbete med ramverkets fuzzifiering är överflödig. Vid jämförelse av dessa två fuzzifieringar visar det sig att det inte skiljer någonting vad gäller regler och prediceringar. Det innebär alltså att eftersom fuzzifieringen direkt i G-REX är enklare och mindre tidskrävande så skulle den vara att föredra framför att göra egna regler för att fuzzifiera speldata. Även speldesigners och personer utan kunskap om fuzzy logic skulle nu kunna använda fuzzy logicen som finns inbyggd i G-REX för att utvärdera sina strategier i spel. Hur ska resultaten presenteras för att visa mönster och strategier? Resultaten visas i tydliga grafer. Testerna utförs med olika typer av data, fuzzy från ramverket och fuzzy från G-REX. Resultatet från varje test visas med en graf under kapitlet Resultat. Varje graf innehåller en regel som beskriver hur en spelare spelar för att vara bra respektive dålig. Dessa regler jämförs mot de regler som spelutvecklaren hade satt upp innan all testning för att se ifall de stämde överrens eller om spelarna inte spelade alls som spelutvecklaren hade tänkt sig. Reglerna som sattes upp för ramverket, som speglade de strategier spelutvecklaren till detta spel hade ämnat att spelare skulle spela, visade sig stämma väldigt bra överrens med de regler G-REX skapade för varje pass. Kan man med hjälp av fuzzy logic analysera data från speltest och dra användbara slutsatser om spelstrategier och hur spelet kommer spelas? Ja, Fuzzy logic fungerar utmärkt för att analysera data och dra slutsatser om spelstrategier. Med hjälp av fuzzy logic och G-REX hittades tydliga regler om hur spelare spelar. Resultaten från testkörningarna visar tydligt att det går att hitta tydliga strategier då klassificeringen får bra resultat på alla pass. Bäst resultat blir det på pass 2 då träffsäkerheten på klassificeringen är runt 92 % för både G-REX och ramverket. Reglerna som spelutvecklaren hade satt upp innan testningen visade sig stämma väldigt bra överrens med de regler G-REX skapade. Se nedan. Spelutvecklarens regel för pass 1: float fuzzyvalue = 0; fuzzyvalue += LowX; fuzzyvalue += HighX; fuzzyvalue += FiredShots / 2; fuzzyvalue += UsedBombs; - 40 -

G-REX regel för pass 1 Spelutvecklarens regel för att vara en bra spelare säger att det är bra att stå antingen till vänster eller till höger, skjuta skott eller skjuta bomben. G-REX regel säger nästan exakt samma sak. Om du skjuter mycket skott så ska du inte stå i mitten. Om du inte skjuter mycket skott så måste du stå till vänster för att vara en bra spelare. Att G-REX bara använder vänster och inte höger då det är lika bra att stå till höger är att spelare har en tendens att röra sig åt vänster istället för höger. Detta visar sig tydligt på de heat maps som finns i appendix 1. Fuzzy logic hjälper inte bara spelutvecklaren att testa sina egna regler o strategier stämmer överrens med hur spelaren faktiskt spelar, det hjälper även till att hitta oväntade strategier och s.k. kryphål. Till detta spelat hittade en ytterst intressant regel i G-REX gällande pass 2. Regeln säger: ifall spelaren använder bomber och förlorar hälsa så är det en bra spelare. Detta verkar väldigt konstigt då det aldrig borde vara bra att förlora hälsa eftersom det inte finns något sätt att återgenerera hälsan. Vad innebär då detta? Jo, ifall en spelare får slut på skott och endast har ett fåtal fiender kvar som är på väg ner mot honom så är det bättre att döda de med kroppen och förlora hälsa än att låta de flyga förbi. När fienderna flyger förbi så återskapas de högst upp och börjar attackera mot planet igen. Det spelaren då tjänar på genom att offra sig och döda fienderna genom att förlora hälsa är att då skapas en ny våg med fiender (20st) istället för att det kommer 1 fiende som inte ger lika mycket poäng som 20 st. När spelaren väl skjutit den ensamma fienden - 41 -

så tar det några sekunder innan nästa våg med 20st fiender kommer och på det sättet hinner spelaren inte få ihop lika mycket poäng som han hade fått ifall han offrat sig och dödat fienden med sitt skepp direkt. Denna strategi hade varit svår att hitta för spelutvecklaren och det är en väldigt intressant aspekt vilken bara styrker användandet av fuzzy logic vid speltestning. - 42 -

6. Slutsatser Vilka data och på vilket sätt ska data samlas in? Det är väldigt viktigt när speltestning ska utföras vilka attribut som samlas in. Därför bör speltestaren tänka noga igenom vad det är han vill få ut av speltesterna innan han bestämmer sig för vilka attribut som ska loggas. Beroende på vad det är för typ av spel så varierar attribut och sättet att samla in data på. I fallet med Top Down Shooter som denna rapport använder som exempel visade det sig att spelarens position och skjutförmåga var väldigt viktiga attribut från loggfilerna. Detta kan ha att göra med att spelet inte är så avancerat, det handlar till största del om att finna en optimal position där man sedan kan skjuta många fiender från. Hur ska data fuzzifieras för att visa tydliga resultat? Det visade sig att hur fuzzifieringen utfördes inte hade någon större påverkan på reglerna som G-REX skapade. Den egna fuzzifieringen i ramverket var lika bra som den fuzzifieringen G-REX utförde på varje pass för sig, däremot var den något sämre (3%) på predicering gällande hela spelet. 3 procent är en väldigt liten skillnad så det går inte dra några egentliga slutsatser från den lilla skillnaden. Tydliga resultat blev det oberoende av hur fuzzifieringen gjordes. Givetvis hade fuzzifieringen i ramverket tweakats för att få bästa tänkbara fuzzifiering. Om värdena för den fuzzifieringen varit sämre hade givetvis reglerna som skapades inte blivit lika tydliga och då hade G-REX fuzzifiering varit mycket bättre och tydligare. Ifall två olika fuzzifieringstekniker ska jämföras är det väldigt viktigt att fuzzifieringen sker med likadana attribut. Ramverket har en fuzzifiering där attributen varierar mellan 2 och 3 för varje värde. Position i X-led finns exempelvis i Low, Medium och High. Detta blev problem i G-REX då inställning finns endast för hela datamängden ifall det ska vara 2 eller 3 attribut. Då det inte går att jämföra datan på ett bra sätt så går det inte jämföra hur G-REX fuzzifiering står sig mot ramverkets när den läses in till ramverket. G-REX fuzzifiering skapar två attribut Low/High som alltid adderar ihop till 1. På det sättet är inte ramverket uppbyggt då LowAmmo inte är en negation av HighAmmo till exempel. Även här blir det problem att jämföra fuzzifieringarna i ramverket. Hur ska resultaten presenteras för att visa mönster och strategier? Ett tydligt sätt att presentera resultaten är genom de trädgrafer som beskriver regler för varje pass. Här ges en överskådlig och lättläst bild av hur bra och dåliga spelare spelar. Det är då lätt att leta runt i trädet för att se om de bra spelarna följer de strategier som designern har tänkt sig. Något som också visat sig användbart för att tydliggöra mönster och strategier är de så - 43 -

kallade heat maps. Dessa talar om vart på skärmen spelarna befann sig när de blev träffade. Detta ger en grafisk och tydlig bild av i vilken position i passen spelarna blir träffade mest men även i vilket pass spelarna blir träffade mest. Eftersom heat maps visar var spelarna blir träffade så känns det rimligt att anta att de pass där de blir träffade mest och de positioner de hade är de som är svårast. Detta antagande är dock inte helt säkert och detta har sin grund i ett av de resultat vi fick i bl.a. pass 2. Där hittades nämligen regler som säger att bra spelare blir träffade i detta pass. Detta säger då att heat mapen för detta pass inte bara visar vart det är svårt utan även något helt annat. Vad den visar är nu även en ny strategi som de bra spelarna funnit. Den går ut på att det är mer värt att bli träffad och få fram en ny våg än att akta sig och vänta till nästa runda, detta beskrivs djupare i analysen av pass 2. Detta visar tydligt att det inte enbart går att använda sig av en metod för att presentera de mönster och strategier som används. Kan man med hjälp av fuzzy logic analysera data från speltest och dra användbara slutsatser om spelstrategier och hur spelet kommer spelas? Då fuzzy logic används, här i programmet G-REX, kan man till en stor del hitta de bra spelarna och genom att visa vilka regler som beskriver dessa spelare så kan man tydligt se strategier och på så vis hur spelet kommer att spelas. En av de stora fördelarna med att använda fuzzy logic är att regler som inte är triviala och som är svåra att förutse kan upptäckas. Så visade sig vara fallet i Pass 2 där en regel hittades som visar att det är bra att bli träffad. Något som bör tas i beaktning är att även om program som G-REX hittar bra regler och kan beskriva hur bra spelare spelar i varje pass så ger det inte alls lika bra regler och resultat då alla passen läggs ihop för att skapa en generell regel. Vad detta kan bero på är att vissa attribut kanske helt saknas som inte spelar roll när man ser på varje pass för sig men som har stor betydelse när man ser på ett helt spel. Det kan även bero på att den använder vissa attribut fel som t.ex. att varje pass räknar med att spelaren kan använda en bomb. Detta stämmer när man ser på passen var för sig eftersom spelaren har en bomb från början och på så sätt kan ha en bomb på vilket pass som helst. Däremot sett över hela spelet så kan givetvis inte spelaren skjuta en bomb i varje pass eftersom endast en bomb finns att tillgå. Detta gör ju att en spelare som är bland de bästa sett över hela spelet, troligtvis inte är bäst sett i varje pass för sig. Säg att spelaren (X) som får bra slutpoäng skjuter bomben i första passet. När vi sedan jämför X olika pass med de spelare som får mest poäng i respektive pass, då är det vanligtvis spelare som använt bomben i det passet. X får då mindre poäng än en bra spelare i alla pass utom ett men är ändå en bra spelare med mycket poäng sett över hela spelet. Metoden fungerar alltså bra om man delar in spelet i pass där varje pass innehåller fiender med samma rörelsemönster. - 44 -