Optimering av en Yatzytur genom utvärdering av alla inom turen nåbara tillstånd

Relevanta dokument
Optimal Yatzy. En jämförelse mellan den matematiskt optimala strategin och en i vardagligt spel tillämplingsbar strategi

Optimal Yatzy KAN DEN OPTIMALA ALGORITMEN OPTIMERAS? JOAKIM HEDLUND NIKLAS QVARFORTH

Miniprojektuppgift i TSRT04: Femtal i Yatzy

Sannolikhetslära till pdf.notebook. May 04, Sannolikhetslära.

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

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

Optimal spelstrategi för yatzy

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Slump och statistik med Scratch

4 Diskret stokastisk variabel

Mörkpoker Strategi Christian Eriksson och Mikael Knutsson Uppdaterad

TAIU07 Matematiska beräkningar med Matlab

Slump och statistik med Scratch. Se video

Ishavsspelet är ett kort- och tärningsspel för 2-4 spelare som bygger på tur och lite strategi

Memory Det kombinatoriska spelet

1 Föreläsning I, Mängdlära och elementär sannolikhetsteori,

Föreläsning 5: Dynamisk programmering

Yatzy Optimala spelstrategier

Ekvivalensrelationer

TDDI16: Datastrukturer och algoritmer

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

Sagaforms spelregler SCHACK, FIA MED KNUFF, BACKGAMMON, DOMINO

BFL122/BFL111 Fysik för Tekniskt/ Naturvetenskapligt Basår/ Bastermin Föreläsning 13 Kärnfysik 2 den 4 maj Föreläsning 13.

Volym liter och deciliter

Kurs i programmering Java Uppgifter

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

Vad kan hända? strävorna

Föreläsning 2. Kapitel 3, sid Sannolikhetsteori

Beskrivning av Gesällprov. Fia Med Knuff. Mikael Rydmark.

NATIONELLT KURSPROV I MATEMATIK KURS B VÅREN Del I, 9 uppgifter utan miniräknare 3. Del II, 8 uppgifter utan miniräknare 5

Dynamisk programmering. Dynamisk programmering. Dynamisk programmering. Dynamisk programmering

NATIONELLT KURSPROV I MATEMATIK KURS B VÅREN Del I, 10 uppgifter utan miniräknare 3. Del II, 9 uppgifter med miniräknare 6

Handbok Kiriki. Albert Astals Cid Eugene Trounev Översättare: Stefan Asserhäll

getsmart Grå Regler för:

Sannolikhet DIAGNOS SA3

Algebra I, 1MA004. Lektionsplanering

Extramaterial till Matematik X

Kapitel 2. Grundläggande sannolikhetslära

1 Mätdata och statistik

Algoritm för uppskattning av den maximala effekten i eldistributionsnät med avseende på Nätnyttomodellens sammanlagringsfunktion

Eulercykel. Kinesiska brevbärarproblemet. Kinesiska brevbärarproblemet: Metod. Kinesiska brevbärarproblemet: Modell. Definition. Definition.

1 Föreläsning I, Vecka I: 5/11-11/11 MatStat: Kap 1, avsnitt , 2.5

Matematiska lägesmått med en micro:bit

Generering av L-system fraktaler med Processing.js

Extramaterial till Matematik X

Föreläsning Datastrukturer (DAT036)

getsmart Lila Regler för:

Vidare får vi S 10 = 8, = 76, Och då är 76

2. Förkorta bråket så långt som möjligt 1001/

Föreläsning 6 Datastrukturer (DAT037)

SF1920/SF1921 Sannolikhetsteori och statistik 6,0 hp Föreläsning 1 Mängdlära Grundläggande sannolikhetsteori Kombinatorik Deskriptiv statistik

Matematiska lägesmått med en micro:bit

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Optimeringslära Kaj Holmberg

Ansiktsigenkänning med MATLAB

Algoritmer, datastrukturer och komplexitet

