Tietokoneshakki. Risto Ranta-aho TKK, Tietoliikenneohjelmistojen ja multimedian laboratorio. Risto.Ranta-aho@hut.fi. Tiivistelmä



Samankaltaiset tiedostot
JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

Matinteko (1 / 10) Matinteko (2 / 10) Helpointa matin tekeminen on kahdella raskaalla upseerilla (esim. kuningattarella ja tornilla).

Tietokoneshakki. Kari Timonen

Pelaajat siirtävät nappuloitaan vastakkaisiin suuntiin pelilaudalla. Peli alkaa näin. Tuplauskuutio asetetaan yhtä kauas kummastakin pelaajasta.

Ohjeet ovat työn alla ja kirjaan niitä päivittäen ja edes takaisin lukien pari viikkoa.

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä?

Bayesin pelit. Kalle Siukola. MS-E2142 Optimointiopin seminaari: Peliteoria ja tekoäly

Algoritmit 2. Luento 10 To Timo Männikkö

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä?

Algoritmit 2. Luento 11 Ti Timo Männikkö

Minimax ja alfa-beta-karsinta

Blackjack on korttipeli, jossa pelaajan tavoitteena on voittaa pelinhoitaja.

SEKASTRATEGIAT PELITEORIASSA

Nollasummapelit ja bayesilaiset pelit


Shakkiopas vähemmän pelanneille

Tuntemattomassa ympäristössä etsiminen

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Koneoppiminen shakkitekoälyissä

Sisällysluettelo. 1. Johdanto

MS-C2105 Optimoinnin perusteet Malliratkaisut 5

Impedanssitomografia-peli

Kieli merkitys ja logiikka. 2: Helpot ja monimutkaiset. Luento 2. Monimutkaiset ongelmat. Monimutkaiset ongelmat

Timo Myyrä. Tietokoneshakki funktionaalisella ohjelmoinnilla

Kognitiivinen mallintaminen 1

Salasuhteita. esimerkiksi espanjaksi nimi tarkoittaa pientä pusua.

SÄÄNNÖT. Language: English / Suomi

Trafficars - Ruuhkaara

Opettajan opas. Shakkilinna

Hex-pelin matematiikkaa

Ongelma 1: Mistä joihinkin tehtäviin liittyvä epädeterminismi syntyy?

LUMATE-tiedekerhokerta, suunnitelma AIHE: PELIT JA TAKTIIKAT

Ongelma 1: Mistä joihinkin tehtäviin liittyvä epädeterminismi syntyy?

Johdatus go-peliin. 25. joulukuuta 2011

Tuloperiaate. Oletetaan, että eräs valintaprosessi voidaan jakaa peräkkäisiin vaiheisiin, joita on k kappaletta

Luku 8. Aluekyselyt. 8.1 Summataulukko

Onnistut yrittämässäsi, mutta jokin täysin epäolennainen. vikaan.

ORMS2020 Päätöksenteko epävarmuuden vallitessa Syksy päätöspuiden avulla tarkastellaan vasta seuraavissa harjoituksissa.

Algoritmit 2. Luento 6 Ke Timo Männikkö

Pelin sisältö: Pelilauta, tiimalasi, 6 pelinappulaa ja 400 korttia.

Yhteistyötä sisältämätön peliteoria

Tenniksen pistelaskusäännöt, lukio/ammatilliset oppilaitokset

Harjoitussuunnitelma viikko 18 Kärkipotku II

PANA RY LIIGASA A NNÖ T

KOKO PERHEEN HAUSKA STRATEGIAPELI OHJEET

Kombinatorinen optimointi

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Kiinalaisen shakin esittely

TEAMGOLF-KUTSU. Kilpailu järjestetään Veritas-Stadionin sisähallissa (Hippoksentie 6, Kupittaa, Turku) sunnuntaina

Algoritmit 2. Luento 6 To Timo Männikkö

Harjoitussuunnitelma viikko 17 Kärkipotku I

Antitammirobotti. Antti Meriläinen Martin Pärtel 29. toukokuuta 2009

Harjoitus 6 ( )

CHESS & GAMES KÄYTTÖOHJE

Pohdiskeleva ajattelu ja tasapainotarkennukset

Pelin tavoitteena on kerätä eniten eläin-pelimerkkejä ennen takaisin leiriin palaamista.

PELIOHJEET (suomeksi) Koira. Peli on kaksivaiheinen: Vaihe 1:

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

Algoritmit 2. Luento 13 Ti Timo Männikkö

- 4 aloituslaattaa pelaajien väreissä molemmille puolille on kuvattu vesialtaat, joista lähtee eri määrä akvedukteja.

Muumion kirous. Pelisuunnitteludokumentti. Veikkauksen pelisuunnittelukilpailua (Peliskaba2015) varten

Pinta-ala- ja tilavuuskäsitteiden oppimispeli

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

III- Divisioona playoff- ottelut Etelän loppusarjan ylempi jatkosarja ja Kymi-Saimaan loppusarja

Muinaiset kreikkalaiset uskoivat kaiken maanpäällisen koostuvan neljästä elementistä: maasta, ilmasta, vedestä ja tulesta.

Board Game Lab. 7 Pelimekaniikat ja -systeemit. Materiaalit CC-BY 4.0 Mikko Lampi

Harjoitussuunnitelma viikko 14 Potkaiseminen II

Peliteoria luento 1. May 25, Peliteoria luento 1

