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/