Quine McCluskys algoritm

1, 2, 3, 4, 5, 6,...

Frekvenstabell över tärningskast med C#

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

kl Tentaupplägg

Tentamen Datastrukturer (DAT036)

Armin Halilovic: EXTRA ÖVNINGAR

Laboration 2. Artificiell Intelligens, Ht Lärare: Christina Olsén Handledare: Therese Edvall Daniel Ölvebrink

Kortspel. Ett spel - tusen upplevelser

TANA17 Matematiska beräkningar med Matlab

Datastrukturer och Algoritmer D0041D

5Chans och risk. Mål. Grunddel K 5. Ingressen

ÅLDER 10+ Approval: ROD. File Name: B _Risk_Core_INST_15.indd. Originator: CF 2 5 SPELARE

Föreläsningsmanus i matematisk statistik för lantmätare, vecka 2 HT07

Three Monkeys Trading. Tärningar och risk-reward

Stokastiska processer med diskret tid

STOCKHOLMS UNIVERSITET MATEMATISKA INSTITUTIONEN Avd. Matematisk statistik Anders Björkström

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

Föreläsning 6. Slumptal Testa slumptal Slumptal för olika fördelningar Grafer Datastrukturen graf

Algoritmer, datastrukturer och komplexitet

Regler för bräde. av Sten Helmfrid

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

Veckoblad 3. Kapitel 3 i Matematisk statistik, Blomqvist U.

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

Förberedande Sannolikhet DIAGNOS SAF

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

Optimeringslära Kaj Holmberg

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

Steg-Vis. Innehållsförteckning

Np MaB vt 2002 NATIONELLT KURSPROV I MATEMATIK KURS B VÅREN 2002

Artificial Intelligence

Vinjetter TDDC91 Datastrukturer och algoritmer

Första sidan är ett försättsblad (laddas ned från kurshemsidan) Alla frågor som nns i uppgiftstexten är besvarade

Genetisk programmering i Othello

Föreläsning 1, Matematisk statistik Π + E

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

Lösningsförslag till övningsuppgifter, del II

Tentamensskrivning i Diskret Matematik för CINTE och CMETE, SF1610, onsdagen den 20 augusti 2014, kl

Transkript:

Optimering av en Yatzytur genom utvärdering av alla inom turen nåbara tillstånd Arvid Fahlström Myrman <arvidfm@kth.se> 30 april 2014 1

Sammanfattning I denna rapport beskrivs en metod för att kunna optimera den förväntade resultatet från en tur under en omgång av Yatzy. Yatzy är ett klassiskt tärningsspel som kan spelas ensam eller med flera spelare. Det finns sedan tidigare en matematiskt optimal strategi för hur man bäst bör gå tillväga för att optimera det förväntade slutresultatet från en omgång Yatzy, först beskriven av James Glenn för amerikanska regler och sedan applicerad på svenska regler av Markus Larsson och Andreas Sjöberg, som bygger på att bygga upp en graf över alla möjliga tillstånd under spelets gång. I denna rapport beskrivs en mer begränsad version av denna metod, som endast bygger upp en graf över de möjliga tillstånden för den nuvarande turen, med syfte att minska beräkningstid och minnesåtgång för att lagra grafen. Metoden har visat sig vara tillräckligt snabb för användning i begränsade miljöer såsom mobila plattformar, och den genomsnittliga slutpoängen efter ett färdigt spel har efter 10 000 simuleringar beräknats som ungefär 198,6 poäng, runt 50 poäng sämre än Larsson och Sjöbergs metod, och 175 poäng sämre än den högsta möjliga slutpoängen 374. Den är även 12 poäng sämre än en heuristisk beskriven av Nils Dahlbom Norgren och Philip Svensson, men metoden som beskrivs i denna rapport har fördelen att beslutsfattningsstrategierna är enklare att modifiera. Denna rapport är en kandidatuppsats skriven för kursen DD143X Examensarbete inom datalogi, grundnivå, för Skolan för datavetenskap och kommunikation (CSC) på Kungliga Tekniska högskolan (KTH) i Stockholm. Handledare är Vahid Mosavat. 2

