satrançta zamansal farkın uygulanması


10

Alfa-beta budama algoritmasını kullanan bir satranç programı ve malzeme, kral güvenlik, hareketlilik, piyon yapısı ve sıkışmış parçalar vb. Özellikleri kullanarak konumları değerlendiren bir değerlendirme fonksiyonu geliştiriyorum. dan türetilmiş

f(p)=w1material+w2kingsafety+w3mobility+w4pawn-structure+w5trapped pieces

burada , her özelliğe atanan ağırlıktır. Bu noktada, değerlendirme fonksiyonumun ağırlıklarını, ajanın kendisine karşı oynadığı ve süreçte kendi ortamından (bu bir takviye öğrenimi biçimi) eğitim verileri topladığı geçici farkı kullanarak ayarlamak istiyorum. Bunu Java'da nasıl uygulayacağına dair bir fikir edinmek için bazı kitaplar ve makaleler okudum, ancak pratik olmaktan ziyade teorik gibi görünüyorlar. Önceki oyunlara dayanarak değerlendirme fonksiyonumun ağırlıklarını otomatik olarak nasıl ayarlayacağım hakkında ayrıntılı bir açıklama ve sahte kodlara ihtiyacım var.w

Yanıtlar:


4

Konu ile ilgilenen herkesin TDL ve derin öğrenmeyi birleştiren makaleye bakmasını tavsiye ederim .

Kabaca, motoru birbirine karşı oyun oynamanız gerekir. Her pozisyon için mini-max değerlendirmesini kaydedin. Oyunun sonunda, satranç için {0,1, -1} olan bir ödül alacaksınız. Ardından parametrelerinizi aşağıdakilerle ayarlamanız gerekir:

resim açıklamasını buraya girin

Bu denklem bize ağırlıkları zamansal farklılıklarla ayarlamamız gerektiğini, ne kadar yapmanız gerektiğine göre ağırlıklandırmamız gerektiğini söylüyor. Mükemmel bir değerlendirmeniz varsa, zamansal farkınız her zaman sıfır olur, bu nedenle herhangi bir ayarlama yapmanız gerekmez.

Ardından, yeni bir oyun oynamak için yeni parametreleri kullanmanız gerekir. Ödeyebileceğiniz kadar oyun ya da yakınsadığını düşündüğünüze kadar tekrar eder.

Birkaç açıklama:

  1. Alıntıladığım yazı indirim faktörü uyguluyor. Sinir ağı için geri orantı algoritması için yapılır. Buna ihtiyacın yok.
  2. En uygun öğrenme oranını (denklemdeki alfa) denemeniz gerekir. Çok büyük, öğrenmenizi kararsız hale getirecek, çok az şeyin birleşmesi daha uzun sürecektir. 0.70 kullanan insanlar gördüm. Alıntı yaptığım makalede 1.0 kullanılmıştır.

Merhaba, Cevabınızı seviyorum ama lütfen makalenin bağlantısını düzeltebilir misiniz?
padura

@padura Düzeltildi. Lütfen okuyun. Veri bilimi için iyi bir okumaydı.
HelloWorld

(+1) Harika cevap. Kağıdı çok sevdim :)
Dawny33

Bu harika bir makale, kendi satranç motorum üzerinde çalışırken bunu bilmediğim için utanç;) Bu teknikle birleştirerek geliştirip geliştiremeyeceğimizi merak ediyorum: bjmc.lu.lv/fileadmin/user_upload/lu_portal/ projekti / bjmc /…
padura

2

İlk olarak, kendinizi neyin içine soktuğunuzu bilmek için 'Wargames'i izlemelisiniz.

İstediğiniz şey f (p) 'dir, böylece f (p) pozisyon gücüne mümkün olduğunca yakındır.

Genetik algo kullanan çok basit bir çözüm, farklı ağırlığa sahip 10000 oyuncuyu kurmak ve hangi kazançların elde edildiğini görmek olacaktır. Ardından en iyi 1000 kazananın ağırlığını koruyun, 10 kez kopyalayın, ağırlık alanını keşfetmek için hafifçe değiştirin ve simülasyonu tekrar çalıştırın. İşlevsel bir form verildiğinde standart GA, bunun için en iyi katsayılar nelerdir.

Başka bir çözüm pozisyonları çıkarmaktır, bu yüzden bir tablonuz var (malzeme, krallık güvenliği, hareketlilik, piyon yapısı, hapsolmuş parçalar) -> konum iyiliği ', konum iyiliği bazı objektif faktördür (yukarıdaki simülasyonları kullanarak sonuç kazan / kaybet hesaplanır) ya da bilinen eşleşmeler, mevcut ağacın derinliği, 5 faktörden birinin iyileştiği ağacın altındaki hareket sayısı Daha sonra f (p), regresyon, svm'niz için farklı fonksiyonel formları deneyebilirsiniz.


Bu hiç mantıklı değil.
HelloWorld
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.