Tietokoneshakki funktionaalisella ohjelmoinnilla
Myyrä, Timo (2011)
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-201105188523
https://urn.fi/URN:NBN:fi:amk-201105188523
Tiivistelmä
Tämän opinnäytetyön aiheena on tutkia, kuinka tietokoneshakki voidaan toteuttaa funktionaalisella ohjelmoinnilla. Työssä käsitellään miten tietokoneshakit rakentuvat. Siinä tutkitaan pelipuun muodostamista, karsintaa ja hakualgoritmien toimintaa. Työ esittelee myös muutaman tunnetun shakkitietokoneen.
Työssä käytetään funktionaalista ohjelmointia. Työ tutkii hieman ohjelmointityylin pohjana olevaa lambdakalkyyliä ja kuvaa sen jälkeen funktionaalisen ohjelmoinnin ominaisuuksia. Näiden tietojen pohjalta on työssä kehitelty tietokoneshakki. Se on toteutettu Clojureohjelmointikielellä, joka perustuu vanhimpaan funktionaaliseen ohjelmointikieleen. Työ kuvaa, kuinka Clojurella voidaan esittää tietokoneshakki käyttäen funktionaalista ohjelmointitapaa.
Työn tuloksena toteutettu Tursas-shakkimoottori pelaa riittävän hyvin shakkia, mutta siihen jäi työn valmistumisen jälkeen vielä parantamisen varaa. Memoisaation ja laiskojen sekvenssien tehokkaalla käytöllä se saataisiin toimimaan tehokkaammin. Työssä huomattiin, kuinka hyvin funktionaalinen ohjelmointi tukee dynaamista ohjelmakehitystä. Siinä voidaan ohjelmoinnin abstraktiotaso nostaa korkeammalle, jolloin ei tarvitse kiinnittää paljoa huomiota toteutuksen yksityiskohtiin.
Työssä käytetään funktionaalista ohjelmointia. Työ tutkii hieman ohjelmointityylin pohjana olevaa lambdakalkyyliä ja kuvaa sen jälkeen funktionaalisen ohjelmoinnin ominaisuuksia. Näiden tietojen pohjalta on työssä kehitelty tietokoneshakki. Se on toteutettu Clojureohjelmointikielellä, joka perustuu vanhimpaan funktionaaliseen ohjelmointikieleen. Työ kuvaa, kuinka Clojurella voidaan esittää tietokoneshakki käyttäen funktionaalista ohjelmointitapaa.
Työn tuloksena toteutettu Tursas-shakkimoottori pelaa riittävän hyvin shakkia, mutta siihen jäi työn valmistumisen jälkeen vielä parantamisen varaa. Memoisaation ja laiskojen sekvenssien tehokkaalla käytöllä se saataisiin toimimaan tehokkaammin. Työssä huomattiin, kuinka hyvin funktionaalinen ohjelmointi tukee dynaamista ohjelmakehitystä. Siinä voidaan ohjelmoinnin abstraktiotaso nostaa korkeammalle, jolloin ei tarvitse kiinnittää paljoa huomiota toteutuksen yksityiskohtiin.