Innehåll 1 Introduktion 4 1.1 Yatzy................................. 4 1.2 Tidigare arbete............................ 4 1.3 Syfte.................................. 5 2 Metod 5 2.1 Tärningskast............................. 5 2.1.1 Möjliga tärningskast..................... 5 2.1.2 Möjliga val av tärningar att spara............. 6 2.1.3 Sannolikheter......................... 6 2.2 Tillståndsgrafen............................ 6 2.2.1 Struktur............................ 6 2.2.2 Konstruktion......................... 8 2.2.3 Viktning............................ 9 2.2.4 Strykning av kategori då ingen är poänggivande...... 9 3 Resultat 10 3.1 Implementationsdetaljer....................... 10 3.2 Simulering............................... 10 4 Diskussion 11 4.1 Potentiella förbättringar....................... 12 A Poängblocket 14 3

1 Introduktion 1.1 Yatzy Yatzy är ett tärningsspel som kan spelas både själv och med flera personer. Det slutgiltiga målet är att samla så många poäng som möjligt. Spelet är turbaserat, och varje tur börjar den spelare vars tur det är med att kasta fem tärningar. Spelaren har sedan möjlighet att kasta om tärningarna upp till två gånger till, och vid varje omkast kan spelaren välja att spara, d.v.s. låta bli att kasta om, vilka som helst av de tärningar spelaren redan har kastat. När spelaren är nöjd eller inte får kasta fler gången är turen över och spelaren måste fylla i en av kategorierna på det s.k. poängblocket med så många poäng den fått denna tur. För varje kategori räknas poängen ut olika; exempelvis ger treor tre poäng per tärning som visar tre ögon, medan exempelvis liten straight ger 15 poäng om tärningskonfigurationen består av en etta, två, tre, fyra samt en femma. Om spelaren inte kan eller vill fylla i någon poänggivande kategori måste spelaren istället fylla i valfri kategori med 0 poäng. När varje spelare har fyllt i alla kategorier på poängblocket är spelet över, och den med flest sammanlagda poäng vinner. Den högsta slutpoängen som går att få från en Yatzyomgång är 374. En intressant uppgift kan vara att avgöra hur man programmatiskt kan implementera en strategi för att maximera ens chanser att få så hög poäng som möjligt under en Yatzyomgång. En sådan strategi skulle sedan kunna användas för att exempelvis implementera en AI-motståndare i ett datorbaserat Yatzyspel. Denna rapport diskuterar en möjlig metod, som försöker optimera individuella turer. Reglerna för Yatzy, eller Yahtzee som det heter på engelska, varierar något från land till land. Jag kommer här främst att ha de klassiska svenska reglerna i åtanke. Se bilaga A för en utförligare beskrivning av de tillgängliga kategorierna på poängblocket. 1.2 Tidigare arbete Yatzy är sedan tidigare ett löst spel, d.v.s. en algoritm för att optimera det förväntade resultatet är känd. James Glenn [2] har beskrivit hur man kan bygga upp en graf där varje nod representerar ett möjligt tillstånd under en spelomgång, och den finns en kant från tillstånd v till tillstånd u om det med en handling (t.ex. ett kast med tärningar eller val av tärningar att behålla) går att röra sig från v till u. Varje nod sparar på väntevärdet för det förväntade resultatet om man spelar optimalt med utgång från tillståndet noden representerar, vilket gör det möjligt att med en bredden först-sökning finna den optimala vägen genom grafen. Denna metod har överförts till Yatzy med svenska regler av Marcus Larsson och Andreas Sjöberg [3], med en genomsnittlig slutpoäng av 248,63 vid användning av en optimal strategi. Nils Dahlbom Norgren och Philip Svensson har även beskrivit en heuristik för att optimera en individuell tur [4], denna med genomsnittspoängen 211,04. 4

