Akıllı Satranç Uygulaması HAZIRLAYAN: BERKAY ATAMAN - 150120037 DANIŞMAN: DOÇ. DR. FEZA BUZLUCA
İÇERİK 1. Giriş 2. Analiz 3. Modelleme ve Gerçekleme 4. Yapılan Testler 5. Sonuç 6. Demo
1. GİRİŞ Satranç zekanın ve çabuk düşünmenin etkin olduğu en popüler masa oyunlarından biridir. Sonucunda iki oyuncudan biri kazanır veya beraberlikle sonuçlanır.
Satrancın Zorlukları Nelerdir? Tahtanın bulunduğu durumdan oluşabilecek tüm durumların hesaplanması çok zordur. Yapılacak her hamleden oluşacak duruma göre rakibin yapabileceği hamleler düşünülmelidir ve bu düşünce yapısı katmanlar şeklinde olmalıdır. Galibiyet-mağlubiyet sonucu çoğu senaryoda hesaplanamaz. Onun yerine galibiyet-mağlubiyete yakınlık değerlendirilir.
Kullanılan Teknolojiler Angular.js Ön yüz Dragula Ön yüz.net Arka yüz
2. ANALİZ Kullanıcıya sunulması gereken özellikler nelerdir? Kullanıcı deneyimini iyileştirecek görsel Kullanıcı deneyimini arttırmak için sürükle bırak özelliği Kullanıcının hamlesine karşılık olarak mantıklı bir hamle bulabilmek Karşı hamleyi hızlıca bulmak ve ön yüze aktarmak
Analizler Sonucu Gerekenler Tahta Yapısı (Board Represantation) Arama Fonksiyonu (Search) Değerlendirme Fonksiyonu (Evaluation)
3. MODELLEME ve GERÇEKLEME
State Sınıfı Görevi Oyunun o an ki tüm bilgilerini bulundurur. Tahta(board) nesnesi Tahtayla ilgili çeşitli bilgiler(değerlendirme fonksiyonu için) Hamle sahibinin rengi Tur sayısı Oyun durumu(açılış, gelişme, bitiş durumları) Oyunun durumunu değiştirebilir. GenerateMove() IsKingChekced() Evaluate() Tahta nesnesini bulundurur.
Tahta Yapısı State Sınıfının board nesnesi bir Square dizisidir.
Square Dolu mu boş mu? Hangi taş tarafından dolu? (Piece) Piece (Abstract Class) X, Y koordinatları Rengi Başlangıç pozisyonunda olup olmadığı Her taşın kendine özel hareket edilebilir fonksiyonu PlayableMoves() Bazı taşlara özel fonksiyonlar Şah: Rok hareketi
Tree Sınıfı - Görevi Bulunulan durumdan türeyebilecek durumlarla bir ağaç yapısı kurmak. Derinliğe göre (ply) Ağaçta, değerlendirilmiş durumlardan en mantıklısını seçmek. (Search)
Tree Sınıfı Ağaç Yapısı Ağaç yapısı her hamleden sonra tekrar kurulur. Fakat kurulma aşamasında belirli derinlikte değerlendirme yapılır ve alpha-beta budaması uygulanır. Bu sayede birçok düğümün oluşması engellenir. Zamandan ve hafızadan tasarruf sağlanmış olur. En kötü halde eklenecek düğüm sayısı: 1 + b + b 2 + b 3 Average Space Complexity: O(b 3d/4 ) Alpha-Beta Budaması
Tree Sınıfı En Mantıklı Hamleyi Bulmak Minimax Algoritması (Search) Rakibin her zaman kendisi için en iyi hamleyi yapacağı düşünülür. Kaybı minimize etmeye ve kazancı maksimize etmeye yarar. Kendi hamlesinde en iyi durumu seçip, rakibin hamlesinde kendisi için en kötü durumu seçmelidir.
Alpha-Beta Pruning Ağaç kurulurken, değerlendirilmesine gerek olmayan düğümlerin oluşmasını engeller. α : Alt Sınır β : Üst Sınır α<n<β
Değerlendirme Fonksiyonu(Evaluation) State sınıfının içinde bulunan Evaluate() fonksiyonuyla her durum kendini değerlendirir. Taşların puanları Piyon 100 At 320 Fil 330 Kale - 500 Vezir - 900 İki fil olma durumu 30 Taşların pozisyonları
Değerlendirme Taşların Pozisyonu Taşlar bulunduğu pozisyonlara göre negatif veya pozitif puanlar alır bu sayede belli bir strateji teşvik edilir. Vezir için pozisyon tablosu örneği:
UI Sınıfı Ön yüz ile arka yüz arasındaki iletişim hamle bilgilerinin aktarılmasıyla sağlanır. Hamle bilgisi oynanan taşın koordinatlarını içerir. Kullanıcı tarafından yapılan bir hamle arka yüzde ilk önce hamle doğrulama testine girer ve başarısız olursa hamle ön yüzde geri alınır.
Game Controller Sınıfı State ve Tree nesnelerini bulundurarak oyunu kontrol eder. Ön yüzden gelen veriler burada işlenir. Singleton Design Pattern
İş Akış Diyagramı
4. Yapılan Testler 3 derinlikli oyunda yapılmış bazı hamleler:
5. SONUÇ Başarımlar Rakibin hamlelerine mantıklı karşılıklar verilebildi. Belirli derinliklerde makul süreler elde edildi. Kullanıcı deneyimine uygun görsellik sağlandı. Eksiklikler Yüksek derinliklerde bekleme süresi çok uzadı. Algoritmalar optimize edilerek bunlar aşılabilir. Açılış oyunları veri tabanından alınabilirdi.
6. DEMO
Teşekkürler