S.a,
Bu makalede satranc oyununa nasil bir yapay zeka kodlandigini bulabileceksiniz.Bölümü 2 parcaya ayiracagiz.
Teori Bölümü, satranc programlamanin genel prensipleri ile ilgili.Bu programlamaya girmeden genel prosedürleri iceriyor.Böylece programlama bilmeyenler tarafindan da kolay anlasilabilir.
Pratik Bölümü ise, bir satranc programinin Javada somut uygulamasidir.Bunun yaninda ilk önce Kullanici girişi icin bir arayüz(interface) yazip daha sonra yapay zekaya gececegiz.
Makalemiz 10 kısımdan olusuyor.Pratik bölümünde her bölümün sonunda Source Code (Kaynak kodu)nu bulabileceksiniz.
Eger pratik bölümünde kendi örnek kodlarinizi yazmak isterseniz, programlama araci olan Javaya ihtiyaciniz olacak.Ilk önce Java Developers Kit JDKye ihtiyaciniz olacak.Bunu Oracle Download Center den indirebilirsiniz.
TEORi BöLÜMÜ
Satranc Tahtasi
Bilgisayar sadece rakamlarla calisiyor.Bu yüzden satranc tahtasinin görünümü adreslerin olusturdugu siralardan ibaret.Her bir adres bir alani temsil ediyor. Adreste kaydedilen deger bilgisayara tahtanin üzerinde yer alan figürler hakkinda bilgi veriyor. Adresler ard arda siralanir ve bir Index üzerinden ele alinabilinir.(Programcilar icin: Array)
Bu tanim cok soyut oldu.Bunu bir örnekle anlasilabilir yapmaya calisalim.
64 cekmeceli bir sandigin önünde oturdugunuzu düsünün.Bu cekmeceler 1den 64e kadar numaralandirilmis.Siz ayni sekilde tahtanin her bir alanina karsilik gelecek sekilde bir satranc tahtasini numaralandirdiniz.Satranc tahtasinin üzerinde bir figür(tas) duruyorsa, bu ayni figür cekmecenin icinde de ayni numara ile yer aliyor. Ama tabiki satranc tahtasini göremezsiniz.(ayni sekilde bilgisayar da göremez)
Ama mesela 12. alanda nasil bir figür(tas) oldugunu bilmek isterseniz, asagidaki örnege bakin.
Satranc oyun kurallari
Satranctaki en önemli kural figürlerin(taslarin) ilerleme seklidir.Diger kurallar ise bunun üzerine kuruludur.Bilgisayar, sadece basit aritmetik operasyonlar gerceklestirdigi sayilar ile calistigindan figürlerin ilerleme seklini matematik dilinde belirtmeliyiz.
Tekrar sandik örnegine dönelim.Normalde gercek bir satranc tahtasi üzerinde bir figürü(taşı) oynamak icin basitce kaydirmak isterken bunu sandığımızla yapamayiz.Cekmeceden bir figür alip diger bir cekmeceye koymaniz gerekir.Ama figürleri(taslari) kolayca herhangi bir cekmeceye koyamazsiniz cünkü o zaman ayni, tahtanin üzerindeki figürleri secmeden kaydirmaniz gibi gecersiz hareket yapmis olursunuz.
Satranc oyununda bazi kolay kurallar mevcut.Mesela; "her yöne bir alan(Şah)" veya "her zaman bir L(At)". Önümüzde sadece üzerinde sayilar yer alan bir cekmecemiz oldugundan böyle cografi bildirimleri takip etmek bizim sandik ile biraz zor.
Bir Atin, alan 29dan nereye atlayabilecegini bir inceleyelim:
#Alan 19a (19 - 29 = -10)
#Alan 12ye (12 - 29 = -17)
#Alan 14e (14 - 29 = -15)
#alan 23e (23 - 29 = -6)
#Alan 39a (39 - 29 = +10)
#Alan 46ya (46 - 29 = +17)
#Alan 44e (44 - 29 = +15)
#Alan 35e (35 - 29= +6)
Peki Alan 37den?
#Alan 27ye (27 - 37 = -10)
#Alan 20ye (20 - 37 = -17)
#Alan 22ye (22 - 37 = -15)
#Alan 31e (31 - 37 = -6)
#Alan 47ye (47 - 37 = +10)
#Alan 54e (54 - 37 = +17)
#Alan 52ye (52 - 37 = +15)
#Alan 43e (43 - 37 = +6)
Dikkatinizi ceken birsey var mi? At figürünün her adimini basit bir toplama ya da cikarma islemi ile belirleyebiliriz.Eger ati bir cekmeceden alip ve diger 10 cekmeceye koyarsak
gecerli bir hamle yapmis oluruz.Diger tüm figürlerin ilerleme seklini basit operasyonlar ile belirleyebilirsiniz.Isterseniz deneyin.
Tabii ki bilgisayar bir hamle yapilmadan, rastgele satranc tahtasinin kenarindan oynanip oynanmadigini kontrol etmek zorundadir.Bu kontrol mekanizmasini pratik bölümünde inceleyecegiz.
Pozisyon Değerlendirmesi
Oyun kurallarini bilmek ile satranc oyuncusu olunmaz.Bizim bilgisayarimizin herhangi gecerli bir hamle gerceklestirip en iyisi olmasini bekleyemez.Bir hamlenin sonuçlarını tahmin etmek için, ortaya cikan pozisyonu değerlendirecektir.
Böylece kendisi icin en uygun olan hamleyi bulabilir.Degerlendirmede bilgisayar, kendi figürlerinin(taslarinin) degerini topluyor ve rakip figürlerin degerlerini de çaliyor.
Genelde piyonlarin hareketliligi, merkezin kontrolü ve yapi taslari da degerlendirmeye girer.
Hamle Secimi
En iyi hamleyi bulabilmek icin bilgisayar, "hamle agaci" adinda bir sistem üretir. Bunun yaninda her gecerli hamle icin bir "dal" olusturur.Tabii yarim hamleyi önceden kestirmek cok zordur ve kullanilabilir sonuclara ***ürmez.
O yüzden bilgisayar her bir "dala gider ve hamleyi kendi satranc tahtasinda yapar ve tekrar tüm gecerli hamleleri üretir, ama bu sefer karsi taraf icin. Islem birkac kez tekrarlanir. Tekrarlarin tam sayisi arama derinligine baglidir.
Bir son düğüme ulasilirsa, yani bu düğümler icin baska alt düğüm olusturulamiyorsa bu düğüm degerlendirilir.
Simdi bilgisayar en iyi hamleyi secer. Bunun icin "Minimax" adinda Algoritma mevcut.Bu, su anlami tasiyor:Her oyuncu kendi avantajini ikiye katlayacak ve rakibin avantajini da yariya indirecek sekilde hamle yapar.
Somut olarak: Eger bilgisayar, son dügüm olmayan bir dügümün degerini hesaplarsa, ilk önce kendinden veya rakibin hamlelerinden bir dügüm gidiyor mu ona bakar.
Bu kendi hamleleri ise düğüm, en yüksek oranlı alt düğümün değerini alır.
Bu hamleler rakibe ait ise en düsük oranlı alt düğümün değerini alır.
Belli bir zamandan sonra kökten giden tüm dallar bir degerlendirme almislardir.Bilgisayar bunlarin arasindan en iyisini secer ve bunu hamlesi olarak calistirir.
Bu makalede satranc oyununa nasil bir yapay zeka kodlandigini bulabileceksiniz.Bölümü 2 parcaya ayiracagiz.
Teori Bölümü, satranc programlamanin genel prensipleri ile ilgili.Bu programlamaya girmeden genel prosedürleri iceriyor.Böylece programlama bilmeyenler tarafindan da kolay anlasilabilir.
Pratik Bölümü ise, bir satranc programinin Javada somut uygulamasidir.Bunun yaninda ilk önce Kullanici girişi icin bir arayüz(interface) yazip daha sonra yapay zekaya gececegiz.
Makalemiz 10 kısımdan olusuyor.Pratik bölümünde her bölümün sonunda Source Code (Kaynak kodu)nu bulabileceksiniz.
Eger pratik bölümünde kendi örnek kodlarinizi yazmak isterseniz, programlama araci olan Javaya ihtiyaciniz olacak.Ilk önce Java Developers Kit JDKye ihtiyaciniz olacak.Bunu Oracle Download Center den indirebilirsiniz.
TEORi BöLÜMÜ
Satranc Tahtasi
Bilgisayar sadece rakamlarla calisiyor.Bu yüzden satranc tahtasinin görünümü adreslerin olusturdugu siralardan ibaret.Her bir adres bir alani temsil ediyor. Adreste kaydedilen deger bilgisayara tahtanin üzerinde yer alan figürler hakkinda bilgi veriyor. Adresler ard arda siralanir ve bir Index üzerinden ele alinabilinir.(Programcilar icin: Array)
Bu tanim cok soyut oldu.Bunu bir örnekle anlasilabilir yapmaya calisalim.
64 cekmeceli bir sandigin önünde oturdugunuzu düsünün.Bu cekmeceler 1den 64e kadar numaralandirilmis.Siz ayni sekilde tahtanin her bir alanina karsilik gelecek sekilde bir satranc tahtasini numaralandirdiniz.Satranc tahtasinin üzerinde bir figür(tas) duruyorsa, bu ayni figür cekmecenin icinde de ayni numara ile yer aliyor. Ama tabiki satranc tahtasini göremezsiniz.(ayni sekilde bilgisayar da göremez)
Ama mesela 12. alanda nasil bir figür(tas) oldugunu bilmek isterseniz, asagidaki örnege bakin.
Satranc oyun kurallari
Satranctaki en önemli kural figürlerin(taslarin) ilerleme seklidir.Diger kurallar ise bunun üzerine kuruludur.Bilgisayar, sadece basit aritmetik operasyonlar gerceklestirdigi sayilar ile calistigindan figürlerin ilerleme seklini matematik dilinde belirtmeliyiz.
Tekrar sandik örnegine dönelim.Normalde gercek bir satranc tahtasi üzerinde bir figürü(taşı) oynamak icin basitce kaydirmak isterken bunu sandığımızla yapamayiz.Cekmeceden bir figür alip diger bir cekmeceye koymaniz gerekir.Ama figürleri(taslari) kolayca herhangi bir cekmeceye koyamazsiniz cünkü o zaman ayni, tahtanin üzerindeki figürleri secmeden kaydirmaniz gibi gecersiz hareket yapmis olursunuz.
Satranc oyununda bazi kolay kurallar mevcut.Mesela; "her yöne bir alan(Şah)" veya "her zaman bir L(At)". Önümüzde sadece üzerinde sayilar yer alan bir cekmecemiz oldugundan böyle cografi bildirimleri takip etmek bizim sandik ile biraz zor.
Bir Atin, alan 29dan nereye atlayabilecegini bir inceleyelim:
#Alan 19a (19 - 29 = -10)
#Alan 12ye (12 - 29 = -17)
#Alan 14e (14 - 29 = -15)
#alan 23e (23 - 29 = -6)
#Alan 39a (39 - 29 = +10)
#Alan 46ya (46 - 29 = +17)
#Alan 44e (44 - 29 = +15)
#Alan 35e (35 - 29= +6)
Peki Alan 37den?
#Alan 27ye (27 - 37 = -10)
#Alan 20ye (20 - 37 = -17)
#Alan 22ye (22 - 37 = -15)
#Alan 31e (31 - 37 = -6)
#Alan 47ye (47 - 37 = +10)
#Alan 54e (54 - 37 = +17)
#Alan 52ye (52 - 37 = +15)
#Alan 43e (43 - 37 = +6)
Dikkatinizi ceken birsey var mi? At figürünün her adimini basit bir toplama ya da cikarma islemi ile belirleyebiliriz.Eger ati bir cekmeceden alip ve diger 10 cekmeceye koyarsak
gecerli bir hamle yapmis oluruz.Diger tüm figürlerin ilerleme seklini basit operasyonlar ile belirleyebilirsiniz.Isterseniz deneyin.
Tabii ki bilgisayar bir hamle yapilmadan, rastgele satranc tahtasinin kenarindan oynanip oynanmadigini kontrol etmek zorundadir.Bu kontrol mekanizmasini pratik bölümünde inceleyecegiz.
Pozisyon Değerlendirmesi
Oyun kurallarini bilmek ile satranc oyuncusu olunmaz.Bizim bilgisayarimizin herhangi gecerli bir hamle gerceklestirip en iyisi olmasini bekleyemez.Bir hamlenin sonuçlarını tahmin etmek için, ortaya cikan pozisyonu değerlendirecektir.
Böylece kendisi icin en uygun olan hamleyi bulabilir.Degerlendirmede bilgisayar, kendi figürlerinin(taslarinin) degerini topluyor ve rakip figürlerin degerlerini de çaliyor.
Genelde piyonlarin hareketliligi, merkezin kontrolü ve yapi taslari da degerlendirmeye girer.
Hamle Secimi
En iyi hamleyi bulabilmek icin bilgisayar, "hamle agaci" adinda bir sistem üretir. Bunun yaninda her gecerli hamle icin bir "dal" olusturur.Tabii yarim hamleyi önceden kestirmek cok zordur ve kullanilabilir sonuclara ***ürmez.
O yüzden bilgisayar her bir "dala gider ve hamleyi kendi satranc tahtasinda yapar ve tekrar tüm gecerli hamleleri üretir, ama bu sefer karsi taraf icin. Islem birkac kez tekrarlanir. Tekrarlarin tam sayisi arama derinligine baglidir.
Bir son düğüme ulasilirsa, yani bu düğümler icin baska alt düğüm olusturulamiyorsa bu düğüm degerlendirilir.
Simdi bilgisayar en iyi hamleyi secer. Bunun icin "Minimax" adinda Algoritma mevcut.Bu, su anlami tasiyor:Her oyuncu kendi avantajini ikiye katlayacak ve rakibin avantajini da yariya indirecek sekilde hamle yapar.
Somut olarak: Eger bilgisayar, son dügüm olmayan bir dügümün degerini hesaplarsa, ilk önce kendinden veya rakibin hamlelerinden bir dügüm gidiyor mu ona bakar.
Bu kendi hamleleri ise düğüm, en yüksek oranlı alt düğümün değerini alır.
Bu hamleler rakibe ait ise en düsük oranlı alt düğümün değerini alır.
Belli bir zamandan sonra kökten giden tüm dallar bir degerlendirme almislardir.Bilgisayar bunlarin arasindan en iyisini secer ve bunu hamlesi olarak calistirir.