1.3 Syfte Spelet må vara löst, men metoden för att beräkna hela tillståndsgrafen är krävande, och grafen i sig mycket stor. I Larsson och Sjöbergs fall tog beräkningarna 50 minuter och grafen blev 1,5 GB stor [3], vilket är otympligt för användning i applikationer utvecklade för exempelvis mobila plattformar. För att begränsa beräkningarna som behöver göras kommer jag istället att implementera en variant av Glenns metod som bara ser till den nuvarande turen. Med andra ord kommer jag i början av varje tur att efter att tärningarna har kastats en första gång beräkna alla möjliga tillstånd fram till slutet av turen, för att sedan ta reda på vilka val av tärningar att kasta om ger högst sannolikhet till så hög poäng som möjligt. Syftet är att besvara följande fråga: Kan en variant av James Glenns metod, begränsad till att endast ta hänsyn till den nuvarande turen, vara tillräckligt snabb för att vara praktiskt tillämpbar på exempelvis mobila plattformar? Hur mäter den sig i sådana fall med andra metoder? Jag kommer ej att ta bonus (se bilaga A) i åtanke under utveckling av metoden, med anledning av metodens oförmåga att se längre fram än en enda tur. 2 Metod 2.1 Tärningskast 2.1.1 Möjliga tärningskast Antalet möjliga resultat vid kast med k tärningar med n sidor är detsamma som antalet sätt att välja ut k objekt ur en mängd av storlek n, oordnat och med repetition. Detta kan beräknas som ( ) n+k 1 k. För fem stycken tärningar med sex sidor blir detta ( ) 10 5 = 252 möjliga distinkta tärningskast. På samma sätt finns det 126, 56, 21 och 6 distinkta tärningskast vid kast med fyra, tre, två, respektive en tärning. Det finns dessutom exakt 1 möjligt resultat vid kast med noll tärningar; med andra ord finns det bara ett möjligt tillstånd man kan ta sig till om man väljer att behålla alla tärningar efter ett kast. Att sedan generera de möjliga tärningskasten kan enkelt göras iterativt. Alla möjliga tärningskast med tre tärningar kan exempelvis genereras som följer, där kast är en mängd av multimängder: function Möjliga-Tärningskast kast {} for i 1 1 to 3 do for i 2 i 1 to 3 do for i 3 i 2 to 3 do kast kast {i 1, i 2, i 3 } end for end for end for return kast end function 5

En mer generell funktion som kan räkna ut möjliga tärningskast när man slår ett givet k antal tärningar kan implementeras rekursivt. 2.1.2 Möjliga val av tärningar att spara Resultatet vid ett tärningskast kan ses som en multimängd av storlek 5. Antalet sätt att välja n tärningar att spara efter ett kast är då ekvivalent med antalet delmängder med kardinalitet n. Låt oss säga att M = {m 1, m 2,..., m k } beskriver antalet upprepningar av k distinkta element i en multimängd, d.v.s. något element e 1 upprepas m 1 gånger i multimängden, elementet e 2 m 2 gånger, o.s.v. Hur många delmängder av storlek n finns det då av multimängden? Om m 1 = 2 och n = 4 kan vi i varje delmängd förvänta oss att det finns 0 k 2 förekomster av e 1, så antalet delmängder är antalet delmängder med 0 förekomster av e 1, plus antalet delmängder med 1 förekomst av e 1, plus antalet delmängder med 2 förekomster av e 1. Detta är ekvivalent med antalet delmängder av storlek 4 med M = M \ {m 1 }, plus antalet delmängder av storlek 3 med M = M \ {m 1 }, plus antalet delmängder av storlek 2 med M = M \ {m 1 }. Generellt får vi följande rekursiva samband: 1 om n = 0 0 om M = S(M = {m 1, m 2,..., m k }, n) = min(n, m 1) S (M \ m 1, n c) annars Detta samband kan även användas för att generera de olika delmängderna. Antalet delmängder beror på hur många upprepade element det finns i multimängden; i tabell 1 är det totala antalet delmängder av storlek 0 n k av multimängder av storlek 5 sammanställda för de olika mönster som kan uppträda vid kast av 5 tärningar. c=0 2.1.3 Sannolikheter Precis som antalet delmängder varierar sannolikheten för att få ett visst resultat vid tärningskast beroende på det mönster som tärningarna uppvisar. Sannolikheten att alla tärningar ska visa 6 ögon är exempelvis 1 6 vid kast med fem 5 sexsidiga tärningar, medan sannolikheten att tärningarna ska visa 2, 3, 4, 5, respektive 6 antal ögon är 120 6. Då antalet sannolikhetsvärden är väldigt få är 5 det enklare och sannolikt effektivare att räkna ut dessa i förhand. De relevanta värdena är tabulerade i tabell 2. 2.2 Tillståndsgrafen 2.2.1 Struktur Varje nod i tillståndsgrafen representerar ett tillstånd. Ett tillstånd beskriver vad de tärningar som spelaren för närvarande innehar visar, hur många omkast 6