1 PÖYDÄT JA PALLOT 1. Kilpailuissa tulee käyttää Suomen Biljardiliiton hyväksymiä pöytiä ja palloja.

TURNAUSOHJEET. Turnauksen tavoite. Ennen aloitusta. Taistelukierroksen Pelaaminen.

Pelivaihtoehtoja. Enemmän vaihtelua peliin saa käyttämällä erikoislaattoja. Jännittävimmillään Alfapet on, kun miinusruudut ovat mukana pelissä!

11 Oligopoli ja monopolistinen kilpailu (Mankiw & Taylor, Ch 17)

Käytetään SEUL overwatch sääntöjen ingame asetuksia. Kotijoukkueen kapteeni on vastuussa lobbyn tekemisestä.

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

Tehtävä: FIL Tiedostopolut

Algoritmit 2. Luento 12 To Timo Männikkö

Näkyvissä kioskirakennuksen seinällä olevalla ilmoitustaululla.

CSC:N SHAKKIKOULU. esittää: Kuinka mestari ajattelee?

VILLIN ILMAPIIRIN JA NOPEIDEN REFLEKSIEN KORTTIPELI 2 8 PELAAJAA I DB001 KÄ ALK 01SCAN/A

Peli-idea puolustuspeli. Hyökkäysalueella puolustaminen (muoto)

Evoluutiopuu. Aluksi. Avainsanat: biomatematiikka, päättely, kombinatoriikka, verkot. Luokkataso: luokka, lukio

Kirjoita ohjelma jossa luetaan kokonaislukuja taulukkoon (saat itse päättää taulun koon, kunhan koko on vähintään 10)

CSC:N SHAKKIKOULU. esittää: Taktinen pelitapa ja kuningashyökkäykset

Harjoitussuunnitelma viikko 15 Sisäsyrjäpotku I

CSC:N SHAKKIKOULU. esittää:

Yleiset säännöt Shakissa on tavoitteena voittaa vastustaja vangitsemalla tämän kuningas.

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Peliteoria Strategiapelit ja Nashin tasapaino. Sebastian Siikavirta

1) Pelin ollessa käynnissä kummastakin joukkueesta saa olla samanaikaisesti kentällä enintään

ALHAMBRA. Muuri Seralji Puutarha Holvikäytävä Paviljonki Asuinrakennus Torni Rakennuksen nimi Hinta

Pyramidin yleiset säännöt

etunimi, sukunimi ja opiskelijanumero ja näillä

3. Ryhdy kirjoittamaan ja anna kaiken tulla paperille. Vääriä vastauksia ei ole.

Transkriptio:

Tietokoneshakki Risto Ranta-aho TKK, Tietoliikenneohjelmistojen ja multimedian laboratorio Risto.Ranta-aho@hut.fi Tiivistelmä Shakin ohjelmoimista tietokoneelle on tutkittu jo 50 vuotta. Vasta muutama vuosi sitten shakkitietokone voitti maailman parhaimman shakinpelaajan tavallisessa shakkipelissä. Shakki on liian monimutkainen peli, jotta sen voisi mallintaa täysin. Ihminen pelaa shakkia älyllään ja päättelemällä, mutta tietokone pelaa shakkia toistaiseksi vain laskemalla. Käytetyin ja tällä hetkellä tehokkain algoritmi tietokoneelle shakin pelaamiseen on alphabeta. Muitakin algoritmejä on olemassa, mutta toistaiseksi niistä ei ole ollut vastusta Alpha-betalle. 1 JOHDANTO Pelit kiinostavat ihmistä ajanvietteenä. Niihin voi jopa jäädä koukkuun. Tekoälytutkimuksessa pelit ovat myös yhtenä perinteisenä tutkimuksen kohteena. Tietokoneiden yhdistäminen shakkiin sai varsinaisen alkusykäyksensä 1900-luvun puolessa välissä, jolloin Claude Shannon kirjoitti paperin tietokoneen ohjelmoimisesta shakinpeluuseen. Shakki on Shannonin mukaan ideaalinen tutkittava tietokoneelle (Shannon, 1950), koska: Ongelma on hyvin määritelty: selkeät säännöt sallituista siirroista ja selkeä lopputila: matti. Shakki ei ole täysin triviaali ratkaistava, eikä toisaalta liian vaikeakaan tyydyttävän ratkaisun saamiseksi. Shakkia pidetään ajattelua vaativana taitolajina. Jos kone taipuu shakin pelaamiseen, tulee ajattelu-käsitettä miettiä uudelleen. Shakin diskreetti olemus sopii hyvin tietokoneeseen. Shannon ei halunnut rakentaa konetta, joka pelaisi täydellistä shakkia, muttei myöskään konetta, joka vain tekee laillisia siirtoja. Hän halusi koneen, jota vastaan voi pelata hyvän shakkipelin, kenties ihmispelaajaa vastaan pelattuun verrattavan (Shannon, 1950). 1

