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.

Nykyään tietokoneet pelaavat hyvin laadukasta shakkia, eivätkä käytännössä enää ole ihmisen voitettavissa (vaikkakin voitto yksittäisessä pelissä on teoriassa edelleen mahdollinen).  Viimeinen tunnettu ihmisen voitto huipputason tietokoneohjelmasta turnausolosuhteissa on Ruslan Ponomariovin voitto Fritz 9:stä 21. marraskuuta 2005.  

## 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öä.

Vielä 1990-luvulla pelit olivat tasaisempia: 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 hävinnyt kertaakaan ihmiselle turnausmuotoisessa pelissä, mutta esimerkiksi kansainvälinen suurmestari Arno Nickel on voittanut Hydran kuusi kuukautta kestäneessä kirjeshakissa. Hydra ei ollut kuitenkaan yleisesti saatavilla, vaan se oli 64 Xeon-suorittimen klusteri.

Eräs vahvimmista avoimen lähdekoodin shakkiohjelmista on 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ä.

## Shakkiohjelmia

* Chessmaster
* Deep Blue
* Fritz (shakkiohjelma)
* Hydra (shakkitietokone)
* Komodo
* Stockfish
* Rybka

Ruotsalainen tietokoneshakin harrastajien sivusto *The Swedish Chess Computer Association* (SSDF) vertailee aktiivisesti eri shakkiohjelmia pitäen ranking listaa parhaista shakkiohjelmista. Myös englantilainen tietokoneshakin harrastajien ryhmä CCRL (Computer Chess Rating Lists) tekee vastaavia vertailuja.. Saksalaiset CEGT, IPON ja SWCR vertailevat ohjelmia, *chess engines*, eri prosessoreilla, muistimäärillä ja eri käyttöympäristöissä.

## Katso myös
*Turkkilainen

## Lähteet

## Aiheesta muualla
* WBEC Ridderkerk: Vapaasti saatavilla olevia shakkimoottoreita sekä tietokoneiden keskinäisiä otteluita
** WBEC Ridderkerk: Linkkejä shakin ohjelmoimiseen
* Bill Wallin tietokoneshakin historian aikajana
* Tietokoneshakki roskapostisuodattimella