k = 5 abcde 32 abcdd 24 abbcc 18 abccc 16 aabbb 12 abbbb 10 aaaaa 6 Tabell 1: Antalet delmängder av multimängder av storlek 5 för olika mönster på resultatet av ett tärningskast. Det finns exempelvis 18 unika delmängder av storlek 0 n 5 av multimängden {1, 3, 3, 4, 4}. k = 5 k = 4 k = 3 k = 2 k = 1 120 24 6 2 1 abcde 6 abcd 5 6 abc 4 6 ab 3 6 a 2 6 abcdd 60 6 5 abcc 12 6 4 abb 3 6 3 aa 1 6 2 abbcc 30 6 5 aabb 6 6 4 aaa 1 6 3 abccc 20 6 5 abbb 4 6 4 aabbb 10 6 5 aaaa 1 6 4 abbbb 5 6 5 aaaaa 1 6 5 Tabell 2: Sannolikheten att få ett visst resultat beroende på mönstret tärningarna uppvisar, vid kast med 1 k 5 st sexsidiga tärningar. 7

Steg 1 Steg 2 Steg 3 Steg 4 Steg 5 {1, 2} {1, 2, 3, 3, 3} {1} {1, 1, 2, 2, 6} {1, 2, 4, 5, 6} {1, 2, 3, 4, 4} {2, 2, 2, 2, 2} {1, 2, 3, 4, 5} {2, 4, 5, 6, 6} {1, 2, 3, 4, 4} {1, 2, 3, 4, 4} {1, 2, 3, 4, 4} {1, 2, 3, 4, 4} Figur 1: Exempel på hur man kan röra sig mellan tillstånd. Transitioner utmärkta med streckade linjer är slumpberoende. Heldragna linjer representerar transitioner som spelaren fritt kan välja mellan. I steg 2 och 4 representerar värdena i noderna de tärningar man valt att behålla. spelaren har kvar, och huruvida spelarens nästa handling är att slå om tärningar eller välja tärningar att spara. Kanter mellan noder representerar antingen vilka tärningar som spelaren valt att behålla inför ett omkast eller sannolikheten för att få ett visst resultat vid omkast. Varje tillstånd tillhör ett av fem steg som varje tur består av. Det första steget innehåller det tillstånd som man befinner sig i efter att ha kastat de fem tärningarna i början av turen. Detta steg innehåller alltså endast ett tillstånd. Steg 2 är de tillstånd som man kan ta sig till genom att välja vilka tärningar man vill spara; steg 3 är de tillstånd man kan hamna i efter att ha kastat de tärningar man inte sparat. Tillstånden i steg 4 och 5 fungerar på samma sätt som de i steg 2 och 3. Då man kan kasta om tärningarna upp till två gånger efter det inledande kastet kommer det tillstånd man hamnar i i steg 5 att vara det slutgiltiga resultatet för turen. För att kunna bestämma vilket tillstånd i steg 2 och 4 som är mest fördelaktigt att välja behöver varje tillstånd spara på ett värde som är större för tillstånd som ger högre sannolikhet att resultera i fler poäng. I exempelvis steg 1 väljs då nästa tillstånd utifrån vilket tillstånd som har högst värde, vilket då också avgör vilka tärningar man väljer att spara. 2.2.2 Konstruktion Tillståndet i steg 1 kommer att variera mellan turer, och då steg 2 innehåller ett tillstånd per delmängd av den multimängd som motsvarar tärningskastet i steg 1, gäller detta även för steg 2. Då man när man går mellan steg 1 och steg 2 kan välja att inte spara någon tärning, kommer steg 3 dock att innehålla 252 tillstånd, ett per möjligt tärningskast. Tillstånden i steg 3 samt de efterföljande stegen 4 och 5 kommer därmed vara konstanta med avseende på antalet tillstånd som finns, vilka tillstånd som är nåbara samt sannolikheten att nå varje tillstånd, och det finns därför inget behov av att bygga upp den del av tillståndsgrafen som befinner sig i steg 3, 4 eller 5 mer än en gång. Dock måste värdet för varje tillstånd räknas om vid varje tur, då det beror på 8

