Schack och artificiell intelligens Karl Magnusson Spelutveckling kmn06001@student.mdh.se 1
Sammanfattning Rapporten hanterar schack och den artificiella intelligensen som styr schackdatorerna. För att ett program skall kunna hantera ett schackparti måste den kunna beskriva ett schackbräde, vilka pjäser som finns på brädet och även specifik information om schackdrag. Den måste kunna söka bland de möjliga schackdragen och sortera dessa på ett strukturerat sätt. För att kunna välja vilket schackdrag som bör spelas måste datorn kunna evaluera olika typer av schackställningar så att den kan välja det drag som är lämpligast i ställningen. Med utgångspunkt ur kunskapen om hur en schackdator fungerar finns det möjligheter för mänskliga motståndare att anpassa sin speltyp för att kunna besegra en schackdator och för att kunna av effektivisera datorns överlägsna beräkningsförmåga. 2
Innehållsförteckning Schack och artificiell intelligens... 1 Sammanfattning... 2 Innehållsförteckning... 3 Inledning... 3 Historik över schackdatorer... 3 Grundpricniper i en schackdator... 4 Representation av schackbrädet... 4 Sökrutiner... 5 Ställningsevalluering... 5 Hur besegrar man en dator?... 7 Slutsatser... 8 Referenser... 8 Inledning Schack är ett spel som i århundrade har fascinerat människan. För att bemästra schack måste du vara analytisk så du kan bedöma en ställning utefter de förutsättningar du ser på brädet, du måst även vara kombinatorisk och kunna räkna bland alla de drag som finns att välja mellan. Enda sedan schackspelandet spred sig har bemästring av spelet varit ett tecken på intelligens. Så när datorernas utveckling stegrade så föll det sig naturligt att även datorerna skulle börja spela schack. När sedan datorerna blev kraftfullare och kunde hantera schackspelet bättre ställde sig alla frågan, är schackdatorer bättre än människan och i så fall är en dator smartare än en människa? Den här rapporten är till för att ge en överblick av schackdatorerna och den artificiella intelligensen som gör de så kraftfulla, men även ge förslag på hur vi människor bör lägga upp vårt spel för att kunna besegra en dator. Historik över schackdatorer Den första som utgjorde sig för att ha skapat en schackdator var Wolfgang von Kempelen som redan på 1770-talet hävdade att han hade skapat en maskin som kunde spela schack. Maskinen kallades för the Turk och ligger bakom några av schackvärdens mest berömda partier, bland annat mot Napoleon Bonaparte[ChessG]. Men det hela var givetvis en bluff då det inuti the Turk satt en operatör som spelade mot motståndaren. Det var betydligt senare som de första verkliga schackdatorerna uppfanns. Men 1949, innan det fanns någon riktig implementering av ett schackspelande program på en dator, skrev Claude E Shannon[CESh50] en uppsats där han teoretiserade för de grundprinciper som en schackdator skulle vara tvungen att ha. Han beskrev hur en schackpositions kan beskrivas för en dator men ännu viktigare hur en schackställning kan värderas utav en dator, så att datorn kan välja den bästa av möjliga varianter. 3
Nästan tio år senare, 1958 lanserades en grupp ryska programmerare det första schackprogrammet som var helt kapabel att spela ett schackparti. Spelstyrkan på dessa första schackdatorer var väldigt låg i fårhållande till mänskliga toppspelare. Med utvecklingen av datorer och dess förmåga att räkna snabbare utvecklades även schackdatorerna och 1997 lyckades Deep Blue [DeepB95], som var en superdator speciellt skapad för att behandla schackspelet, besegra dåvarande världsmästaren Garry Kasparov i en mycket uppmärksammad match. Nu mera finns det en mängd schackprogram, som till skillnad från Deep Blue kan köras av en vanlig PC, vilka håller en spelstyrka som kan besegra världseliten av mänskliga schackspelare. Grundprinciper i en schackdator För att ett program skall kunna hantera ett schackparti måste den innehålla några grundstenar, det är finputsningen på dessa grundstenar som utgör hur effektiv en schackdator är. Det alla schackprogram måste kunna hantera är: Representation av schackbrädet Sök rutiner Ställnings evaluering De flesta av dagens schackprogram innehåller även opening books, vilket är en databas där de första dragen i ett schackparti, den så kallade öppningsteorin, har samlats. Om en dator har tillgång till en sådan databas med öppningar som spelats och dokumenterats av mänskliga spelare har det visat sig att spelstyrkan ökar stark. En del schackprogram har även möjlighet att använda sig av endgame table[endgt], vilket är en databas som analyserat olika schackställningar i alla möjliga varianter till slutet. Initiativet till endgame table kom 1970 då Richard Bellman föreslog att lösningen till alla schackställningar kunde hittas om man började analysera och dokumentera ställningarna utifrån en retrograd analys, dvs. att utgå från en känd ställning, t.ex. schackmatt i en ställning med bara två kungar och en dam på brädet, och arbeta sig bakåt utifrån den ställningen. Vid tidpunkten för denna rapport klarar endgame table alla ställningar med sex eller mindre pjäser, inklusive kungarna. Representation av schackbrädet Ett schackbräde utgörs av ett rutnät av 8x8 rutor. En datasamling med 64 poster är lämplig för att representera brädet. Varje post i datasamlingen representerar en av rutorna på schackbrädet. Den informationen posten bör innehåller är då: Om rutan är ledig Om rutan uppehålls av en pjäs Om rutan är en möjlig an-pasante ruta Utöver ovanstående måste även representationen av brädet ha så kallade flaggor (en datatyp som bara innehåller två värden) som anger vem av spelarnas tur det är och om det finns möjlighet att utföra en rockard. 4
Sökrutiner De möjliga dragföljderna som kan uppkomma ur en schackställning representeras för en dator lämpligast med en trädstruktur. Ur utgångssällningen på ett schackbräde har vit 20 olika drag att välja mellan, svart i sin tur har sedan 20 drag att välja på, redan finns det 20*20 alltså 400 olika varianter. Alla dessa olika kombinationer av drag bildar väldigt stora trädstrukturer [MaBr] som illustreras av figur 1 Det finns ett större antal schackställningar än vad det finns atomer i universum, en dator kan inte beräkna alla dessa varianter men under rimliga tidsramar för ett schackparti kan en dator räkna miljontals. Beroende på datorns beräkningskapacitet kan en dator räkna alla möjliga varianter 10 eller 15 drag fram. För att datorn skall kunna välja bland de möjliga dragen i en schackställning måste den evaluera löven (nedersta nivån i trädet) i variantträdet. Dessa evalueringsmetoder, som i princip är ett sätt för programmeraren att förklara för en dator vad som gör en ställning bra eller dåligt, är lika viktiga för datorns spelstyrka som beräkningsförmågan hos datorn. Figur 1. Trädstruktur över möjliga schackdrag Med väl bearbetade evalueringsfunktioner kan datorn inte bara göra effektiva val, utan även effektivisera sökningen då varianter som är dåliga ur datorns synpunkt kan tas bort ur sökningen. Ställningsevaluering När en schackställning skall evalueras så finns det vissa självklara ställningar som anses som högt värderade. Har motståndaren blivit schack och matt så är det en direkt dödande variant. Efter sådana direkt vinnande varianter så kan ställningar med materialistiska (vilka pjäser som finns kvar i spel) fördelar värderas som väldigt bra för datorn. För att datorn skall kunna räkna igenom materialet i en schackställning tillskrivs alla pjäser en poängsumma. Denna poängsumma illustreras av figur 2 och är samma pjäsvärdering som lärs ut till alla schackspelare världen över. 5
Figur 2. Schackpjäsers värde Efter dessa värderingssynpunkter finns det många olika sätt att värdera en ställning, dessa värderingsmetoder varierar väldigt mycket mellan schackprogrammet precis som det varierar mellan mänskliga schackspelare. Gemensamt för dessa är att de inte finns något tydligt sätt att bevisa att dessa värderingssynpunkter verkligen beskriver ställningsfördelar utan det är genom erfarenheten från tidigare schackpartier som dessa har visat sig starka. Det som är ännu svårare för en dator likväl som en människa är att väga dessa mot varandra. Crafty ([Craft])är ett open source schackprogram skapat av Dr. Robert Hyatt. Programmet har länge vart bland de starkaste schackprogrammen och har placerat sig högt på ett stort antal tävlingar för schackdatorer. De evalueringsmetoder som beskrivs nedan är en generalisering av de som används av Crafty. Crafty behandlar, utöver de metoder som redan beskrivits, tre olika ställningstyper i sin evaluering. Värderingen mellan dessa varierar på vilket skeende som partiet befinner sig i, om det är öppningsspel, slutspel etc. Bondestrukturer: Bondestrukturer behandlar böndernas positionering på brädet. Då en bonde närmar sig motståndarens sida (Figur 3) ökar möjligheten till att promovera (förvandla bonden) till en pjäs av ett högre poängvärde. En bonde som är passerade (Figur 3)har ingen av motståndarens bönder framför sig och den har därmed fri lejd till motståndarens sida och promovering. Figur 3. Vits bonde är 2 steg från promovering och har ingen bonde framför sig Pjäsernas placering: Placeringen av pjäserna har stor betydelse för hur effektivt de kan användas på brädet. En springare placerad i mitten (Figur 4) av brädet har större rörelsefrihet än en springare placerad i ett hörn. En pjäs som kan röra sig till rutor i det absoluta området av motståndarens kung har större möjlighet att användas i en mattsättning. Figur 4. Vits springare har 8 möjliga drag medan svarts har 2 6
Kungens placering: En kung som har många bönder kring sig är bättre försvarad än en kung som står ensam på brädet. Kungens säkerhet har stor betydelse i ställningar med många pjäser kvar på brädet. Men när det är bara bönder och kungar kvar på brädet (bondeslutspel) så är det en fördel om kungen är aktiv och kan användas för att attackera motståndarens bönder. Det finns givetvis många fler sätt att bedöma ställningen men en schackdator måste hela tiden göra valet av vad den skall lägga ner sin tid och beräkningsstyrka på. Att evaluera ett träd med tusentals löv är väldigt tidskrävande och en snabbare evalueringsmetod kan göra att trädet får ett större djup (fler antal nivåer innan löven). Hur besegrar man en dator? En människa har inte i närheten samma möjlighet att beräkna varianter som en dator. Då en dator kan räkna miljontals varianter kan en människa enbart räkna ett hundratal. Det som get människan en fördel är evalueringen av schackställningar. En människa kan på mycket kort tid leta efter ett mycket stort antal av bedömningsprinciper och väga dessa mot varandra genom sin erfarenhet och intuition, medan en dator måste basera all sin evaluering på bestämda algoritmer som inte har samma möjlighet att anpassa sig efter ställningen på brädet. Med hjälp av dessa bedömningsprinciper kan människan fokusera sina beräkningar på de varianter som med största sannolikhet kommer att spelas. Schackdatorn har många fördelar gentemot människan. En dator kan inte drabbas av stress, utmattning eller yttre faktorer. En dator kan inte heller göra fel i sina beräkningar, den missar inte några drag eller varianter då den räknar på alla möjliga varianter till ett visst djup. Med kunskapen om hur ett schackprogram fungerar och vilka dess styrkor respektive svagheter den har gentemot en människa, hur kan en schackspelare anpassa sitt spel för att besegra dator? I schackställningar där det finns specifika varianter som är intressanta kan människan fokusera sina beräkningar på ett fåtal varianter och i specifika fall få ett större djup i sina beräkningar än en dator som måste räkna på betydligt fler. I ställningar där det inte finns möjlighet för varianter i vilka materialet på brädet riskerar att förloras eller bytas av, kan en dator inte använda sig av de evalueringsmetoder som räknar på materialet utan i stället använda sig av evalueringsmetoder som bedömer pjäsernas positionering. Att bedöma sådana ställningar är en människa med stark spelstyrka betydligt bättre på och kan använda sig den intuition han/hon samlat på sig vilket dagens datorer inte kan hantera. Där det finns möjlighet för en mänsklig spelare att offra(ge bort schackpjäser) för att få fördelar som inte leder till återvunnet material, utan i stället kan ge positions fördelar. Ett exempel kan vara att den mänskliga spelaren offrar en bonde för att få en mycket stark passerad bonde i utbyte, den bonden kanske inte har möjlighet att promoveras för än långt senare i partiet men i ett senare skede av partiet kommer den kunna bli avgörande för partiets utgång. En dator bedömer ofta sådana ställningar felaktigt eftersom den allt för mycket litar till en materialistisk bedömning. Undvik byten av material. Då det finns mycket material kvar på brädet växer variantträdet mycket snabbare än då det finns mindre material. En dator får då ett mindre djup i sin sökning. Välj öppningar som det inte spelas ofta. Öppningsböcker ger datorn en stor fördel i början av partiet då den kan förlita sig till sin databas med varianter utan att behöva 7
göra beräkningar. I ovanliga varianter måste datorn börja beräkna mycket tidigare och det finns fortfarande mycket material på brädet vilket påverkar datorns sökdjup. Slutsatser När Kasparov förlorade mot Deep Blue var det många som hävdade att datorer nu är intelligentare än människan. Det är en orättvis beskrivning då schackdatorers styrka mycket ligger i dess beräkningskapacitet. Schack är ett symetriskt spel som alltid följer samma regler, det gör att schackspelet är mycket lämpligt för en dator att hantera och designen av en schackdator kan rikta sig mycket på beräkning och sökning i träd, vilket en dator är mycket lämplig för. Tidigare har schackspelet vart en drivkraft för att utveckla sökalgoritmer och trädstrukturer som lämpar sig för artificiell intelligens, alpha-beta pruning ([MaBr]) är ett exempel, men jag tror att påverkan och intresset för dessa kommer att sjunka nu när datorerna uppnått målet att överträffa människans spelstyrka. Schackdatorer har lämnat ett betydande avtryck i schackspelet. I princip alla professionella schackspelare använder datorns hjälp för att analysera och förbättra sitt spel. Det har även haft negativa effekter på schacket då de klassiska korrispondansschacket (partiet spelas genom att spelarna skickar brev med sina drag) har förlorat mycket av sin charm när spelarnas datorer och schackprogram påverkar deras spelstyrka. Sammanfattningsvis kan man säga att romansen mellan schack och artificiell intelligens har svalnat. Då datavetenskapen ständigt växer kommer det nya områden, så som spel och robotik, där den artificiella intelligensen har möjlighet att utvecklas. Man kan säga att vi har uppnått målet med schackdatorerna när vi lyckades besegra människan. Referenser [CESh50] C.E. Shannon. Programming a computer for playing chess. Philosophical Magazine, 41:256-275, 1950. [ChessG] Chess Games. Parti spelat mellan the Turk och Napoleon Bonaparte < http://www.chessgames.com/perl/chessgame?gid=1250610>, 1809. [Craft] Crafty Chess, Dr. Robert Hyatt s Home Page Winner of 1983 and 1986 World Computer Chess Championship < http://www.cis.uab.edu/info/faculty/hyatt/hyatt.html/> [DeepB95] Feng-hsiung Hsu, Murray S. Campbell, A. Joseph Hoane, Jr. Deep Blue System overiew, IBM T.J Watson Research Center, 1995 [EndgT] Endgame Table, Interface för endgame table analys, < http://www.shredderchess.com/online-chess/online-databases/endgame-database.html/>, [MaBr] Brain, Marshall. "How Chess Computers Work." 01 April 2000. HowStuffWorks.com. <http://electronics.howstuffworks.com/chess.htm> 04 March 2010. 8