Tietokoneiden shakinpeluuohjelmat ovat kehittyneet aina vain edellisiä paremmiksi. Tutkimuksen alkuvaiheessa uskottiin shakkiohjelmien kehityksen ihmistä paremmaksi pelaajaksi olevan nopeaa, mutta vasta vuonna 1996 IBM:n shakkitietokone Deep Blue voitti shakin maailmanmestarin Garry Kasparovin normaalissa shakkipelissä. Deep Blue ei ole silti täydellinen shakinpelaaja (Campbell, 1997). Hyvistä shakkiohjelmista on hyötyä harjoitusvastustajina ja tavallisten pelien shakkitilanteiden analysoinnissa. Shakkia tutkitaan myös siksi, että tuloksia voidaan käyttää muiden samankaltaisten ongelmien ratkaisussa. 2 SHAKINPELAAJA Eräässä elokuvan Avaruusseikkailu 2001 kohtauksessa avaruusaluksen ylläpidosta huolehtiva tietokone Hal pelaa shakkia erään miehistön jäsenen Frank Poolen kanssa. Hal on oletettavasti hyvä shakinpelaaja, koska elokuvassa näytetyn erän hän voittaa, eikä se näytä Poolea erityisesti ihmetyttävän. Hal on täysin erilainen, kuin muut tämän ajan tietokoneet. Nykytietokoneissa ei ole omaa älyä, vaan ne vain suorittavat niihin ohjelmoituja ohjelmia. Hal saattoi sitä vastoin olla oikeasti älykäskin. Hal ei vain matkinut algoritmeillaan ihmistä, vaan jopa ymmärsi, kuinka ihminen ajattelee. Hal tunsi vastapelurinsa, ja osasi pelata peliä hänen kykynsä huomioon ottaen (Campbell, 1997). Taitavilla shakinpelaajilla täytyy olla kyky tehdä vaikeita laskelmia ja tunnistaa pelilaudalta pelinappuloiden muodostamia kuvioita. Heillä on mielikuvitusta, kykyä toimia intuitiivisesti, neroutta ja halua voittaa. Hal:ia lukuunottamatta tietokoneet pelaavat shakkia pelkästään laskemalla (Campbell, 1997). Älykkyyden ollessa tietokoneen puute, on koneilla myös joitain etuja ihmiseen verrattuna (Shannon, 1950): Tietokone pystyy erittäin nopeisiin ja kattaviin laskutoimituksiin. Tietokone ei tee inhimillisiä virheitä. Tietokone ei laiskistu ja siksi jätä tilanteen tutkimista kesken. Tietokone ei hermostu tai luule itsestään liikoja, eikä siksi tee huolimattomuusvirheitä. Tietokoneet kehittyvät jatkuvasti ja niiden nopeus ja muistikapasiteetti kasvaa. Kun resurssit lisääntyvät, tulee shakkiohjelmistakin entistä parempia. Koneen kapasiteetin kasvaminen sallii yhä pidemmälle menevän siirtojen analysoinnin (Campbell, 1997). Tehon lisääntyminen ei kuitenkaan samassa suhteessa paranna shakin hakupuun syvyyttä, koska shakin pelitilanteiden määrä kasvaa eksponentiaalisesti. Shakin peluuseen suunnitellulla laitteistolla voidaan myös nopeuttaa shakkiohjelmia. Suoraan raudalla ja useilla prosessoreilla toteutetuilla hardwarella päästään tavallista 2

tietokonetta nopeampiin nopeuksiin, mutta shakin rinnakkaisprosessointi ei kuitenkaan ole osoittautunut kovin yksinkertaiseksi (Campbell, 1997). 3 SHAKKIOHJELMIEN HISTORIA Huomionarvoisia ohjelmia ovat Alan Turingin vuonna 1951 kirjoittama ensimmäinen koko shakkipelin hallitseva ohjelma. Turingilla ei kuitenkaan ollut tietokonetta käytettävissään, joten ohjelmaa täytyi ajaa käsin. Ohjelma ei ollut kovinkaan taitava pelaaja, vaan hävisi jo heikolle koevastustajalle. Ensimmäisen koneella ajetun koko pelin pelaamiseen kykenevän ohjelman kirjoitti Alex Bernstein vuonna 1958. Greenblattin vuonna 1967 kehittämän MacHack 6 -ohjelman vuonna 1979 tehty uudempi versio oli ensimmäinen shakkiohjelma, jota ajettiin omalla laitteistolla. Condonin ja Thompsonin vuonna 1982 kehittämä Belle oli ensimmäinen shakkiohjelma, jolle omasta laitteistosta oli huomattavaa hyötyä. Uudemmissa shakkitietokoneissa, kuten Deep Thoughtissa vuonna 1990 sekä sen seuraajissa Deep Thought 2:ssa (Norvig ja Russel, 1995) ja Deep Bluessa (Campbell, 1997) käytetään omaa laitteistoa. 4 SHAKKI PELINÄ Shakki on peli, jossa on täydellinen informaatio, eli shakin koko pelitilanne on aina avoimesti tiedossa. Esimerkiksi korttipeleissä osa korteista on piilossa pelaajien käsissä ja pakassa, joten kenelläkään pelaajalla ei ole käytettävissään koko kuvaa pelin tilasta. Muun muassa noppapeleistä poiketen shakkipelissä ei ole minkäänlaista satunnaisuutta. Ennen peliä on satunnaista vain se, kumpi pelaaja saa valkoiset nappulat, eli kumpi pelaaja aloittaa pelin. Satunnaisuuden puuttuminen myös yksinkertaistaa peliä. Shakin tilanteen voi määritellä Shannonin (1950) mukaan viidellä tiedolla. Pelinappuloiden sijainti laudalla Kummalla puolella on siirtovuoro Ovatko kuninkaat ja tornit liikkuneet, jotta tiedetään, mitkä tornitukset ovat vielä mahdollisia Mikä oli edellinen siirto, jotta tiedetään mahdollisuus vastapuolen en passant -siirtoon Kuinka monta siirtoa on tehty edellisen sotilaan siirron jälkeen, jotta tunnistetaan 50 siirron tasapeli Shannonin esityksestä puuttuu tunnistus kolmen saman tilanteen peräkkäisestä esiintymisestä. Tämän saa tunnistettua esimerkiksi tallentamalla pelkän edellisen sijasta koko siirtohistorian. Siirtohistorian tallennus on toki järkevää myös pelien jälkianalysoinnin tai erilaisten variaatioiden tutkimisen kannalta. 3