vilka kategorier som finns tillgängliga. Detta görs lämpligen genom att göra en baklänges bredden-först-sökning från tillstånden i steg 5, där man först i steg 5 tilldelar varje tillstånd något lämpligt värde baserat på vad tärningarna visar och vilka kategorier som finns tillgängliga exempelvis kan man tilldela varje tillstånd den högsta poäng som går att få bland de tillgängliga kategorierna med det givna tärningskastet. I steg 4 och 2 tilldelar man sedan varje tillstånd summan av värdet för varje nåbart tillstånd i det efterföljande steget multiplicerat med sannolikheten för att nå det givna tillståndet. I steg 3 och 1 kan spelaren själv välja vilket tillstånd denne ska förflytta sig till genom att välja vilka tärningar som ska sparas, varför vi som värde för noderna i steg 3 och 1 helt enkelt väljer det högsta värdet av varje nåbart tillstånd. 2.2.3 Viktning Då det inte går att se längre fram än den nuvarande turen behövs någon strategi för att i sluttillstånden i steg 5 välja vilken kategori man bör fylla i givet ett visst tärningskast. Två strategier diskuteras här: högsta poäng och högsta poängandel. Högsta poäng går ut på att helt enkelt välja den kategori som resulterar i flest poäng. Detta kan dock resultera i situationer där man exempelvis väljer att fylla i femmor för fem poäng istället för ettor för fyra poäng om man har kastat {1, 1, 1, 1, 5}. Detta kan ses som ofördelaktigt, då man genom att fylla i femmor när man bara hade en femma endast utnyttjade 5 poäng, d.v.s. 20%, av den maximala möjliga poängen 25 för den kategorin, medan om man hade fyllt i ettor hade utnyttjat 4, d.v.s. 80%, av maximala 5 poäng. Av denna anledning kan det vara intressant att vikta de poäng som man kan få från en viss kategori. Högsta poängandel går då ut på att vikta poängen genom att dividera med den maximala möjliga poängen som går att få från kategorin. Om flera kategorier ger samma poängandel vid användning av denna viktning, ges preferens åt kategorier som ger mer poäng. 2.2.4 Strykning av kategori då ingen är poänggivande Om man har haft oturen att kasta en tärningskombination som inte går att använda sig av i någon av de lediga kategorierna måste man istället fylla i 0 poäng i en valfri ledig kategori. Det går att tänka sig ett antal olika strategier för att välja vilken kategori som ska strykas. Den som använts här är följande: stryk den kategori som ger lägst genomsnittspoäng vid optimalt spel. Med genomsnittspoängen för en viss kategori avses här den poäng som man genomsnittligt bör få efter en tur om kategorin i fråga är den enda lediga kategorin på poängblocket. Detta kan beräknas genom att utöka tillståndsgrafen beskriven ovan till att inkludera tillståndet innan man har slagit tärningarna för första gången under turen. Om man då i sluttillstånden alltid placerar tärningarna i samma kategori kommer efter beräkning enligt sektion 2.2.2 värdet för starttillståndet att vara genomsnittspoängen för den givna kategorin. I tabell 3 visas den beräknade genomsnittspoängen för varje kategori. Detta säger oss att vi i första hand bör stryka kategorier högre upp i tabellen. Om 9

