YSA ile Tic-Tac-Toe

0
98
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.

oxo

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 (3×3) 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
  • Sadece Verileri değiştirip tekrar eğitip aynı isimle kaydederek de programı geliştire bilirsiniz
  • Her türlü fikir, öneri ve hata bildirimlerinizi memnuniyetle bekleriz

 

Kaynak: http://derindelimavi.blogspot.com.tr/2007/07/ysa-ile-tic-tac-toe.html / 2007
Birol Kuyumcu

Facebook Yorumları