4.1 Shakin hakuongelma Kahden pelaajan vuorotellen pelattavien pelien tilanteista voi muodostaa pelipuun siten, että otetaan lähtötilanne juurisolmuksi, ja laitetaan sille lapsiksi kaikki tilanteet, joihin päästään ensimmäisen pelaajan tehtyä jonkun sallittuista siirroistaan. Näille solmuille laitetaan lapsiksi toisen pelaajan tekemiä siirtoja seuraavat tilanteet. Tätä jatketaan, kunnes kaikissa haaroissa tullaan lopputiloihin. Shakissa keskimääräinen yhden tilanteen sallittujen siirtojen lukumäärä, eli pelipuun haarautumiskerroin, on 35. Tyypillinen pelin kesto on 50 siirtoparia eli 100 puolisiirtoa. Tällaisessa tapauksessa koko pelipuussa olisi 35 100 solmua. Mahdollisia erilaisia sallittuja nappuloiden asetelmia on kuitenkin vain 10 40, mutta yksittäisiin tilanteisiin voi pelipuussa päätyä eri reittejä (Norvig ja Russel, 1995). Koska hakupuu kasvaa eksponentiaalisesti, on tila- ja aikavaatimuksten takia mahdotonta generoida koko shakin pelipuuta etukäteen. Mahdotonta on myöskin laatia etukäteen taulukko kaikista mahdollisista tilanteista ja siitä, mikä on optimaalisin siirto missäkin tilanteessa (Shannon, 1950). Juuri pelipuun koko ja tilanteiden monimutkaisuus tekee shakin pelaamisesta hankalan, vaikka pelimaailman tila onkin kokoajan nähtävissä. Kaikkien mahdollisten siirtovaihtoehtojen läpikäyminen on mahdotonta, joten pelaajan tulee vanhasta kokemuksesta tehdä hyvä arvaus järkeväkstä siirrosta, ennenkuin hän täydellisesti tietää, mitä tilanteessa tulisi tehdä (Norvig ja Russel, 1995). Pelin hakuongelman erityispiirteenä on pelissä mukana oleva vastapuoli. Ei riitä, että vain omat siirrot tutkitaan läpi, koska vastapuoli voi omalla vuorollaan tehdä minkä tahansa siinä tilanteessa sallitun vastasiirron (Norvig ja Russel, 1995). 4.2 Shakkipelin kulku Shakkipeli voidaan jakaa kolmeen vaiheeseen: avaukseen, peliin ja loppupeliin. Nämä vaiheet eroavat luonteeltaan toisistaan, joten on järkevää tarkastella niitä erillisinä tapauksina (Shannon, 1950). 4.2.1 Avaus Shakkipelin alussa on pelaajan järkevää yrittää saada omat nappulansa sijoitettua pelilaudalle hyviin asemiin. Kun shakinpelaajat ovat käyneet pelien aloitusta läpi, on peliin kehittynyt tiettyjä vakiotapoja ensimmäisten siirtojen pelaamiseen. Tämä avauskirjasto on mahdollista ohjelmoida myös tietokoneelle ja käyttää sitä esimerkiksi niin, että sen siirtoja noudatetaan niin kauan, kuin vastapuoli niitä noudattaa (Shannon, 1950). Avauskirjaston avaukset ovat siirtoina yleensä hyviä, ja niitä käyttämällä pelin aikana käytössä olevaa laskenta-aikaa säästyy myöhempiin vaikeampiin tilanteisiin. Avauskirjaston käytöstä voi tietokoneelle tulla ongelma siinä vaiheessa, kun avauskirjaston sokeasti noudatetuista siirroista lopulta lähdetään pelaamaan varsinaista peliä. Tilanne johon ollaan kirjastolla päädytty voi olla tietokoneen pelialgoritmille 4

