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

Relevanta dokument
Schackspelande datorer Hur fungerar de? Joakim Östlund Patrik Lindegrén 19 oktober 2004

Kort Sammanfattning av Schack MAS

Kravspecifikation. Sammanfattning. Fyra i rad Javaprojekt inom TDDC32. Version 2.0. Datum Dokumentnummer

AGA-regler. goforbundet.se/ Referens: AGA 1991

Utförliga regler för TRAX

Projektdokumentation för Othello

Fyra i rad Javaprojekt inom TDDC32

Nätverksprogrammering, EDA095

Lär datorn att spela luffarschack

Sagaforms spelregler SCHACK, FIA MED KNUFF, BACKGAMMON, DOMINO

AI för Hive. Kungliga Tekniska Högskolan. Examensarbete inom datalogi, grundnivå (DD143X) Författare: Urban Pettersson

UPPGIFT 1 V75 FIGUR 1.

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

Genom att följa dessa steg lär du dig snabbt att spela onlinematcher... och som du kan se är det mycket enkelt, roligt och spännande!

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll

Lösningar till KATT 2014

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

F5 Introduktion till digitalteknik

Genetisk programmering i Othello

Turneringsregler. Turneringens mal. Innan du borjar. Att spela en omgang.

getsmart Grå Regler för:

AI och schack. En överblick

UPPGIFT 1 KANINER. Håkan Strömberg 1 Pär Söderhjelm

HI1024 Programmering, grundkurs TEN

Spelregler för restaurangkasinospel

Rektangelpussel 1. Använd tre bitar vilka som helst och gör en 3 5-rektangel.

Symmetrireducering av slutspelsdatabas i Schack

Sannolikheten att vinna ett spel med upprepade myntkast

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI

Självlärande Hare and Hounds-spelare med Q-learning. HARALD HARTWIG och MAX WESTERMARK

16. VOLLEY Volley är tillåtet dock inte på serven.

Exempelprov. Matematik Del A, muntlig del. 1abc

getsmart Lila Regler för:

Memory Det kombinatoriska spelet

MULTIPLATTFORMAR STÄLLER KRAV PÅ DIN STRATEGI OCH LEDNING

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

AI TILL BRÄDSPEL En jämförelse mellan två olika sökalgoritmer vid implementation av AI till brädspelet Pentago.

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

Grundläggande tävlingsbestämmelser Innebandy RM 2013 i Malmö

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

Problem: FIL File Paths

Studium av Othellospelande program - Design, algoritmer och implementering. Andreas Ekbom

Regler för: - Räkna med sedlar og mynt!

REGLER CHICAGO, SM DISCIPLIN 2019 #maucertified #friskförklarat

Huvudräkningsspelet Plump

Optimeringslära Kaj Holmberg

Spelregler. Bingo. Senast ändrade:

Q-learning för fyra i rad. OLLE HASSEL och PETTER JANSE

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

Tänk på följande saker när du skriver tentan:

Pidro Online handbok

Trädsökning och datorschack

Världen. Sida 1 av 8. Detta är en del av SvD:s digitala urval för dig som är. prenumerant.

[][] Arrayer med två index

Kungar och Skatter. 2. Ta sedan de fyra essen och blanda dem och lägg sedan slumpvis ut ett ess uppvänt i varje hörn (se fig 2).

Känguru 2011 Cadet (Åk 8 och 9)

Matematiska uppgifter

Schackledarens blad Lektion 1

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

Tentamen TEN1 HI

Antag att följande träd genereras i ett spelförande program om vi applicerar evalueringsfunktionen

TNK047 [TEN1] OPTIMERING OCH SYSTEMANALYS

TDP005 Projekt: Objektorienterat system

Årtalet: Platsen: Amerikanska västern.

LUFFARSCHACKETS GRUNDER

Spelregler. BingoLive

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

Procedurella Grottor TNM084. Sammanfattning. Alexander Steen

Finansiell statistik FÖRELÄSNING 11

Programmering II (ID1019) :00-11:00

Nu lär vi oss tre i rad

Slutrapport för Pacman

Handbok Fyra i rad. Martin Heni Eugene Trounev Benjamin Meyer Johann Ollivier Lapeyre Anton Brondz Översättare: Stefan Asserhäll

54 kort: 10 plockarkort 10 trädgårdsmästarkort 10 extra arbetarkort 24 fruktträdskort

getsmart Gul Regler för:

Självlärande Othello-spelare

Spelregler för bräde. 1 Inledning

Tentamen Datastrukturer D DAT 035/INN960

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

Artificial Intelligence

Självlärande Hare and Hounds spelare med Q-learning

Finaltävling i Stockholm den 22 november 2008

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Regelsammandrag på Svenska Yu-Gi-Oh!

Självlärande Dots & Boxes-spelare

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 20

Ett häfte om förbundet och Othellots regler, taktik och strategi.

