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)