vieraan tuntuinen, jolloin koneelta kuluu muutama siirto nappuloiden asettamiseen itselle sopivaan tilanteeseen. Jos vastapelaaja tuntee tietokoneen noudattaman avauskirjaston, voi hän myös tarkoituksellisest rakentaa ansoja juuri sen kirjaston siirtoja vastaan (Walker, 1997). 4.2.2 Peli Avauksen jälkeinen osa on varsinaista taktikointia ja shakin pelaamista. Nimenomaan pelin tähän vaiheeseen tarvitaan tietokoneelle hyvää shakinpeluualgoritmiä. Tyypillisesti shakkipelissä pelaajat vaihtavat nappuloita keskenään, eli toinen pelaajista saa lyötyä toisen pelaajan nappulan, mutta samalla hän joutuu antamaan toiselle itseltään samanarvoisen nappulan. Mikäli kumpikaan pelaaja ei tee mattia, kestää peliosuutta niin kauan, kunnes suurin osa pelin nappuloista on lyöty pois laudalta. Tämän jälkeen siirrytään loppupeliin (Shannon, 1950). 4.2.3 Loppupeli Loppupelissä pelataan vähillä laudalla olevilla nappuloilla ja pyritään niillä matittamaan vastapelaaja tietyn juuri niille nappuloille sopivan toimintamallin mukaisesti. Tehokas loppupelin siirto on päästä korottamaan sotilas kuningattareksi (Shannon, 1950). Loppupeliä lähestyttäessä saattaa tietokone yrittää päästä eroon joistakin nappuloistaan päästäkseen tiettyyn lopuupeliasetelmaan. Kone voi esimerkiksi antaa lyödä kuningattarensa helposti. Vastapuoli voi tietenkin tällaisessa tilanteessa pyrkiä hylkimään tarjottuja nappuloita, jolloin peli ei etene (Walker, 1997). 5 SHAKINPELUUALGORITMIT Joissain peleissä on mahdollista laskea funktiolla suoraan senhetkisestä tilanteesta tieto päättyykö peli voittoon, tasapeliin vai häviöön (Shannon, 1950). Shakista ei tällaista funktiota tiedetä, vaan siirtojen järkevyys tulee saada tietoon muulla tavoin. Lähes kaikki shakinpeluuohjelmat perustuvat peliteoreetikkojen John von Neumannin ja Oskar Morgensternin kehittämän Minimax-algoritmin johdannaiseen, alpha-beta -karsintaan (Campbell, 1997). Alpha-beta on edelleen parhain pelialgoritmi erityisesti kahden pelaajan täydellisen information peleihin (Junghanns, 1998). 5.1 Minimax-algoritmi Pelin toiminnan voi määritellä neljällä komponentilla: Pelin lähtötilanne, eli asetelma pelilaudalla ja tieto kumpiko pelaajista aloittaa Joukko operaattoreita, eli säännöt siitä, kuinka pelinappuloita saa laudalla siirtää Lopetustesti, jolla tiedetään, onko tila pelin lopputila 5

Hyötyfunktio, joka antaa numeerisen arvon pelin lopputilasta. Esimerkiksi shakissa kolme arvoa: +1 (voitto), 0 (tasapeli) ja -1 (häviö). Muissa peleissä voi numeerinen arvo olla laajemmaltakin lukualueelta, esimerkiksi Backgammonissa summataan hävinneen pelaajan nappuloiden etäisyydet maalista ja tulkitaan summa voittajan kannalta positiiviseksi tai häviäjän kannalta negatiiviseksi (Norvig ja Russel, 1995). Minimax on algoritmi jolla saadaan kahden pelaajan, MIN ja MAX, pelistä MAX:in kannalta paras hyöty - olettaen, että MIN tekee kaikkensa sen minimoimiseksi (Norvig ja Russel, 1995). Minimaxissa on viisi vaihetta: Generoidaan koko pelipuu lopputiloihin saakka Lasketaan hyötyfunktiolla arvo jokaiselle lopputilalle Valitaan lopputilojen arvoista niiden vanhemmille arvo sen perusteella, minkä sen vuoron pelaaja vaihtoehdoista valitsisi. MAX:in siirtovuorolla valitaan vaihtoehdoista suurin arvo, ja MIN:in vuorolla pienin arvo. Tullaan kerros kerrokselta puussa ylöspäin valiten solmuille arvot lapsien arvoista edellisen kohdan menettelyllä - vuorotellen suurin, vuorotellen pienin arvo. Kun tullaan puun juureen, nähdään, mikä siirto MAX:in tulee valita, ja mikä on se hyöty, jonka MAX pelistä saa. Jos puun maksimisyvyys on m ja joka pisteessä on b sallittua siirtoa, on minimaxalgoritmin vaativuus O(b m ) (Norvig ja Russel, 1995). 5.2 Minimaxin soveltuvuus shakkiin Minimaxia käytettäessä tulee koko pelipuun olla tunnettu. Kuten kohdassa 2.1 todetaan, on tämä shakissa mahdotonta, joten minimaxia täytyy shakkia varten hiukan muuttaa. Koska lopputiloihin asti ei pelipuuta voida tutkia, täytyy lopetustestin sijaan katkaista haku aiemmin jollain katkaisutestillä. Lopputiloihin sovellettavan hyötyfunktion sijasta täytyy tutkituista tiloista muodostaa arvio soveltamalla niihin heuristista arvotusfunktiota (Norvig ja Russel, 1995). 5.2.1 Arvotusfunktio Arvotusfunktio arvioi kulloisenkin pelitilanteen hyvyyttä. Peliohjelman laatu riippuu paljon arvotusfunktion laadusta. Hyvä funktio antaa oikean kuvan pelitilanteesta, mutta jos funktio on epätarkka, voi se ohjata ohjelmaa kohti hyvältä näyttäviä mutta todellisuudessa katastrofiseen tulokseen vieviä tiloja (Norvig ja Russel, 1995). Mitä parempi arvotusfuktio on käytössä, sitä vahvempi pelaaja on (Shannon, 1950). 6