Handbok Kigo. Sascha Peilicke Översättare: Stefan Asserhäll

F5 Introduktion till digitalteknik

Schackspelande dator Hur fungerer det? Joakim Östlund Patrik Lindegrén 8 oktober 2004

Innehåll. Vad är go? Hur spelet spelas Att fånga stenar Förbjudna drag Att ta poäng Kända partier...

CHESS & GAMES INSTRUKTIONSMANUAL

KOMMA ÖVERENS. Ett spel om att hitta nya samarbeten

Operativsystem (IS1350) :00-12:00

Spel. 1 mot 1 på en spelplan som omfattar ca 2 m². Endast fingerslag (eller bagger) är tillåtet. Alternativt kan man tillåta tre beröringar "per lag".

Dominokort Korten har olika antal prickar på övre och nedre halvan. Korten har samma antal prickar på övre och nedre halvan

Programmering II (ID1019)

050504/AE. Regler för Pick n Click

Transkript:

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

Samanfattning MinMax är en algoritm som kan användas i turbaserade spel för att skapa en virituell motståndare. Algoritmen fungerar genom att testa samtliga möjliga spelutfall, och avgöra vilket som leder till det bästa slutresultatet. Detta är dock en väldigt krävande metod, som kräver optimeringar och restriktioner för att kunna användas på annat än de simplaste spelen. 2

Innehåll 1 Introduktion 4 2 MinMax Algoritmen 5 3 Alpha-Beta Pruning 6 4 Fall-Specika Optimeringar 7 5 Slutsats 8 A Fakulteter 9 3

1 Introduktion MinMax är en generell algoritm för AI i tur-baserade strategispel, som t.ex. Tre-I-Rad eller Schack. Algoritmen fungerar genom att (i teorin) beräkna alla möjliga drag som går att göra, och kan på det sättet avgöra vilket drag som kommer att leda till ett så bra slutresultat som möjligt. Oftast går det dock inte att simulera en hel spelomgång. I t.ex. tre-i-rad går detta, då beslutsträdet utan optimeringar endast kommer att bestå utav 9! (9 fakultet, se appendix A) noder. Detta kommer sig av att i början av spelet nns det 9 tomma rutor som alla är lagliga att spela på, vilket gör 9 möjliga drag. Efter första draget nns det 8 möjliga drag kvar att göra. För att beräkna alla möjliga drag vid den tidpunkten behöver man beakta totalt 9 8 olika drag, och man fortsätter på samma sätt tills spelet är över. I ett mer komplext spel som schack minskar inte antalet möjligheter efter varje drag, och då det både nns er spelrutor och mer komplexa spelregler kan man säga att det i snitt nns 35 möjliga drag att göra på varje nivå. För en schakmatch som pågår i 50 drag (25 från varje spelare) betyder detta 35 50, eller ca 1.5 10 77, beslutsnoder. Att generera fram alla dessa är orimligt, och därför behöver man kunna restriktera antalet noder, utan att för den skull behöva spela dumt. Därför har det utvecklats era olika sätt att optimera sökandet efter det optimala draget. Alpha-Beta pruning är en av de vanligaste, vilket tillsammans med diverse heuristiska optimeringar dramatiskt kan dra ner på tiden det tar att komma fram till ett resultat. Som en fotnot kan nämnas att även med alla dessa optimeringar tar ett beslutsträd för schack för lång tid att generera fram i sin helhet, vilket också är anledningen till att schackdatorer kan förlora. När man någon gång i framtiden har minneskapacitet och datorkraft nog att skapa ett komplett beslutsträd under en rimlig tidsrymd, kommer schackdatorer att bli oslagbara, på samma sätt som en korrekt implementerad tre-i-rad AI inte kan förlora. 4

2 MinMax Algoritmen Grunden i MinMax är ett beslutsträd som består av de möjliga drag som går att göra i spelet utifrån ett visst läge. Vid genereringen av beslutsträdet antar man att det nns två spelare, vilka kallas för Min och Max. Vilken av dessa spelare som börjar spelet saknar betydelse, dock är det viktigt att komma ihåg vem som började, då man genererar hela trädet utifrån Max synvinkel. Varje nivå i trädet representerar en av spelarna, och då man turas om med att göra sina drag kommer varannan nivå att representera Max drag, och varannan att representera Mins drag. På varje nivå testas samtliga drag som en spelare kan göra, och dragen poängsätts beroende på vilket slutresultat som kommer att uppnås. Hur denna poängsättning görs är implementationsspecikt. Poängen på varje möjligt drag används sedan för att avgöra vilket drag den spelare som representeras av den nuvarande nivån bör spela. På en nivå som representerar Max drag söker man att uppnå en så hög poäng som möjligt (dvs, Max vinner), medan man för Mins drag söker en så låg poäng som möjligt (dvs, Max förlorar). Tre-i-rad är ett av de enklaste spelen att implementera denna algoritm på, då beslutsträdet utan optimeringar endast kommer att bestå utav 9! noder. I ett mer komplext spel, såsom schack, kan beslutsträdet bli ohanterligt stort, och kräver hårda optimeringar och begränsningar. Figur 1: Exempel på hur MinMax algorithmen poängsätter Max drag I gur 2 ser vi hur en omgång mellan en datorspelare (spelar här som Max) och en mänskilg spelare (Min) skulle kunna se ut. I början har alla 9 dragen samma värde, då ett optimalt spel från bägge spelarna skulle leda till oavgjort oavsett vilken ruta spelet börjar i. I det här fallet valde Max att spela på mittenrutan. Min spelar därefter på en av kantrutorna. Nu ser spelplanen annorlunda ut från Max synvinkel. Min har gjort ett misstag, och genom att spela på en av hörnrutorna kan Max försäkra sig om en vinst (Min måste då blocka, varpå Max återigen spelar på ett hörn, och skapar på det sättet ett läge där det nns två rutor som ger vinst, och då Min endast kan blocka en av dessa förlorar denna). 5

