Menü Kapat

Satranç yapay zekası oluşturmak için adım adım kılavuz

Basit bir satranç yapay zekası oluşturmamıza yardımcı olacak bazı temel kavramları keşfedelim:

  • Hareket Oluşturma
  • Kurul değerlendirmesi
  • Minimax
  • Alfa beta budama.

Her adımda, algoritmamızı bu zaman içinde test edilmiş satranç programlama tekniklerinden biriyle geliştireceğiz. Her birinin algoritmanın oyun tarzını nasıl etkilediğini göstereceğim.

AIX’e ait satranç yapay zekası için buraya tıklayabilirsiniz.

1. Adım: Satranç yapay zekası oluşturma ve pano görselleştirmesini taşıma

Hareket oluşturma için satranç .js kütüphanesini ve tahtayı görselleştirmek için satranç tahtas.js kullanacağız. Hareket oluşturma kütüphanesi temel olarak satrancın tüm kurallarını uygular. Buna dayanarak, belirli bir kurul durumu için tüm yasal hareketleri hesaplayabiliriz.

Taşıma oluşturma işlevinin görselleştirilmesi. Başlangıç pozisyonu giriş olarak kullanılır ve çıkış bu konumdan olası tüm hareketlerdir.
Taşıma oluşturma işlevinin görselleştirilmesi. Başlangıç pozisyonu giriş olarak kullanılır ve çıkış bu konumdan olası tüm hareketlerdir.

Bu kütüphaneleri kullanmak, yalnızca en ilginç göreve odaklanmamıza yardımcı olacaktır: en iyi hareketi bulan algoritmayı oluşturmak.

Tüm olası hareketlerden rastgele bir hareket döndüren bir işlev oluşturarak başlayacağız:

Bu algoritma çok sağlam bir satranç oyuncusu olmasa da, aslında ona karşı oynayabileceğimiz için iyi bir başlangıç noktasıdır:

Siyah rastgele hareketler oynar. https://jsfiddle.net/lhartikk/m14epfwb/ 4'te oynanabilir
Siyah rastgele hareketler oynar. https://jsfiddle.net/lhartikk/m14epfwb/ 4'te oynanabilir

Adım 2 : Satranç yapay zekası pozisyon değerlendirmesi

Şimdi belli bir pozisyonda hangi tarafın daha güçlü olduğunu anlamaya çalışalım. Bunu başarmanın en basit yolu, aşağıdaki tabloyu kullanarak tahtadaki parçaların göreceli gücünü saymaktır:

taşlar
taşlar

Değerlendirme fonksiyonuyla, en yüksek değerlendirmeyi veren hareketi seçen bir algoritma oluşturabiliyoruz:

Tek somut gelişme, algoritmamızın artık mümkünse bir parça yakalayacak olmasıdır.

Siyah, basit değerlendirme fonksiyonunun yardımıyla oynar. https://jsfiddle.net/lhartikk/m5q6fgtb/1/'de oynanabilir
Siyah, basit değerlendirme fonksiyonunun yardımıyla oynar. https://jsfiddle.net/lhartikk/m5q6fgtb/1/'de oynanabilir

3. Adım: Minimax kullanarak ağacı arayın

Daha sonra, algoritmanın en iyi hareketi seçebileceği bir arama ağacı oluşturacağız. Bu, Minimax algoritması kullanılarak yapılır.

Bu algoritmada, tüm olası hareketlerin özyinelemeli ağacı belirli bir derinliğe kadar araştırılır ve konum, ağacın “yaprakları” nda değerlendirilir.

Bundan sonra, taşınacak beyaz veya siyah olmasına bağlı olarak, çocuğun en küçük veya en büyük değerini üst düğüme döndürürüz. (Yani, her seviyede sonucu en aza indirmeye veya en üst düzeye çıkarmaya çalışıyoruz.)

Minimax algoritmasının yapay bir konumda görselleştirilmesi. Beyaz için en iyi hareket b2-c3'tür, çünkü değerlendirmenin -50 olduğu bir konuma gelebileceğimizi garanti edebiliriz
Minimax algoritmasının yapay bir konumda görselleştirilmesi. Beyaz için en iyi hareket b2-c3'tür, çünkü değerlendirmenin -50 olduğu bir konuma gelebileceğimizi garanti edebiliriz

Minimax uygulandığında, algoritmamız satrancın bazı temel taktiklerini anlamaya başlıyor:

Arama derinliği 3 olan geliştirilmiş değerlendirme ve alfa-beta budama. https://jsfiddle.net/q76uzxwe/1/'da oynanabilir
Arama derinliği 3 olan geliştirilmiş değerlendirme ve alfa-beta budama. https://jsfiddle.net/q76uzxwe/1/'da oynanabilir