Hyvän arvotusfunktion täytyy lopputiloissa antaa samat tulokset kuin hyötyfunktion, funktion tulee olla nopeatoiminen ja funktion tulee tarkasti kuvata todellisia voitonmahdollisuuksia (Norvig ja Russel, 1995). Shakin tilannetta voidaan arvottaa huomioimalla esimerkiksi sellaisia asioita, kun pelaajien nappuloiden lukumäärät, sotilaiden muodostamat muodostelmat ja nappuloiden liikkumavapaudet (Shannon, 1950). Toista pelaajaa suurempi määrä voimakkaita pelinappuloita on varmasti etu ja avoimella kaistalla oleva torni on myös etu, mutta suojaamaton kuningas on pelaajalle heikkous. Pelinappuloille voidaan antaa materiaaliset arvot. Yleisesti shakissa käytössä olevat arvot ovat seuraavat: sotilas 1, hevonen ja lähetti 3, torni 5 ja kuningatar 9. Näistä tiedoista muodostettu materiaalietufunktio olettaa, että nappuloita voi arvioida yksi kerrallaan välittämättä muista laudalla olevista nappuloista. Tällaista funktiota kutsutaan painotetuksi lineaariseksi funktioksi: F(P) = w 1 f 1 + w 2 f 2 +... + w n f n. (1) Funktiossa (1) P on pelitilanne, w:t ovat painotuskertoimia eli materiaalietufunktiossa nappuloiden arvoja ja f:t piirteitä eli materiaalietufunktiossa nappuloiden lukumääriä (Norvig ja Russel, 1995). Suurin osa shakkiohjelmista käyttää lineaarista arvotusfunktiota, mutta käytössä olevat arvotusfunktiot ovat toki esimerkkiä monimutkaisempia. Funktiota edelleen kehitettäessä voisi esimerkiksi hyvä sotilasrakennelma tai kuninkaan turvallisuus voivat olla puolen pisteen arvoisia piirteitä. Kun arvotusfunktiota rakennetaan, täytyy ensin valita funktioon piirteet ja sen jälkeen säätää funktion painotukset kohdalleen. Painotusten säätö voidaan automatisoida laittamalla kone pelaamaa itseään vastaan, mutta piirteiden poimimisen automatisointia ei vielä osata (Norvig ja Russel, 1995). Jos ohjelma tekee aina samassa tilanteessa saman siirron, sanotaan sillä olevan puhdas strategia. Jos tällainen kone kuitenkin aina antaa täsmälleen saman vastauksen, niin jos kerran pelaaja keksii voittavan siirtosarjan, voi hän aina siitä eteenpäin voittaa samalla sarjalla (Shannon, 1950). Tämän tilanteen voi välttää satunnaisuudella, eli jos vaihtoehtoina on kaksi samantasoista siirtoa, voi niistä valita toteutettavan siirron satunnaisesti. 5.2.2 Haun katkaiseminen Helpoin tapa katkaista haku on määrätä sille maksimisyvyys. Tämä syvyys voidaan valita niin, että yhden siirron haun kesto ei ylitä sääntöjen sallimaa aikaa. Hakusyvyyttä voidaan myös iteroida, ja palauttaa ajan loppuessa pisimmälle päässen haun antama tulos. Koska arvotusfunktio on luonteeltaan arvio, voi haun katkaisemisella tiettyyn rajaan olla tuhoisia seurauksia. Heti tutkittujen siirtojen jälkeen voi tapahtua mitä tahansa (Norvig ja Russel, 1995). Horisonttiongelmaksi kutsuttu onglema tulee esiin niissä tilanteissa, joissa iso pelitilanteen muutos on väistämättä tulossa, mutta toinen pelaaja saa viivyteltyä sitä jonkin aikaa esimerkiksi shakkaamalla jatkuvasti vastustajaa. Jos iso muutos työntyy 7

näillä viivyttelysiirroilla pidemmälle, kuin kone pystyy siirtoja tutkimaan, eli horisontin yli, jää väistämätön vaara siinä tilanteessa vielä huomioimatta (Norvig ja Russel, 1995). Arvotusta järkevöittää, jos arvotetaan vain sellaisia tiloja, jotka ovat rauhallisia, eli toisin sanoen sellaisia tiloja, joiden jälkeen ei funktion arvossa ole odotettavissa suuria muutoksia. Esimerkiksi materiaalietua laskevaa funktiota ei voi käyttää tiloihin, joissa on tarjolla hyviä lyöntimahdollisuuksia (Norvig ja Russel, 1995). Rauhattomia tiloja voidaan tutkia eteenpäin, kunnes päästään rauhallisiin tiloihin, ja arvottaa vasta nämä tilat. Tätä kutsutaan rauhallisuushauksi (Norvig ja Russel, 1995). Ihminenkin toimii shakkia pelatessaan tällä tavalla (Shannon, 1950). 5.3 Alpha-beta -karsinta Tutkimalla kaikki mahdolliset hakupuun tilat päästään hakusyvyydessä alle keskiverron ihmispelaajan saavuttaman syvyyden. Tällainen ohjelma häviää helposti, joten hakua täytyy tehostaa. Alpha-beta -karsinnalla saadaan hakupuusta karsittua pois sellaisia haaroja, jotka eivät voi vaikuttaa haun lopputulokseen. Algoritmin valitsemat siirot ovat edelleen kuitenkin täsmälleen samat kuin minimax valitsisi. Alpha-beta -karsinnan avulla voidaan arvoltaan N olevan solmun alipuu poistaa hausta kokonaan, jos puusta on jo muualta löydetty paremman tuloksen antava solmu M. Näin siksi, että minimaxin luonteeseen kuuluu valita kaikista solmun lapsista aina paras mahdollinen arvo. Jo tutkittua arvoa M huonompaa solmua N ei siis ikinä tultaisi valitsemaan. Algoritmi pitää kirjaa MAX:in kannalta siihen mennessä saadusta parhaasta arvosta alpha-muuttujassa, ja MIN:in kannalta parhaasta arvosta betamuuttujassa. Näitä arvoja päivitetään, kun puuta tutkittaessa kohdataan edellisiä parempi arvo, ja huonompien arvojen tullessa kohdalle karsitaan alipuut pois (Norvig ja Russel, 1995). Alpha-betan parannus minimaxiin riippuu paljon järjestyksestä, jossa lapsisolmuja tutkitaan. Jos jatkuvasti kohdataan satunnaisessa järjestyksessä entistä parempia arvoja, ei alipuita saada karsittua. Tämän vuoksi on järkevintä tutkia ensin ne jälkeläiset, joista arvellaan saatavan parhaat tulokset. Pienilläkin järjestelyillä, kuten tutkimalla ensin lyönnit, sitten uhat, siirrot eteenpäin ja siirrot taaksepäin, saadaan jo huomattava parannus. Mikäli hyvän järjestyksen aikaansaaminen olisi mahdollista, olisi algoritmi vaativuudessaan vain O(b d/2 ) minimaxin O(b d ):n sijaan. Käytännön haarautumiskerroin olisi b:n sijasta sqrt(b) eli shakissa 35:n sijasta vain 6. Tällä helpotuksella algoritmi pystyy samassa ajassa katsomaan minimaxia tuplasti pidemmälle. Aloittelijatason ohjelma muuttuu näin taitavaksi pelaajaksi (Norvig ja Russel, 1995). 5.4 Alpha-betan parannuksia Alpha-betan ongelmana on se, että se ei vain kerro hyvää siirtoa, vaan myös laskee kaikkien sallittujen siirtojen arvot. Näin käy myös esimerkiksi silloin, kun tilanteessa on 8

