2004-10-19 Sammanfattning Vi har valt att arbeta med att resonera kring hur olika spelteorier skulle kunna tillämpas i praktiken. För att göra detta har vi programmerat ett simpelt spel i actionscript. Som är ett programmeringsverktyg i Flash. Det finns flera olika teorier inom gaming Theory, exempelvis Min Max. Det huvudsakliga resonemanget bakom denna processalgoritm är att spelaren Min alltid arbetar för att motarbeta spelare Max’s drag, vilket den gör igenom att alltid välja sitt drag till det som för Max är det mest ogynnsamma. Dessa antaganden görs utifrån ett sökträd. Att beskära sökträdet kallas Alpha pruning och är en utveckling av MinMax algortimen. Vi har skapat ett spel där vår huvudkaraktär försöker undvika agenter i form av kaniner. När karaktären kommer för nära en kanin så kommer denna att börja jaga karaktären för att kunna attackera då går spelet in i ett stridsmoment där kaninens attacker baseras på Fuzzy Logic. Vårt spel använder sig i viss mån av MinMax algoritmen i sina sökningar efter huvudkaraktären. När kaninen får så lite HP att den vet att nästa attack med säkerhet kommer att döda den blir den mycket flyktbenägen, något som regleras mha. Fuzzy Logic. Det är viktigt att kaninerna inte vill fly för ofta eller är för bra på det eftersom det skulle vara väldigt tråkigt för spelaren.Vi har konstaterat att det är möjligt att skapa tämligen komplexa spel inom Flash miljön. 1(12) 2004-10-19 Innehållsförteckning Sammanfattning ____________________________________________________________ 1 Innehållsförteckning _________________________________________________________ 2 Introduktion till ämnet _______________________________________________________ 3 Syfte ______________________________________________________________________ 3 Metodbeskrivning ___________________________________________________________ 4 Litteraturstudie _____________________________________________________________ 5 Resultat ____________________________________________________________________ 8 Diskussion av resultatet, koppling till tidigare studier ____________________________ 10 Slutsats ___________________________________________________________________ 11 Referenser ________________________________________________________________ 12 2(12) 2004-10-19 Introduktion till ämnet Game Theory, eller Spelteori som det heter på svenska, är teorin om strategisk interaktion mellan en eller flera besultsfattare (Myerson 1991 Fudneberg and Tirole). Det något missvisande namnet härstammar ursprungligen från dess tidiga användning inom enkla brädspel, dock har spelteori som begrepp ett mycket bredare användningsområde idag. Exempelvis brukar man tala om spelteori som matematiska analys av en situation där två eller fler parter har till uppgift att fatta beslut som direkt kan komma att påverka varandras välfärd. Det går att tillämpa spelteori inom de flesta socialvetenskapliga områden där strategiska beslut är relevanta. Man kan dela in spelteorin i två huvudområden ”cooperative” och ”noncoperative”. När man ser till teorier för ”cooperative” så är det alla beslutsfattares gemensama handlingar som står i fokus, men i ”noncoperative” är det istället den enskillde beslutsfattarens handlingar som är intressanta. Vi kommer i huvudsak att behandla den senare i denna rapport till följd av vårat syft. Syfte Gaming Theory har fått sitt namn efter att det i början tillämpades i implementeringen av enkla brädspel. Efterhand har forskningen kommit till nytta även för mycket komplexa brädspel som t.ex. schack. Dock är inte brädspelen några storsäljare bland moderna underhållningsspel, men kanske är Gaming Theory en viktig aspekt även i mer publikfriande spel. Vi ville ta fram ett spel, i rollspels utformning med inspiration från den klasiska japanska genren (med kända titlar som t.ex. Final Fantasy), och se om vi kunde nyttja oss av teorier från Game Theory för våran implementering. 3(12) 2004-10-19 Metodbeskrivning Vi har skapat rollspelet ”Caligo Ex Broberg”. Vi har implementerat hela spelet i Flash, eftersom vi inte har fått lära oss grafikhantering i Java. Språket är liknande, men känns aningen mer primitivt. Inför uppgiften har vi både studerat programeringsspråket till Flash, vilka möjligheter och begränsningar det innebär, samt sökt fakta kring olika tänkbara lösningar. Till kunskapsbas utgick vi ifrån kursboken, och sökte sedan vidare i mer specifik litteratur för att hitta metoder som kunde tillämpas i koden. Vi fann genom våra studier även intressanta metoder som vi inte hade möjlighet att implementera, men några är ändå omnämnda i rapporten eftersom de är av intresse för ämnet. 4(12) 2004-10-19 Litteraturstudie MinMax Det finns ett flertal olika algoritmer utvecklade specifikt för att kunna tillämpas inom området spelteorier, den första, och kanske också den mest elementära är den så kallade MinMax- algoritmen. Denna algoritm utgår ifrån att systemet i varje unikt spelmoment har två spelare representerade som ”Min och Max”. Det måste alltså vara ett turbaserat spel, dvs. ett spel där två spelare utför sitt drag/tur i tur och ordning, t.ex. luffarschack Det huvudsakliga resonemanget bakom denna processalgoritm är att spelaren Min alltid arbetar för att motarbeta spelare Max’s drag, vilket den gör igenom att alltid välja sitt drag till det som för Max är det mest ogynnsamma. Max som å andra sidan eftersträvar att personligen uppnå så mycket poäng som möjligt kommer givetvis att motarbeta Min i sitt nästa drag. Eftersom dessa två fiktiva spelare baserat på deras inbyggda kunskapsbaser och deras strategiska förmåga hela tiden strävar efter att uppfylla sina unika spelmål kommer denna spelalgoritm att vara väl anpassad för de flesta enkla turbaserade spelsituationer. Förutsättningarna för att denna metod skall kunna implementeras är att de båda ”spelarna” Min och Max har tillgång till ett begränsat sökträd i vilket möjliga kommande utfall finns mer eller mindre överskådliga. Ur detta träd ska Max och Min sedan kunna plocka de spelval som för dem är mest gynnsamma. Vilket i sammanhanget innebär att Min kommer att eftersträva att nå de drag som resulterar i en så låg poängställning som möjligt, medan Max försöker motverka detta igenom att söka sig igenom trädet fram till högre poäng. Min Max kan definieras som ett sökproblem. På så sätt fungerar det som: 1: Initeringstadiet: Information om världen och agentens omgivning ser ut. Dessutom får Agenten information om vilka objekt som finns att manipulera. 2: Tillsättningsfunktionen: Här erhåller agenten en lista över vart i världen den befinner sig samt vilka drag som är tillgängliga / tillåtna från den plats den befinner sig. 3: Termineringstest : Agenten undersöker ifall spelets avslutningsvillkor uppfyllts? 4: Objektfunktionen: Definerar olika termineringstillstånd med numeriska värden. I schack finns det tre, -1, 0 och 1, som motsvara förlust, oavgjord match och vinst. Visa spel kan ha ett flertal utfall, andra bara ett, men det vanligaste torde vara två. 5(12) 2004-10-19 Alpha pruning Man förutsätter i MinMax algoritmen att bägge spelarna kommer att spela optimalt. Det för att Max också vet att oberoende på drag så kommer Min att försöka att göra det sämsta av situationen. Då blir det egentligen bara intressant att se till hur dåligt utfallet av ett drag kommer att bli. Genom att välja den handling som ger det minst negativa utfallet efter att Min har gjort sitt drag blir prioriterat för Max. Det går därför att beskära sökträdet genom att först se till alla utfall (barn) från en nod, men sedan ignorera noder så fort deras utfall är sämre än det minst dåliga hitils. Söktiden är kanske inte något problem i så pass enkla spel som luffarschak, men i riktigt schack där antalet utfall för varje handling är omfattande är en kort söktid avgörande för ett lyckat resultat. Att beskära sökträdet kallas Alpha pruning och är en utveckling av MinMax algortimen. Fuzzy logic Eftersom MinMax följer ett optimalt handlingsmönster utifrån varje givet drag så blir dess beteende snabbt förutsägbart. Något som kan få en mänsklig motståndare att tappa inlevelsen i spelet. Människor handlar inte rationellt i varje situation, och det är också vad som gör dem till intressanta motståndare. För att ge datorn ett sken av att vara mer oförutsägbar, och mer ”mänsklig”i sitt beteende så kan man tillämpa så kallad ”Fuzzy Logic” (Rouse 2001). Varje tänkbar handling tilldelas då en vikt beroende på hur rationell den är, därefter avgör en slumpvariabel vilken handling som skall tillämpas. Rationella handlingar har en högre vikt och den mest rationella handlingen är oftast den som mest sannolikt kommer att inträffa, men som en följd av slumpgeneratorn så kommer även mindre optimala handlingar kan utföras. Hur viktningen skall läggas är förstås beroende av spelsituation och svårigheten. Evolution Man kan vidareutveckla principerna bakom fuzzy logic till att efterlikna en evolutionär algoritm. Igenom att i sådanna fall förse de aktiva agenterna I en spelsituation med ett ”historiaminne” så kan de utnyttja denna för att uttrycka mer advancerade handlingscheman (Josephson 2001). Grundprincipen bakom detta antagande är att vi precis som I Min Max algoritmen arbetar utifrån förutsättningarna att vi har två spelare som försöker motverka varandras agerande. Inför varje handling I spelsystemet så kommer en spelare låt oss säga ’A’ att plocka en tillgänglig strategi från en kunskapsdatabas, och spela ut den mot sin motståndare ’B’. Efter ett antal slumpmässiga val av strategier så kommer vår agent ’A’ att titta I sitt historiaregister. Låt oss säga att han kontrollerar vilka strategier som valts de tre senaste rundorna och vilket spelresultat dessa tre strategier har åstadkommit. Baserat på denna kunskap kan vår användare A utgå från att den strategi som historiskt sätt visat sig bäst också kommer att ge bäst resultat den här rundan. För att denna algoritm ska vara praktiskt tillämningsbar i ett spel så krävs det dock att spelet inte alltid utgår från den historiskt sett bästa strategin, utan istället föreslår Josephson (2001) att man tillämpar en slumpgenerator som bestämmer ifall Agenten A I det här fallet ska utgå ifrån ”history”, eller om det är dags att pröva en ny strategi. 6(12) 2004-10-19 Låt oss göra det praktiska antagandet att vi har användare 1 och användare 2. Dessa användare har tillgång till ett stort urval av olika strategiska tillvägagånssätt X. X = A B C, där A, B C representerar olika spelstrategier. Våra tidigare drag har sparats undan I History = h. h = (Bb)(Aa)(Ba)(Ab)(Bb) Vår agent 1 hämtar de tre senaste turerna till sitt minne y; v = (B, A, B) Vår agent 2 hämtar de tre senaste turerna till sitt minne y; v = (b, a, a) Agent ett uppmärksammar resultaten av de spelade partierna och lägger märke till utgången w = (1, 3 ,0) B =1/2 A = 3 Således kommer Agent 1 att tillämpa strategi A i sin nästa spelrunda mot Agent 2 om inte slumpgeneatorn tvingar den att plocka ett värde från X. Detta sker ibland för att undvika ”inavel” om en viss strategi blir dominerande, men kanske inte alltid är den bästa i all framtid. Denna metod går även att utveckla för större populationer av agenter, och man kan låta agenterna lära sig inte bara av egna erfarenheter utan gemensamma slutsatser. 7(12) 2004-10-19 Resultat Spelet syns i ett ovanifrån perspektiv och går ut på att manövrera huvudkaraktären i en värld fylld av monster och andra faror. Till följd av begränsningar i tid så har vi endast hunnit implementera den första banan i spelet, där det gäller för karaktären att ta sig över en äng där det vandrar kaniner. Kaninerna rör sig slumpmässigt över ängen, men är begränsade i sin framfart utav diverse hinder, och de får heller inte lämna banan. När karaktären kommer för nära en kanin så kommer denna att börja jaga karaktären för att kunna attackera. Kaninernas rörelser är begränsade till rakt upp, ner, höger och vänster. Dock är huvudkaraktären fri att röra sig även i sneda riktningar, något kaninerna kan efterlikna då de börjar jaga eftersom deras rörelser då sker i mkt små steg. Kaninernas hastighet är normalt slumpmässig, men blir konstant då de inleder en jakt. Om karaktären lyckas fly iväg från kanin så kommer den att sluta sin jakt, tills vidare. Algoritmen för kaninen blir. 1 Slumpa startkoordinater, starthastighet, startgång 2.1 Om huvudkaraktären är inom 150pixels avstånd 2.1.1 Bestäm riktningen till huvudkaraktären 2.1.2 Gångriktningen blir den som har störst avstånd mot karaktären, sätt fart till 15 2.1.3 Om huvudkaraktären är på samma punkt. 2.3.3.1 Ta bort kaninen 2.3.3.2 Initiera attack 2.2 Om gångriktningen är blockerad, sätt gångriktning till motsatt riktning, sätt fart till 15 2.2.1 Gå till 2.1 2.3 Har det gått 15 turer med samma slumpriktning. Slumpa gångriktning, slumpa hastighet mellan 0-10 2.4 Gå till 2.1. När en strid initieras startas ett separat program. Nu kan spelaren och kaninen åskådas i högre upplösning, sett från sidan. Spelaren har i nuläget bara ett enda val, att attackera kaninen. Kaninen å sin sida har fler möjligheter, den kan attackera, utföra en special attack och den kan försöka att fly. Tilläggas kan kanske att den stackars kaninen ändå är i underläge, till följd av att den har färre ”hälsopoäng (HP)”, dvs. den dör snabbare av skadan den får, och dess attacker gör mindre skada än huvudkaraktären. Striden blir ett samspel mellan spelaren och kaninen. Det är spelaren som får inleda striden, som sker i turer. När spelaren utfört sin attack så får kanin utföra en handling (och tills det har skett kan inte spelaren göra något). Striden avslutas ifall antingen kaninen eller spelaren förlorar sin HP, alternativt att kaninen lyckas fly. Kaninens val av handling, baseras delvis på en slump men slumpen viktas något efter hur situationen ser ut. En skadad kanin blir mer flyktbenägen, medan en kanin med god hälsa har lättare att försöka sig på en specialattack. 8(12) 2004-10-19 Algoritmen för kaninen blir nu. 1 Är HP <= 0, avsluta 2 Har huvudkaraktären attackerat?, om ja 2.1 Om HP>10 2.1.1 Sätt Special = 30% 2.1.2 Attack = 65% 2.1.2 Flykt = 5% 2.2 Om 3<HP<11 2.2.1 Sätt Special = 10% 2.2.2 Sätt Attack = 80% 2.2.3 Sätt Flykt = 10% 2.3 Om HP<4 2.3.1 Sätt Special = 5% 2.3.2 Sätt Attack = 65% 2.3.3 Sätt Flykt = 30% 2.4 Slumpa handling 2.4.1 Om Attack, slumpa skada mellan 1-6 2.4.2 Om Special slumpa skada mellan 3-11 2.4.3 Om flykt, slumpa flykt = sant 60%, flykt = falskt 40% 2.4.3.1 Om flykt == sant, avsluta 2.5 Kaninen har attackerat = sant 3 Gå till 1 Eftersom karaktären är spelarstyrd så blir dess algoritm inte så intressant. Den har förståss motsvarande kontroll av HP för att se om hon är död. För den intresserade hänvisar vi till källkoden. Eftersom spelet är i utvecklingsstadiet så har vi infört en del specifika funktioner. Vi har en knapp för att pausa spelet och en för att starta åter. Vi kan skapa nya kaniner på spelplanen genom ”insert” och döda alla med ”end”. Huvudkaraktären kan gå utanför planen, och kan inte i någon egentlig mening vinna spelet just nu, eftersom hon bara skall kunna ta sig till nästa bana (som vi ännu inte hunnit implementera). Fortsättning följer.. 9(12) 2004-10-19 Diskussion av resultatet, koppling till tidigare studier Enligt de resultat som vi uppnått kan vi direkt sluta oss till ett flertal hypoteser om ett antal olika spelteorier som vi kunnat tillämpa i vår implementation. Vi har hela tiden haft för avsikt att göra spelupplevelsen bra igenom att minska den uppenbara närvaron av resonerande element i vår systemgränssnitt. Av i synnerhet den anledningen så har vi valt att tillämpa slumpmässigt agerande gör våra aganter som i det här exemplet figurerar som spelmotståndare. Skulle våra kaninagenter agera efter optimal sökprestanda så skulle det kanske lämpa sig att göra en systematisk finkammning av skärmen, fram tills dess att hela marken slutligen har täckts in i jakten på huvudkaraktären. Dock skulle en sådan kanin vara förutsägbar och tråkig. I den nuvarande presentationen så agerar kaninerna till synes helt slumpmässigt, vilket gör det svårare för spelaren att förutse deras nästa drag och ökar risken att han/ hon springer in i en kanins ”synfält.” Även om kaninernas sökning förefaller tämligen kaotisk så är deras rörelsescheman uppbyggda enligt nedanstående princip 1.Spelet startas, information om eventuella hinder i omgivningen laddas i systemt. Systemet skickar en lista över problematiska objekt till varje kanin. 2. Kaninen placeras ut i ett hinderfritt område på kartan, för att sedan påbörja sin vandring i en slumpmässig färdriktning. Ifall alla färdriktningar inte är tillåtna så kommer kaninen att stoppas av systemet. 3. Kaninen undersöker sin omgivning och ifall den hamnat i närkontakt med karaktären. Den sökprocess som kaninerna tillämpar under spelets gång liknar bitvis den målsökning som används för att beskriva Min Max algoritmen. Dock så saknas den avslutande delen som avgör och uppdaterar termineringsvillkor. I fallet med Caligo Ex Broberg så är kaninernas mål inte själva sökningen utan snarare så är sökningen bara något som leder fram till det strategiska momentet ”strid”. Att uppnå strid är kaninernas första, och högst prioriterade mål. I en strid så viktas olika handlingar i enlighet med ”fuzzy logic”. Dock är det inte den till synes optimala specialattacken som har störst vikt utan den vanliga attacken. Detta av den enkla anledningen att specialattacken är något unikt, och inte bör vara vanligare än standardattacken. När kaninen får så lite HP att den vet att nästa attack med säkerhet kommer att döda den blir den mycket flyktbenägen, dock är flykt inte något som är garanterat. Det är viktigt att kaninerna inte vill fly för ofta eller är för bra på det eftersom det skulle vara väldigt tråkigt för spelaren. Hade vi haft mer tid och bättre kunskap i Flash så hade det blivit ett väldigt roligt spel om vi kunnat implementerat en evolutionär spelteori. Då kunde kaninerna gradvis utveckla förmågor med tiden och striderna som håller spelet mer utmanande under längre tid. Det hade varit att föredra. 10(12) 2004-10-19 Slutsats Vi har konstaterat att det är möjligt att skapa tämligen komplexa spel inom Flash miljön. Vidare har vi upptäckt många metoder för att förbättra AI:n i dataspel, och det är med sorg vi konstaterar att det inte fanns tidsutrymme att testa fler metoder i praktisk implementering. 11(12) 2004-10-19 Referenser Richard Rouse -Game Design Theory & Practise (2001) – ISBN 1-55622-735-3 Jens Josephson -Evolution and Learning in Games (2001) – ISBN 91-7258-587-0 Stuart Russell, Peter Norvig –Artificial Intelligence (1995) – ISBN 0-13-080302-2 Glen Rhodse, Justin Evvereth-Church - Flash Games Studio (2001) –ASIN 1903450675 12(12)