Ettor 2,11 Yatzy 2,30 Liten straight 2,95 Stor straight 3,94 Tvåor 4,21 Fyrtal 4,57 Treor 6,32 Kåk 6,97 Fyror 8,43 Tretal 9,55 Femmor 10,53 1 par 10,63 2 par 11,91 Sexor 12,64 Chans 23,33 Tabell 3: Genomsnittligt antal poäng som varje kategori ger vid optimalt spel. exempelvis liten straight och tretal är de kvarvarande kategorierna på poängblocket och vi slagit en tärningskombination som inte kan användas i någon av kategorierna, bör vi med andra ord placera 0 poäng i liten straight. 3 Resultat 3.1 Implementationsdetaljer Jag har skapat en naiv implementation av den ovan beskrivna metoden i Python 3.4. Trots att implementationen är ooptimerad och Python i sig ett långsamt språk tar det under en halv sekund att bygga och uppdatera grafen inför varje tur på en 2,8 GHz-processor. 3.2 Simulering Metoden har testats med de båda viktningsmetoderna högsta poäng och högsta delpoäng som beskrivs i sektion 2.2.3 vid val av kategori. För att kontrollera att strategin faktiskt är en förbättring jämfört med en ren slumptaktik implementerade jag utöver detta även tre olika slumpbaserade metoder där vilka tärningar som behålls vid omkast är slumpade; de skiljer sig sinsemellan baserat på hur kategorin väljs i slutet av en tur. En av de slumpbaserade metoderna 10

Metod Val av kategori Slutpoäng Graf Högsta poäng 198,6 Graf Högsta poängandel 197,3 Slump Slump 49,5 Slump Högsta poäng 97,5 Slump Högsta poängandel 100,4 Tabell 4: Genomsnittlig slutpoäng efter 10 000 simuleringar av olika strategier. 150 Antal omgångar 100 50 0 100 150 200 250 300 350 Poäng Figur 2: Resultat från 10 000 simulerade Yatzyomgångar. Rött är högsta poäng ; blått är högsta poängandel. väljer kategori slumpmässigt, medan de andra två använder samma taktik som de grafbaserade metoderna. Tabell 4 redovisar den genomsnittliga slutpoängen efter 10 000 simuleringar av hela spelomgångar. Figur 2 redovisar resultaten från samtliga simuleringar. 4 Diskussion Metoden som beskrivs i den här rapporten har demonstrerats vara betydligt snabbare än den som ursprungligen beskrevs av Glenn [2], och därmed också tillämpbar i mer begränsade miljöer såsom mobila plattformar. Den får därmed anses ha uppnått de mål som beskrivs i sektion 1.3. Det är dock tydligt, men förväntat, att den genomsnittliga poängen är sämre än den förväntade genomsnittspoängen hos den av Larsson och Sjöberg [3] beskrivna metoden, med en försämring med ungefär 50 poäng. Den är också 12 poäng sämre än Dahlbom Norgren och Svenssons metod [4], men har fördelen att man enklare kan vikta beteendet vid val av kategori i turernas sluttillstånd. Den är dock avsevärt bättre än slumpbaserade metoder. Det är även tydligt att det inte finns någon märkbar fördel mellan de två viktningsmetoderna som beskrevs i sektion 2.2.3. En möjlig förklaring till detta kan 11

