Pazartesi, Temmuz 02, 2007

YSA ile Tic-Tac-Toe

Orjinal ismiyle Tic-Tac-Toe yada benim kullandığım adıyla OXO bilmeyeniniz yoktur herhalde
Bu oyunu oynayacak bir YSA program yazmaya çalıştık.

Rastgele Eğitimli
1) YSA Dizaynı : YSA mız girdi olarak Tahtanın durumunu alıp Çıktı olarakta Hamlesini yaptığı Tahtanın durumunu veriyor. Yani (3x3) 9 giriş ve 9 çıkış değeri var Bilgisayrın hamleleri 1 İnsanın hamleleri -1 olarak kaydediliyor. Boş hücreler 0 değeri içeriyor.

2) Eğitim verilerini hazırlamak : Bu iş için bir programcık yazdım . Bilgisayar ve insan adına sırayla boş hücrelere rastgele hamle yapılıyor. Bilgisayarın kazandığı oyundaki hamleler kaydediliyor. Bu kayıtlardanda eğitim verilerimizi oluşturuyoruz. - oxo.dat -

3) Eğitim : Allaha şükür FannTool'u yazmışım. Eğitim işini çeşitli seçeneklerle oradan yapıp oxo.net diye kaydediyoruz.

4) GUI : OXO oynamak için bir program yazıyoruz. pek tabii ki CodeBlocks IDE si kullanılarak ve FLTK GUI kütüphanesiyle.

Sonucu görmek için bir deneme yapıyoruz. Pek de memnun olamıyoruz. Acaba neden diye şöyle bir düşünüyoruz. ve çünkü eğitim için kullandığımız veriler zeka içermiyor ki programımız zeki davransın. Zekice oynan bir oyunların verileri olmalı ki YSA mız Zekice oynaya bilsin. Böyle bir veri oluşturmak epey bir vakit alacaktı bende vazgeçtim

Böl Öğren
1) Sonra insanın oyunu nasıl oynadığını düşündüm. Insan önce kuralları öğreniyor Nasıl yeneceğini ve nasıl yenilmeyeceğini öğrenip ona göre hamle yapıyor.
2) OXO oyununda nasıl yenersiniz ? Satırlar yada Sutunlar yada Çapraz kutularda 2 tane işaretiniz varsa boş kutuyu doldurup 3 sayısına ulaşarak yenersiniz
3) OXO oyununda nasıl yenilmezsiniz ? Satırlar yada Sutunlar yada Çapraz kutularda 2 tane rakip işareti varsa boş kutuyu doldurup 3 sayısına ulaşmasını engellersiniz
4) Olay Üçlü hücreler üzerinde olduğunu öğrendik. iki adet YSA ya ihtiyacımız var. ilki Hangi 3 lü gurup daha önemli olduğunu tespit ediyor -value - İkinci YSA nasıl Hamle yapacağına karar veriyor -hamle-

5) Hücreleri önem sırasının tespiti için 3 giriş 1 çıkış kullanır. çıkış değeri olarak bir değer biçiyoruz mesela
1 1 0 ...... 1
-1-10 ...... 0.8

gibi çok fazla alternatif olmadığından elle hazırlıyoruz eğitim versini -value.dat- yine FannTool kullanılarak eğitip kaydediyoruz YSA yı -value.net-

6) En önemli olan Hücre gurubunu aldık bu gurup üzerine hamle yapmak için 3 giriş ve hamla yapılmış haliyle 3 çıkış mesela
1 1 0 -> 1 1 1
-1-10 -> -1-11

gibi çok fazla alternatif olmadığından yine elle hazırlıyoruz eğitim versini -hamle.dat- yine FannTool kullanılarak eğitip kaydediyoruz YSA yı -hamle.net-

7) Daha önce yazdığımız arabirime ekleyiveriyoruz. İlk metoda göre oldukça başarılı olduğunu görüyoruz.

Sonuç :
  • Sonuca bakıp İlk metoda haksızlık etemeyin suç eğitim verilerinde yoksa ikinci metodun hamle kısmındada aynı metod kullanılıyor Temporal Difference Learning bakınız tavlay oynayan versiyonu TD-Gammon
  • Sadece Verileri değiştirip tekrar eğitip aynı isimle kaydederek de programı geliştire bilirsiniz
  • Indirmek için buradan buyurun : Download oxo_game
  • Her türlü fikir, öneri ve hata bildirimlerinizi memnuniyetle bekleriz

3 yorum:

Bahattin dedi ki...

17 yaşında bir Fen Lisesi öğrencisiyim. Makalenizden, yapmakta olduğum projede çok fayda göreceğimi düşünüyorum(şimdiden yeterli faydayı gördüm).

Türkçe eğitim dökümanları hazırlayam çok az kişi var. Bize böyle bir imkan sağladığınız için sağolun. Yazılarınıza devam etmeniz dileğiyle...

Adsız dedi ki...

Merhaba ben üniversite öğrencisiyim.Paylaştığınız bilgileri yakından takip ediyorum ve bu konuda size teşekkürlerimi sunuyorum.Benim tez konum herhangi bir dilde hazırlanmış yapay zeka kullanılarak tic tac toe oyununun gerçekleşmesi.Bu konuda bana yardım edebilir misiniz.

bluekid dedi ki...

Merhaba
İlginiz için teşekkürler
Yazdığınız yorumlara isim yada lakap yazarsanız sevinirim
Tezinizle ilgili olarak yardımcı olmaya çalışırız. E-mail adresim profil kısmında var oradan iletişime geçebilirsiniz