Tietokoneshakki

Tietokoneshakki tarkoittaa tietokoneohjelman pelaamaa shakkia. Shakissa on jokaisessa asemassa suhteellisen vähän siirtovaihtoehtoja, joten shakkilaudan analysoiminen sopii verraten helposti brute-force tyyppiselle ohjelmalle. Myös sofistikoituneempia menetelmiä on kehitetty.

Perusajatus

Shakkiohjelman perusrakenteeseen kuuluu arviointifunktio, joka arvioi pelitilanteiden edullisuutta (yksinkertaisimmallaan esimerkiksi laudalla olevien omien ja vastustajan nappuloiden määränä), ja hakualgoritmi, joka käy läpi mahdollisia tulevia siirtoyhdistelmiä etsien siirtoa, joka suurimmalla todennäköisyydellä johtaisi edulliseen pelitilanteeseen tulevaisuudessa. Shakin ohjelmoimisen päävaikeutena on, että mahdollisten pelitilanteiden määrä kasvaa nopeasti erittäin suureksi, joten kaikki mahdolliset siirtoyhdistelmät tutkimalla edes nykyiset supertietokoneet eivät pystyisi laskemaan peliä kovinkaan monta siirtoa eteenpäin. Sen vuoksi on kehitetty heuristiikkoja, joilla huonolta näyttävät hakupolut katkaistaan pian. Tietokone pystyy laskemaan siirtoja eteenpäin valtavan paljon nopeammin kuin ihminen, mutta toisaalta ihminen osaa paremmin sivuuttaa huonot siirtomahdollisuudet heti. Vastatakseen taitavan ihmispelaajan intuitiivisiin pitkän tähtäimen strategioihin, tietokone tarvitsee paljon laskentatehoa, koska siirtoja on laskettava kauas eteenpäin. Tämän vuoksi tietokoneet ovat pärjänneet shakissa ihmisille vasta viime aikoina.
Shakkiohjelmissa on myös mahdollista käyttää alku- ja loppupelikirjastoja johon on tallennettu hyväksi tai varmasti oikeaksi havaittuja siirtoja. Shakkiohjelmiin voidaan myös liittää tietokantoja johon on asennettu analysoituja pelejä joita seuraamalla tietokone pärjää mahdollisimman hyvin pelaajaa vastaan. Shakkiohjelmiin voidaan myös lisätä analysointiohjelma joka itse laskee asemaa eteenpäin ja tallentaa tietokantaan oikeaksi katsomiaan siirtoja parantaen näin vahvuuttaan.

Historia

Shakki on yksi vanhimpia tietokoneiden ohjelmointiin liittyvistä ongelmista. Esimerkiksi Konrad Zuse kirjoitti jo vuodesta 1943 eteenpäin kehittämällään Plankalkül-ohjelmointikielellä 49 sivua algoritmeja shakin pelaamiseen, vaikka itse ohjelmointikielelle ei ollut toteutusta.
Neuvostoliitossa rakennettiin 1960-luvun alussa Kaissa-niminen shakkiohjelma, joka sittemmin voitti tietokoneshakin maailmanmestaruuden. Ensimmäinen kansainvälinen tietokoneshakkiottelu pidettiin vuonna 1967. Tuolloin Kaissa pelasi amerikkalaista shakkiohjelmaa vastaan voittaen tämän 3-1. Tukholmassa pidettiin vuonna 1974 ensimmäinen tietokoneiden maailmanmestaruusturnaus. Tuolloin 13 konetta kahdeksasta maasta pelasi neljä kierrosta. Koneet sijaitsivat koko ajan kotimaissaan ja tiedonsiirto tapahtui puhelimitse koordinaatiokeskukseen. Kaissa voitti turnauksen ja seuraavina olivat tasapistein Chess ja Chaos. Toinen MM-turnaus järjestettiin Torontossa 1977. Voittaja oli tuolloin Chess 4.6 ennen jaetulle kakkossijalle yltäneitä Duchessiä ja Kaissaa. Kolmannet MM-kisat järjestettiin Linzissä 1980 ja voiton jakoivat Belle ja Chaos. Neljännen maailmanmestaruuden voitti Cray Blitz 1983 New Yorkissa. Neuvostoliiton kaissa ohjelmiston kehittely lopetettiin vuonna 1975 ja se pelasi viimeisen ottelun 1977, katsottiin että ohjelmoijilla on parempaakin käyttöä.