valittavana vain yksi mahdollinen siirto. Tällöin suurin osa laskelmista on turhia. Tällaisessa tilanteessa voisi ohjelma tehdä valinnan nopeammin ja säästää rajallista peliaikaa vaikeampien tilanteiden tutkimiseen. Yhtenä ratkaisuna tähän ongelmaan on olla tutkimatta siirtoja eteenpäin, jos uusien tilojen hyöty on pienempi kuin niiden tutkimiseen kuluva aika. Tällaisissa tilanteissa algoritmin tulisi pysähtyä ja tehdä siirto (Norvig ja Russel, 1995). Idean voi toteuttaa myös toisinpäin, eli mielenkiintoisia polkuja voi tutkia pidemmälle kuin muita (Walker, 1997). Alpha-betaa voi parantaa myös käyttämällä hakujen iteroivaa syvenemistä. Siinä alempien tasojen arvioiden perusteella päätetään, mistä hakua jatketaan. Matalammat haut ovat nopeita tehdä, joten niillä saadaan edullisesti luotua hakujärjestystä, mikä puolestaan lisää algoritmin tehoa (Walker, 1997). Koska pelin tiloihin pääsee yleensä useampia reittejä pitkin, on hyödyllistä tallettaa tutkitut tilat transitiotaulukkoon. Kun haussa tullaan johonkin tilaan, katsotaan, löytyykö se taulukosta. Jos näin on, voidaan tilan arvo katsoa sieltä. Tällä menetelmällä saatu hakupuun yksinkertaistus on shakissa lopulta aika pieni, koska varsinkin kriittisissä tilanteissa keskenään samanlaisia tilanteita esiintyy vain vähän (Walker, 1997). Edellämainitut parannukset korjaavat joitain alpha-betan ongelmia, mutta algoritmi on silti itsessään eksponentiaalisesti kasvava (Junghanns, 1998). 5.5 Muita algoritmejä Kaikkien algoritmien tulee tehdä jonkinlaisia oletuksia ja arvioita. Näin ollen täsmällisen oikeaa tietoa ei millään algoritmillä voi shakista saada. Alpha-betasta eroavia vaihtoehtoisia ideoita on monia, mutta ne eivät vielä pärjää parannellulle alphabetalle (Junghanns, 1998). 5.5.1 Yhtä lukua laajempaa tietoa välittävät algoritmit Minimaxin ja alpha-betan toiminnan vaatimuksena on, että lasketut solmujen arvot ovat täysin oikeat. Koska näin ei ole, voi kenties virheellisestikin vähän toista vaihtoehtoa huonommaksi arvotettu vaihtoehto jäädä valitsematta, koska vain paras otetaan. Eräänä ratkaisuna tähän ongelmaan on tuottaa yksittäisten arvojen sijasta todennäköisyysjakaumia eri vaihtoehdoille (Norvig ja Russel, 1995). Yksi parhaiten tunnetuista vaihtoehtoisista algoritmeistä on B*-algoritmi, joka laskee raja-arvoja pelipuun solmujen mahdollisille arvoille, sen sijaan, että niille laskettaisiin yksittäinen luku (Norvig ja Russel, 1995). 9

