1 AI och schack En överblick Jakob Danielsson - [email protected] Sam Vaezi - [email protected] Information - kunskap - vetenskap - etik 3/10/2014 2 SAMMANFATTNING Schack anses ofta vara ett spel som är sammankopplat med intelligens, att kunna förutse sin motståndares drag och effektivt kontra detta drag. Att kunna upptäcka och känna igen bordsmönster och effektivt spela runt dessa. Schackspelare och dataloger har länge varit intresserade av att skapa schackprogram som kan konkurrera med en människa eller till och med besegra en människa i schack. Att skapa en maskin som kan besegra en människa kan verka absurt eller omöjlighet. Men tack vare teknikens utveckling och att teorin bakom skapandet av schackdatorer har blivit bättre är det fullt möjligt att skapa en schackdator. Med hjälp av olika algoritmer och hårdvara som båda konstant utvecklas och förbättras blir datorerna ännu mer duktiga på spela schack. En schackdator lyckades till slut besegra den då regerande schackmästaren Garry Kasparov 1997. Detta kan anses imponerande men det är viktigt att poängtera att datorn inte förstår konceptet av schack, den förlitar sig på s.k. ”brute force” för att spela. Man säger att det finns två olika sorters schackprogram, typ a och typ B. Typ a förlitar sig på ”brute force” där de går igenom tusentals drag för att hitta de bästa dragen. De gör detta med hjälp av olika algoritmer, en relativt vanlig algoritm att använda är sökalgoritmen Minimax. Typ B programmen förlitar sig istället på evaluering och strategisk AI (artificiell intelligens) där de endast granskar kritiska drag. Den dominerande typen bland schackprogrammen idag är typ a då bättre hårdvara gör sökningarna ännu kraftigare och det är enklare att förbättra sökningen än att skapa en strategisk AI. 3 INNEHÅLLSFÖRTECKNING SAMMANFATTNING .............................................................................................................. 2 INLEDNING .............................................................................................................................. 4 Bakgrund ................................................................................................................................ 4 Syfte ....................................................................................................................................... 4 Metod ..................................................................................................................................... 4 Schackdatorernas historia ........................................................................................................... 5 Framtidens schackdatorer ....................................................................................................... 7 Typer av algoritmer i schackprogram ................................................................................... 7 Typ A strategier ...................................................................................................................... 7 Minimax och hur algoritmen fungerar ............................................................................... 7 Planering med hjälp av evalueringsfunktioner ................................................................... 8 Typ B strategier ...................................................................................................................... 8 Mikhail Botvinniks typ B algoritm .................................................................................... 9 SLUTSATSER .......................................................................................................................... 9 REFERENSER ....................................................................................................................... 10 4 INLEDNING Bakgrund När ett schackprogram skall skapas så är det många variabler man måste tänka på. Programmet skall kunna planera sina drag på ett sådant sätt att dragen inte enbart är bra drag för stunden utan även i framtiden. Med dettas menas att datorn kan göra ett utmärkt drag nu men två drag framåt så kommer den att förlora partiet på grund av detta drag. Man kan fråga sig ”varför räknar bara inte programmet ut alla möjliga steg och avgör sedan vilket som är bäst beroende på brädets läge” (läge i detta fall handlar om vilket läge partiet befinner sig i). Problemet som uppstår här är att de finns alldeles för många möjliga drag som en spelare kan spela. Det var inte möjligt 1950 att räkna ut alla dessa drag. Och det är fortfarande inte möjligt med dagens hårdvara och algoritmer att räkna ut alla drag [Shannon50]. Istället försöker man minska de möjliga dragen och istället välja de drag som anses vara bäst för stunden och ignorera de som är sämre. Man måste också kunna planera inför framtiden vilket ökar komplexiteten ännu mer. Syfte Syftet med rapporten är att förklara hur en schackspelande dator fungerar samt de olika sätten att skapa dessa. Samtidigt skall rapporten försöka ge en historisk överblick om schackdatorernas utveckling. Metod För att hitta information som är relevant för rapporten har bland annat Google och högskolebiblioteket använts. För att veta vad som skulle letas efter var det viktigt att hitta olika algoritmer som kunde undersökas, detta gjordes genom Google. Google har också använts på sättet att sökmeningen inleds med bla site:edu, och därmed fås information från akademiska sidor. Detta har huvudsakligen använts för att ta reda på hur själva AI:n i schackdatorn fungerar. Högskolebiblioteket har använts som ett komplement för att hitta mer information om hur AI:n i schackdatorer fungerar. Ett extra underlag till om hur de olika algoritmerna kan användas har hämtats från chessprogramming wikispaces som är en hemsida som förklara hur det går till vid programmerandet av en schackdator. För att leta upp historia om schackdatorns utveckling har wikipedia använts, mer specifikt har källorna som sidan refererat till använts. Men när det blivit mer vetenskaplig forskning har wikipedia undvikits. 5 Schackdatorernas historia Människor har länge varit intresserade utav att skapa en maskin som kan spela schack med människor och i bästa fall vinna över dessa. Intresset fanns redan på 1700-talet då Wolfgang von Kempelen skapade sin schackmaskin ”The Turk”. Denna maskin visade sig dock vara ett trick, det satt en människa inuti som spelade partiet. En till maskin byggdes 1868 av Charles Hooper och även den visade sig innehålla en människa. Leonardo Torres y Quevedo visade 1912 upp sin maskin vilket klarade att spela ett parti kung och torn mot kung slutspel. Därefter vid 1948 publicerar Norbert Wiener sin bok ”Cybernetics” där han beskriver hur ett schackprogram kan utvecklas genom att använda en nivå-limiterad minimax sökfunktion med en evalueringsfunktion. Det stora genombrottet kom dock 1950 när Claude Shannon, en datalog som jobbade för Bell Telephone Laboratories publicerar ”Programming a computer for playing chess” [Shannon50]. Publikationen innehöll en algoritm som ett program skulle kunna använda för att kunna spela schack intelligent. Positioner som var bra för datorn skulle evalueras med ett högre nummer, vilket innebar att datorn hade en större chans att vinna. Dåliga positioner skulle evalueras med ett lägre nummer. Parti då ett drag kunde leda till oavgjort evaluerades med en nolla. Allt detta var kritiskt för en teoretisk bords evalueringsfunktion f(P) som ser ut som följande: f: {bordsstorlek} -> R. P representerar schackbrädet i ett godtyckligt läge och det resulterande reella talet R representerade schackbrädets ”styrka”. Detta var en av de första publikationerna som hanterade problemet med datorschack. 1951 publicerade Alan Turing ett program på papper vilket var kapabelt till att spela ett helt parti schack. 1952 utvecklar Dietrich Prinz ett program som fokuserar på att lösa schackproblemet ”mate-in-two” [Bell72]. 1956 kommer ”Los Alamos Chess” vilket är det första programmet att spela ett schackliknande spel. Detta program kördes på MANIAC 1 datorn. Samma år uppfinner John McCarthy sökalgoritmen alpha-beta vilket utesluter variationer av drag som tidigare är kända att vara överflödiga och irrelevanta för datorns förmåga att evaluera brädets läge. Alex Bernstein utvecklade 1957 med hjälp av sina medarbetare på IBM det första schackprogrammet som var kapabelt till att spela ett helt parti schack emot en mänsklig motspelare. Detta var dock inte det viktigaste, IBM slungades in i en fyrtio år lång resa som skulle innebära skapandet av Deep Blue. Bernsteins program visade sig dock inte ha någon chans emot den internationella mästaren Edward Lasker, matchen slutade i vinst för Lasker [Hightechhistory11]. Både Prinzs och Bernsteins program led av att de behövde tänka relativt länge för att evaluera ett steg. Man började att utvärdera en evalueringsfunktions påverkan på schackprogrammet ännu mer efter att Richard Greenblatt och hans schackdator Greenblatt 6 blivit kända. Det som gjorde detta program unikt var att det inkorporerade ”kunskap om schack”. Richard lyckades koda in viktiga aspekter från spelet i sin dator. Detta förbättrade datorns kunskap angående de olika lägena som brädet kunde vara i, den kunde enklare utesluta eller välja ett läge. 1985 var då tre studenter skapade schackprogrammet Chiptest som senare skulle bli Deep Thought. 1988 lyckades Deep Thought ta en delad första plats med Tony Miles i U.S. Open Championship. Deep Thought lyckades även besegra Bent Larsen, vilket gjorde att datorn blev den första att besegra en stormästare i en turnering [CB1]. I mitten av 90-talet bestämde sig IBM för att bygga en dator som kunde konkurrera emot de bästa schackspelarna. Datorns motståndare blev Garry Kasparov. Han var rankad som en av de bästa schackspelarna då och anses av många vara den bästa schackspelaren någonsin. Feng-hsiung Hsu, Thomas Anantharaman och Murray Campbell, personerna som hade skapat Deep Thought anställdes av IBM för att utveckla den nya datorn. Den tionde Februari 1996 blev Deep Blue den första datorn att vinna över en då regerande världsmästare i ett schackparti, alltså inte en hel match [Hightechhistory11]. Dock så vann Kasparov tre av de fem matcherna innan och vann över Deep Blue. Deep Blue blev efter detta uppgraderad med bättre hårdvara och spelade emot Kasparov igen 1997 och den här gången vann Deep Blue och blev den första datorn att besegra en världsmästare under standardiserade tävlingsregler. Det har efter denna match spelats två matcher mellan dator och människa där båda matcherna har slutat oavgjort. Efter Deep Blues vinst över Kasparov fortsatte man att skapa schackdatorer och på grund av att hårdvaran blev bättre och bättre blev datorerna således ännu kraftigare. Datorn är därför en ännu mer respektabel motståndare nu än vad den var 1997. 7 Bild 1: ”The Turk” Framtidens schackdatorer När hårdvaran och sökalgoritmerna konstant blir bättre då blir även schackdatorerna duktigare på att spela schack. För eller senare kommer det vara oerhört svårt att vinna över en schackdator, även för de bästa schackspelarna [CF06]. Efter vinsten mot Kasparov fortsatte man utveckal schackprogram. Houdini är ett av dessa och anses vara ett av de starkaste schackprogrammen idag. Två andra shackprogram är Stockfish och Komodo, dessa tre program anses vara de bästa. [CCH14]. Typer av algoritmer i schackprogram Typ A strategier Som tidigare nämnt är strategin som används i schackprogram en utav två sorter, typ A eller typ B. Den dominerande av dessa typer idag är typ A, schackdatorn ”Deep Blue” som spelade emot Kasparov var av typ A [IBM1]. En vanlig typ A strategi är Minimax algoritmen vilket använder sig av s.k. ”brute force search” för att hitta de bästa dragen i ett schackparti. Med ”brute force” menas att man undersöker varje möjlig position för ett bestämt nummer av drag med hjälp av Minimax. Shannon ansåg att typ A strategier var mer opraktiska än typ B strategier på grund av det tog lång tid att gå igenom alla drag. För det första, en pjäs i godtycklig position kunde ungefär flyttas på trettio olika sätt och Shannon förväntade sig att sökningen genom de cirka 109 lägena som kunde uppstå om man kollade tre drag fram för båda sidorna skulle ta ungefär sexton minuter att räkna ut. Detta var i ett väldigt optimistiskt fall där schackdatorer kunde beräkna en miljon brädlägen per sekund [Shannon50]. Det skulle ta fyrtio år (1990) innan man kunde beräkna en miljon brädlägen per sekund. Minimax fungerar på fler spel än Schack då algoritmen riktar sig mot spel där antalet spelar är två [MM1], t.ex. Go eller tre i rad. Algoritmen kan idag inte beräkna de bästa dragen redan från början av partiet då ett schackparti oftast är ca 40 drag och antalet möjliga ställningar i ett parti är ungefär 10128, detta kan jämföras med antalet atomer i universum som är 1088 [Shannon50]. Minimax och hur algoritmen fungerar Algoritmen består av ett träd där alla nuvarande möjliga drag finns baserat på spelets läge, med detta menas vilket läge brädet befinner sig i just nu. Trädet innehåller även dragen som går att göra ett visst antal drag fram i spelet, baserat på brädets läge ännu en gång. Max i trädet är en av spelarna, den andra spelaren representeras utav min. Max är ute efter att maximera draget, min är ute efter att minimera draget. Alltså, max vill helst gå så mycket plus som möjligt medan min vill gå så mycket minus som möjligt. Vem av spelarna som är max eller min har ingen betydelse för algoritmen då algoritmen är anpassad för två spelare så representeras spelarna på varannan nivå. 8 Sökningen börjar vid rotnoden, dvs den första noden i sökträdet. Därefter fylls trädet med fler noder som representerar lägen i brädet efter ett drag, en ”killer heuristic” används för att effektivsera alpha-beta vilket i sin tur används för att utesluta dåliga drag och förbättra minimax. De dåliga dragen är de som ger för mycket plus eller minus beroende på vems tur det är. Ett sätt att optimera algoritmen är att hindra trädet från att bli alldeles för djupt då detta skulle öka tiden för algoritmen att räkna ut trädet. Ett till sätt är att använda en evalueringsfunktion, funktionen bedömmer brädets läge från någon spelares sida. Detta kan vara antal drag till att spelet kan ta slut. Ett annat exempel kan vara att evalueringsfunktionen försöker beräkna hur vårat nuvarande brädläge kan hjälpa oss att vinna partiet. Denna funktion måste ha något som kallas ”heuristics”. Heuristics är kunskap om spelet och det tillåter för skapandet av bättre evalueringsfunktioner. Bild 2: Fyra nivåer av ett Minimax-träd där alla möjliga drag inte visas. Planering med hjälp av evalueringsfunktioner Dessa funktioner har en evalueringsfunktion som räknar ut de bästa dragen för just det läge brädet befinner sig i. Den beräknar alltså vilket drag som har ”bäst” poäng av alla andra möjliga drag och väljer detta. Funktionen kastar bort de drag som baserat på spelets läge är alldeles för dåliga för att övervägas. Dock är inte denna planeringsfunktion perfekt och därför borde den undersöka ett visst specifik drag ännu mer [Shannon50]. Detta är på grund av att ett drag som just nu kan verka väldigt bra kan visa sig vara ännu bättre för motståndaren. För att ha en bra planeringsalgoritm behöver algoritmer vara smart, den måste veta när motståndaren har en plan som är farlig och kan såra det egna spelet[Pogonina10]. Typ B strategier Dessa strategier ansågs till en början vara mer praktiska när ett schackprogram skulle skapas då programmet skulle lära sig konceptet utav schack istället för att endast söka igenom alla möjliga drag, bra som dåliga [Shannon50]. Programmet skulle kunna dra slutsater angående 9 vilka mönster och positioner som skulle vara sämre än andra och på så sätt kunna planera flera drag framåt. Dock uppstod det problem med typ B strategin. Den är beroende av att kunna avgöra vilka drag som är tillräckligt bra för att vara värda att övervägas i varje godtyckligt läge. Detta var ett problem som visade sig vara mycket svårare att lösa än vad man tidigare hade trott och istället för försöka komma förbi dessa hinder valde man att helt enkelt förbättra typ A sökningarna med bättre hårdvara. En händelse som ytterligare ökade typ A strategins popularitet bland schackprogrammen var att Northwestern University, vilka var utvecklarna av programmen som hade vunnit de tre första datorschack mästerskapen (1970-72) valde att köra med ett typ A program istället för typ B 1973 [NU1]. Mikhail Botvinniks typ B algoritm Mikhail Botvinnik var en schackspelare som var världsmästare i schack i nästan femton år. Han var även en förespråkare för typ B strategier och utbildad inom elektroteknik. Dessutom var han väldigt duktig på att lära ut schack, han var tränare för Kasparov och Karpov [Botvinnik]. Dessa två personer skulle likt Botvinniks också bli världsmästare i schack. Med allt detta i sitt bagage var han en given kandidat för att utveckla ett typ B program. 1968 publicerade han ”An Algorithm For Chess” där han diskuterar hur man skulle kunna gå tillväga för att hitta svagheter i motståndarens position och hur man skulle planera in attacker emot denne. Botvinniks algoritm klarade att hantera svåra fall som schackdatorer där typ A strategier användes inte kunde lösa. Problemet med algoritmen låg dock i att den ”missade” uppenbara fall där vinsten ”låg i fickan”. Algoritmen gjorde alltså att schackprogrammet spelade väl när det kom till svåra situationer men det fallerade när det kom till enkla situationer. SLUTSATSER Schack och AI har onekligen en väldigt intressant historia och är ett väldigt komplicerat ämne. Utvecklingen har skett under en lång tid och det går snabbt fram, men ännu har ingen perfekt schackalgoritm upptäckts. Det vi har kommit fram till är att schackdatorer är oerhört komplicerade och svåra att programmera. Något som är viktigt att poängtera är att det är svårt att förutspå schackdatorernas utveckling. I början trodde man att typ B strategier skulle vara de dominerande strategierna, men när väl hårdvaran utvecklades var det faktiskt typ A som blev dominerande. Utan att spekulera för mycket kan man anta att bruteforce är mer hårdvaruberoende än lärande program. I schackprogrammens fall har hårdvaran ökat i snabbare takt än vad kvaliteten på de lärande algoritmerna vilket har lett till att brute force dominerar. Det är logiskt att tänka på det sättet att när väl lärande algoritmer har uppnått sin maxpunkt kommer de vara starkare än bruteforce algoritmer, men eftersom problemet med de enkla dragen kvarstår idag så är lärande algoritmer fortfarande inte bättre än bruteforce. Utvecklingen av typ A algoritmer ser väldigt ljus ut då hårdvaran hela tiden utvecklas och blir starkare. I framtiden kommer vi människor inte ha någon chans mot schackdatorer just på grund av att datorns ”hjärna” är mycket snabbare och kraftfullare än människans när det 10 handlar om att gå igenom stora mängder data. Det enda datorn saknar med typ A algoritmer är kreativitet som vi människor har. När det går att kombinera typ A och typ B algoritmer kommer schackdatorn att vara helt oslagbar, då den både evaluerar olika drag och samtidigt lär sig utav det. REFERENSER Referenser skrivs i bokstavsordning och på ett standardiserat sätt: [Botvinnik] Chessgames Services “Mikhail Botvinnik Biography” http://persona.rin.ru/eng/view/f/0/18059/mikhail-botvinnik [Shannon50] Claude, Shannon. (1950) “Programming a Computer for Playing Chess” http://vision.unipv.it/IA1/ProgrammingaComputerforPlayingChess.pdf [Bell72] Alexander Graham, Bell. (1972) “Games Playing with Computers” http://www.chilton-computing.org.uk/acl/literature/books/gamesplaying/contents.htm [Hightechhistory11] Hightechhistory (2011/04/21) ”A history of computer chess – from the “Mechanical Turk” to “Deep Blue.”. http://hightechhistory.com/ April 2011 http://hightechhistory.com/2011/04/21/a-history-of-computer-chess-%E2%80%93-from-themechanical-turk-to-%E2%80%9Cdeep-blue%E2%80%9D/ [IBM1] IBM “Frequently asked questions: Deep blue” https://www.research.ibm.com/deepblue/meet/html/d.3.3a.shtml [MM1] Osborne, Martin J., and Ariel Rubinstein. A Course in Game Theory. Cambridge, MA: MIT, 1994. Print. [Pogonina10] Natalia Pogonina (2010) ”Planning in Chess” Chess.com Jun 22, 2010 http://www.chess.com/article/view/planning-in-chessNatalia [NU1] Jennings, Peter (January 1978). "The Second World Computer Chess Championships". BYTE. p. 108. Retrieved 17 October 2013. [CB1] Chess News (3/3/2010) http://en.chessbase.com/post/che-legend-bent-larsen-turns-75 [CF06] Dvorsky, George (6/12/2006) ”The future of chess” Sentientdevelopments.com December 6, 2006. http://www.sentientdevelopments.com/2006/12/future-of-chess_06.html [CCH14]CCRL team (03/15/2014) ”CCRL 40/40 Rating List — All engines” http://www.computerchess.org.uk/ http://www.computerchess.org.uk/ccrl/4040/