Shakkiohjelmat nykyisin

Nykyään tietokoneet pelaavat hyvin laadukasta shakkia. Esimerkiksi Deep Blue voitti vuonna 1996 shakin maailmanmestarin Garry Kasparovin ensimmäisessä pelissään. Kasparov voitti kuitenkin Deep Bluen kolmesti joten Kasparov voitti ottelun 4–2.
Vuonna 1997 käyty uusintaottelu kuitenkin järisytti shakkimaailmaa. Ottelun kuudesta pelistä Deep Blue voitti kaksi, Kasparov yhden ja kolmesti pelattiin tasan. Tietokoneohjelma oli siis voittanut shakin maailmanmestarin luvuin 3,5–2,5. Ratkaiseva viimeinen peli oli erittäin dramaattinen. Tietokoneohjelma pelasi hyvin ja kovan paineen alla Kasparov teki virheitä ja hävisi pelin vain 19 siirrossa .
2000-luvun alun vahvimpia shakkitietokoneita oli Hydra. Se voitti 21.–26. kesäkuuta 2005 pelatussa kuuden ottelun sarjassa Michael Adamsin 5 1/2-1/2. Hydra ei ole hävinnyt vielä kertaakaan ihmiselle turnausmuotoisessa pelissä, mutta esimerkiksi kansainvälinen suurmestari Arno Nickel on voittanut Hydran kuusi kuukautta kestäneessä kirjeshakissa. Hydra ei ole kuitenkaan yleisesti saatavilla, vaan se on 64 Xeon-suorittimen klusteri.
Eräs vahvimmista avoimen lähdekoodin shakkiohjelmista 2018 oli Marco Costalban, Joona Kiiskin, Gary Linscottin and Tord Romstadin tekemä ohjelma Stockfish. Muita tunnettuja ohjelmia ovat Bob Hyattin ohjelmat Crafty, joka tuli tunnetuksi ja suosituksi Tim Mannin Winboard-nimisen Windows-clientin analyysimoottorina, ja sen edeltäjä Cray Blitz, joka voitti tietokoneshakin maailmanmestaruuden vuosina 1983 ja 1986. Muita tunnettuja shakkiohjelmia ovat esimerkiksi Chessmaster, Fritz ja Vasik Rajlichin menestysohjelma Rybka, joka 2007–2010 voitti neljä perättäistä maailmanmestaruutta, mutta joutui syytöksiin koodin plagioinnista.
Vuonna 2017 Googlen DeepMind-tekoälykehittämö julkisti shakkiohjelman AlphaZero, joka perustui yhtiön AlphaGo Go-peliohjelmaan. Google väitti ohjelman voittaneen Stockfish 8:n 100-pelin ottelussa häviöttömällä tuloksella 64–36 vain tuntien opettelun jälkeen. Google julkisti väitetystä ottelusta 10 peliä.

Shakkiohjelmat tulevaisuudessa

Yleisesti arvioidaan tietokoneiden pelaavan yhä vahvempaa shakkia tulevaisuudessa. Syynä tähän on tietokoneiden jatkuvasti kasvava laskentateho sekä laajenevat tietokannat. Nykyään shakkiohjelmien aseman arviointifunktioita on vaikea parantaa, sillä yhden osa-alueen arvioimiseen käytettävän funktion muokkaaminen saattaa heikentää jonkun toisen aseman arvioimista. On arvioitu, että tulevaisuudessa shakkiohjelmat voittavat aina shakin maailmanmestarit ja kilpailevat tasaväkisesti vain keskenään. Shakissa valkoisella saattaa olla voittostrategia, eli aloittaja pystyisi optimaalisella pelillä voittamaan pelin aina. Tätä ei ole todistettu, eikä kysymys ole tietokoneiden laskentakyvyn rajoissa. Teoreettisesti kysymys on kuitenkin mahdollista ratkaista, sillä nappuloiden alkuasemasta lähtien voidaan muodostaa kaikki laudan asemat kattava pelipuu ja päätellä näin saadusta puusta optimaalisen pelin siirrot.