5.5.2 Vastustajan mallintaminen ja ihmisen tavoin pelaaminen Vastustajan mallintaminen on nykyisin monien tutkijoiden mielenkiinnon kohteena. Ihminen ei pelatessaan aina tee vain parhaita mahdollisia ratkaisuja, joten parhaan mahdollisen vastasiirron löytämisen sijasta yritetään mallintaa ihmisvastustajaa. Minimax-algoritmilla toteutetut shakkiohjelmat yrittävät aina pelata parastaan. Joskus olisi hyötyä myös siirroista, jotka eivät ole parhaita, mutta jotka tekevät tilanteesta niin monimutkaisen, että vastustajalle järkevimmältä näyttävä siirto onkin häviävä siirto. Tähän nykytietokoneet eivät yleensä kykene (Campbell, 1997). Ihmisen tapa pelata ei ole raakaa tasaista tilojen laskemista. Ihmisellä on usein tilannetta pelatessaan mielessään tietty tavoite. Tavoitteena voi esimerkiksi olla vastustajan kuningattaren ansaan saaminen. Tällöin tutkitaan valikoiden, mitä siirtoja tehdään. Näitä kahdenlaisia algoritmejä ei vielä nykyään osata hyvin yhdistää (Norvig ja Russel, 1995). Tavallisen tietokoneen rajoitteena on ettei se opi virheistään. Tällaista pelaajaa saa parannettua vain päivättämällä ohjelmaa (Shannon, 1950). On ihan mahdollista ohjelmoida shakkitietokone opettelemaan esimerkiksi vastapelaajan pelityyliä tutkimalla hänen kanssaan pelattuja pelejä. 6 TIETOKONESHAKIN ONGELMAT JA TULEVAISUUS Olemassaolevat shakinpeluualgoritmit ovat edelleen vajavaisia. Tietokone ei osaa ajatella siirtojen keskinäistä ajoitusta, mikä on shakissa haitta. Nykykoneet eivät myöskään osaa rakentaa ansoja vastapelurille. Ansat ovat tilanteita, joissa järkevimmältä näyttävä ratkaisu onkin oikeasti huono (Campbell, 1997). Tornituksen tekeminen on koneen myös vaikea ymmärtää. Kone voi tunnistaa tiettyjä tornitusmalleja, mutta yleisen tapauksen tunnistaminen on vielä liian hankalaa. Kone voi olla muutenkin sokea. Esimerkiksi arvotuksen painottaminen nappuloiden lukumääriin voi johtaa tilanteeseen, jossa kone pelaa tyytyväisenä tilanteeseen, jossa sillä kyllä on paljon nappuloita laudalla, mutta niillä ei pääse liikkumaan, koska ne kaikki ovat sidottuina (Campbell, 1997). Deep Bluen voittaessa Kasparovin Deep Blue käytti siirtoa, jossa se uhrasi sotilaansa. Nykykoneet eivät yleensä mielellään uhraa mitään, mikä hämäsi Kasparovia (Campbell, 1997). Kun pelipuussa päästään yhdessä vuorossa syvemmälle ja syvemmälle, löydetään peliin tämänkaltaisia entistä vaativampiakin siirtoratkaisuja. Tietokoneista yritetään tehdä entistä inhimillisempiä, eli tietokonepelaaja voi tulevaisuudessa osata tehdä edellien kaltaisia siirtoja perustuen muuhunkin kuin pitkiin laskutoimituksiin. Olemassaolevia shakinpeluualgoritmejä ja niiden ideoita parannellaan edelleen, ja kokonaan uusia ajatuksia shakin pelaamiseen yritetään kehittää. Paljon ollaan kiinnostuneita vastapelaajan, eli ihmisen mallintamisesta. Optimaalisen vastapelaajan malli, jota useimmissa algoritmeissä käytetään, ei suoraan sovi ihmiseen. 10

7 JOHTOPÄÄTÖKSET Nykytietokoneet joutuvat edelleen käyttämään kaiken kapasiteettinsa siirtojen miettimiseen, mutta Hal kykeni shakkia pelatessaan pelaamaan voitokkaasti ja samalla hoitamaan koko avaruusaluksen kaikki muut toiminnot. Jos Hal:in teho kuitenkin olisi ääretön tämän hetken tietokoneisiin verrattuna, voisi se pelata voitokkaasti shakkia jollain brute force -menetelmällä. Ääretönkertaisilla tietokoneilla olisi shakki jo voitu saada täydellisesti mallinnettua, joten Hal:in pelaamiskyky voisi perustua tämän olemassaolevan tiedon käyttämiseen. Mikäli Hal on teholtaan nykytasoa, tai sitä vain järjellisen paljon parempi, täytyy sen pelialgoritmin olla erityisen kehittynyt. Hal oli muutenkin sulautettu järjestelmä, joten kenties siinäkin oli erityinen shakkihardware matkustajien viihdyttämistä varten. Hal pelasi shakkia inhimillisesti. Oikeat tietokoneet eivät sitä tee, eivätkä siihen vielä tällä hetkellä pysty. VIITTEET Shannon Claude E. 1950. Programming a computer for playing chess. Philosophical Magazine 41. s. 256-275. Campbell, Murray S.; Stork, David G. (edited) 1997. An Enjoyable Game: How Hal Plays Chess. Hal s Legacy: 2001 s computer as dream and reality. Cambridge, Massachusetts. The MIT Press. s. 76-98 Norvig Peter, Russel Stuart 1995. Artificial Intelligence: A Modern Approach. Englewood Cliffs (NJ). Prentice Hall. Junghanns, Andreas 1998. Are There Practical Alternatives To Alpha-Beta in Computer Chess. ICCA Journal, Volume 21 s. 14-32 Walker A. N. 1997. Further notes on computer chess. http://www.maths.nott.ac.uk/personal/anw/g13gt1/compch.html. Viitattu 20.4.2001 11