Minimax algoritmasının etkinliği büyük ölçüde elde edebileceğimiz arama derinliğine dayanmaktadır. Bu, bir sonraki adımda geliştireceğimiz bir şeydir.

Adım 4: Alfa-beta budama

Alfa-beta budama, arama ağacındaki bazı dalları göz ardı etmemizi sağlayan minimax algoritmasına yönelik bir optimizasyon yöntemidir. Bu, aynı kaynakları kullanırken minimax arama ağacını çok daha derinlemesine değerlendirmemize yardımcı olur.

Alfa-beta budaması, daha önce keşfedilen bir hareketten daha kötü bir duruma yol açan bir hareket bulursak, arama ağacının bir bölümünü değerlendirmeyi bırakabileceğimiz duruma dayanır.

Alfa-beta budama, minimax algoritmasının sonucunu etkilemez – sadece daha hızlı hale getirir.

Alfa-beta algoritması, ilk önce iyi hareketlere yol açan yolları ziyaret edersek daha verimlidir.

Alfa-beta budama kullanılıp kullanılmadığını ve ağacın açıklanan sırayla ziyaret edilip edilmediğini araştırmamıza gerek yoktur.
Alfa-beta budama kullanılıp kullanılmadığını ve ağacın açıklanan sırayla ziyaret edilip edilmediğini araştırmamıza gerek yoktur.

Alfa-beta ile, aşağıdaki örnekte gösterildiği gibi minimax algoritmasında önemli bir artış elde ediyoruz:

4 derinliğinde bir arama yapmak isteyip istemediğimizi değerlendirmek için gereken pozisyon sayısı ve "kök" konumu gösterilen konumdur.
4 derinliğinde bir arama yapmak isteyip istemediğimizi değerlendirmek için gereken pozisyon sayısı ve "kök" konumu gösterilen konumdur.

Satranç yapay zekası alfa-beta geliştirilmiş sürümünü denemek için bu bağlantıyı takip edin.

Adım 5: Geliştirilmiş değerlendirme işlevi

İlk değerlendirme fonksiyonu oldukça naiftir, çünkü sadece tahtada bulunan malzemeyi sayarız. Bunu geliştirmek için, değerlendirmeye parçaların konumunu dikkate alan bir faktör ekliyoruz. Örneğin, tahtanın ortasındaki bir şövalye, tahtanın kenarındaki bir şövalyeden daha iyidir (çünkü daha fazla seçeneğe sahiptir ve bu nedenle daha aktiftir).

Orijinal olarak satranç-programlama-wiki’de açıklanan parça kare tabloların biraz ayarlanmış bir sürümünü kullanacağız.

Görselleştirilen parça-kare tablolar görselleştirildi. Parçanın konumuna bağlı olarak değerlendirmeyi azaltabilir veya artırabiliriz.
Görselleştirilen parça-kare tablolar görselleştirildi. Parçanın konumuna bağlı olarak değerlendirmeyi azaltabilir veya artırabiliriz.

Aşağıdaki iyileştirmeyle, en azından sıradan bir oyuncunun bakış açısından, bazı “iyi” satranç oynayan bir algoritma elde etmeye başlıyoruz:

Arama derinliği 3 olan geliştirilmiş değerlendirme ve alfa-beta budama. https://jsfiddle.net/q76uzxwe/1/'da oynanabilir
Arama derinliği 3 olan geliştirilmiş değerlendirme ve alfa-beta budama. https://jsfiddle.net/q76uzxwe/1/'da oynanabilir

Sonuç

Basit bir satranç yapay zekası için bile gücü, aptalca hatalar yapmamasıdır. Bununla birlikte, hala stratejik anlayıştan yoksundur.

Burada tanıttığım yöntemlerle, temel satranç oynayabilen bir satranç oynama algoritması programlayabildik. Son algoritmanın “yapay zeka kısmı” (hareket üretimi hariç) sadece 200 satır koddur, yani temel kavramların uygulanması oldukça basittir. Chessus satranç yapay zekası algoritmamıza buradan ulaşabilirsiniz.

Algoritmada yapabileceğimiz bazı diğer iyileştirmeler örneğin şunlar olabilir:

Daha fazla bilgi edinmek istiyorsanız, satranç programlama wiki’sine göz atın. Burada tanıttığım bu temel kavramların ötesini keşfetmek için yararlı bir kaynaktır.

Okuduğunuz için teşekkürler!

tr_TRTurkish