3 Alpha-Beta Pruning Alpha-Beta Pruning är en metod som ofta används för att minska (optimera) antalet noder i ett MinMax beslutsträd. Metoden går ut på att när man väl hittat ett drag där resultatet för Max är bättre än resultatet för Min (eller omvänt om man benner sig på en Min nivå), så behöver man inte söka vidare efter er noder på den nivån man benner sig på, och kan därför avbryta sökandet, och returnera upp det bästa resultatet man hittade. Tanken bakom detta är att så länge Max spelar optimalt på noden vi hittade, nns det inget Min kan göra för att få ett bättre slutresultat, och därför spelar det ingen roll hur de andra noderna skulle se ut. I de esta turbaserade spel så är detta sant, och Alpha-Beta Pruning går oftast att implementera med goda resultat. Har man dock ett spel där man kan uppnå era olika nivåer av vinst, så kommer man nog vilja modiera Alpha-Beta pruningen lite, alternativt använda en annan metod för att optimera sitt beslutsträd. 6

4 Fall-Specika Optimeringar Fall-specika optimeringar (även kallade heuristiska optimeringar) görs specikt för ett visst spel eller ett visst regelset. Till exempel så kan man inte överföra denna typ av optimering från schack till tre-i-rad, då dessa spel har helt olika regler och slutmål. En av de första (och kanske mest självklara) optimeringarna som går att införa är att inte försätta att expandera beslutsträdet då ett spelslut är uppnått. Det bör påpekas att de esta heuristiska optimeringarna endast går att genomföra på en nivå som representerar en datorspelare, och som kan antas spela optimalt. En mänsklig spelares oberäknelighet gör att man måste undersöka alla giltiga drag för denna spelare. En tre-i-rad optimering som går att genomföra då datorn börjar är att bestämma sig för en startruta som altid kommer att spelas (till exempel mittenrutan). Denna enkla optimering kommer att minska beslutsträdets storlek med 8 8! noder. Om motståndaren spelar som andra spelare, och inte spelar sitt första drag på ett hörn, kan man spara in 3 7! + 3 5! noder genom att endast undersöka hörnen de följande två dragen. På samma sätt kan man spara in 4 8! noder då datorspelaren inte börjar, då spel på kantrutorna ofta leder till förlust. En annan metod är spegling, som utgår från tre-i-rad brädets symmetriska form och funktion. Då spel på t.ex. någon av hörnrutorna i början är detsamma oavsett vilket hörn man spelar på, behöver man endast beräkna resultatet på ett av dessa, och sedan spegla, eller rotera, trädet om det ska appliceras på något av de andra hörnen. 7

5 Slutsats Medans MinMax är en välformulerad algoritm, som når goda resultat då den tillåts generera ett stort nog beslutsträd, är den i nuläget för långsam för att kunna på allvar utmana en människa i annat än de lättaste spel. Med optimeringar och allt snabbare hårvara kan den dock utgöra ett hot även för hysat bra spelare, vilket schackdatorer som Deep Blue har visat, men i allmänhet är det en hysat bra algoritm för AI liknande betende hos en datormotståndare i ett turbaserat (bräd) spel. 8

A Fakulteter En fakultet skrivs som n!, och utläses n-fakultet alternativt fakulteten av n, och beräknas som produkten av alla heltal mellan 1 och n. T.ex. så gäller det att 5! = 1 2 3 4 5 Fakulteter växer otroligt snabbt, 6! är till exempel 720, medan 7! är uppe i 5040. Redan vid 10! är värdet uppe i era miljoner, och de esta vanliga kalkylatorer klarar inte av att beräkna mer än 69!, vilket är ca 1.7 10 98. Det är viktigt att komma ihåg hur fakulteterna beräknas och hur dom växer när man räknar med dom, annars kan man lätt tro att t.ex. 8 9! är större än 10, vilket är ganska långt från sanningen. 9