Java ile Satranç Oyunu Programlama(Yapay Zeka)

  • Konbuyu başlatan Konbuyu başlatan Z1rT
  • Başlangıç tarihi Başlangıç tarihi
9
EXE RANK

Z1rT

Fexe Kullanıcısı
Puanları 0
Çözümler 0
Katılım
26 Kas 2009
Mesajlar
9,190
Tepkime puanı
0
Puanları
0
Yaş
33
Web sitesi
www.netbilgini.net
Z1rT
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 Java’da 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 Java’ya ihtiyaciniz olacak.Ilk önce Java Developers Kit JDK’ye 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 1’den 64’e 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 29’dan nereye atlayabilecegini bir inceleyelim:


#Alan 19’a (19 - 29 = -10)
#Alan 12’ye (12 - 29 = -17)
#Alan 14’e (14 - 29 = -15)
#alan 23’e (23 - 29 = -6)
#Alan 39’a (39 - 29 = +10)
#Alan 46’ya (46 - 29 = +17)
#Alan 44’e (44 - 29 = +15)
#Alan 35’e (35 - 29= +6)



Peki Alan 37’den?
#Alan 27’ye (27 - 37 = -10)
#Alan 20’ye (20 - 37 = -17)
#Alan 22’ye (22 - 37 = -15)
#Alan 31’e (31 - 37 = -6)
#Alan 47’ye (47 - 37 = +10)
#Alan 54’e (54 - 37 = +17)
#Alan 52’ye (52 - 37 = +15)
#Alan 43’e (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 "dal’a 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.
 
Geri
Üst