vara att en sådan situation där viktning faktiskt skulle ge en praktisk fördel är statistiskt osannolik. 4.1 Potentiella förbättringar Sannolikt finns det förbättringar som kan göras till viktningsstrategierna, både för att välja kategori utifrån ett tärningskast och för att välja vilken kategori som bör strykas om ingen kategori är poänggivande för ett visst kast. Det kan också vara intressant att undersöka ifall det finns situationer där det på lång sikt är bättre att fylla i någon kategori med 0 poäng även om det finns poänggivande kategorier för ett visst tärningskast. Metoden lider också av samma problem som James Glenns ursprungliga i och med att den inte tar hänsyn till motståndarens poäng, vilket gör att det kan uppstå situationer där man för att ha en chans att vinna måste ge sig efter riskabla, men mer poänggivande, kategorier såsom yatzy, men där denna metod istället väljer att sikta på lättare kategorier men som ger färre poäng. Det kan därför vara intressant att implementera en viktningsstrategi som prioriterar kategorier som är nödvändiga för att vinna. 12

Referenser [1] (2013). Original Yatzy Spelregler. Egmont Kärnan. [2] Glenn, J. (2006). An optimal strategy for yahtzee. Technical report, Loyola College in Maryland. [3] Larsson, M. och Sjöberg, A. (2012). Optimal yatzy strategy. Kandidatuppsats, Kungliga Tekniska högskolan, Stockholm. [4] Norgren, N. D. och Svensson, P. (2013). Optimal yahtzee. Kandidatuppsats, Kungliga Tekniska högskolan, Stockholm. 13

A Poängblocket Det finns 16 olika kategorier på spelblocket, som alla ger olika mycket poäng beroende på vad tärningarna visar när man är färdig med sin tur. De regler som beskrivs här är de som använts i implementationen av metoden som beskrivits i denna rapport. Reglerna bygger på de spelregler som medföljer Original Yatzy [1]. Med undantag för bonus och yatzy ger varje kategori så många poäng som det sammanlagda antalet ögon på de tärningar som kan räknas med i kategorin. Nedan beskrivs för varje kategori vilka tärningar som får räknas med. Ettor Alla tärningar som visar ett öga. Tvåor Alla tärningar som visar två ögon. Treor Alla tärningar som visar tre ögon. Fyror Alla tärningar som visar fyra ögon. Femmor Alla tärningar som visar fem ögon. Sexor Alla tärningar som visar sex ögon. Bonus Ger 50 poäng om den sammanlagda poängen från kategorierna ettor, tvåor, treor, fyror, femmor och sexor är eller överstiger 63 poäng. Ett par Två tärningar som visar samma antal ögon. Två par Två par av tärningar där varje par består av två tärningar som visar samma antal ögon. Paren måste sinsemellan visa olika antal ögon. Tretal Tre tärningar som visar samma antal ögon. Fyrtal Fyra tärningar som visar samma antal ögon. Liten straight Alla tärningar om tärningskastet är {1, 2, 3, 4, 5}. Stor straight Alla tärningar om tärningskastet är {2, 3, 4, 5, 6}. Kåk Alla tärningar om det finns två grupper av tre respektive två tärningar där alla tärningar inom varje grupp visar samma antal ögon. Tärningarna måste grupperna sinsemellan visa olika antal ögon. Chans Alla fem tärningar, villkorslöst. Yatzy Ger 50 poäng om alla fem tärningar visar samma antal ögon. Om det inte finns någon kategori som är poänggivande i slutet av turen måste någon kategori fyllas med 0 poäng. 14