Satranç pozisyonlarını değerlendirmenin doğru yolu nedir?


13

Minimax gibi bir bilgisayar satranç AI algoritmaları hakkında bir süre ilgilenmiştim (ve bir noktada çalışma şansı yakaladım) ve bu algoritmaların temel bileşeni, ne olduğunu belirlemek için değerlendirme fonksiyonu iyi yönetim kurulu yapılandırması ve kötü olan nedir.

Diğer bir deyişle, satranç tahtanızın bir yapılandırması göz önüne alındığında, bunun sizin lehinize olduğunu ve ne derece bir güvenle olduğunu nasıl belirlersiniz?

Örneğin:

  • Eğer varsa kendi merkezi, bu oldukça olumludur.
  • Rakibinizden daha fazla parçanız varsa, bu oldukça elverişlidir.
  • Kraliçenizi kaybettiyseniz, bu oldukça uygun değildir.
  • Tanıtmaya yakın bir piyonunuz varsa, bu elverişlidir.
  • ...

Bu nedenle , genel olarak Satranç oyunu hakkında uzman bilgisine dayanarak, iyi bir değerlendirme fonksiyonunun nasıl oluşturulacağı konusunda bazı tavsiyeler istiyorum . Ve mümkünse, bir dereceye kadar elverişlilik (1'in çok elverişli olmadığını, 100'ün son derece elverişli olduğunu söyleyin).

Sonunda fikir, olasılıklar ağacına belirli bir derinliğe kadar bakacak ve bir sonraki hareket için en uygun yapılandırmanın ne olduğunu (gelecekte birkaç hamleyi dikkate alarak) değerlendirecek bir algoritma oluşturabilmektir. oyuncu için elverişlidir ve rakibe elverişli değildir. Ancak iyi bir değerlendirme fonksiyonu olmadan algoritma hiçbir şey değildir.


Bu soru StackOverflow üzerinde iyi olacağını düşünüyorum. Orada zaten Satranç AI
xaisoft

3
Daha önce SO'ya göndermeyi düşündüm, ama orada yapıcı ya da gerçek bir soru olarak kapalı olacağından neredeyse eminim. Belki kodun üzerinde daha fazla vurguya ihtiyacım varsa, ama değerlendirme fonksiyonu için kod veya algoritmalar hakkında değil, satranç hakkında bilgi gerektirdiğini düşünüyorum.
Charles Menguy

Ne kadar isabetli. Tamamen doğru olan tek yol, kazanmak ya da kaybetmek ya da bağlamak.
edwina oliver

Yanıtlar:



5

@Eve Freeman tarafından cevabı ekleyerek, dünyanın en iyi bilgisayar motorunun nasıl olduğunu araştırmayı öneririm, Stockish, belirli bir pozisyonu değerlendirir. Gibi kaynak kodu açık olan, ücretsiz olarak yapabilirsiniz. Ben aradığınız değerlendirme fonksiyonu ile dosya olduğunu düşünüyorum bu bir .


5

Bu cevaba biraz geç kaldığımı hissediyorum - ama aynı zamanda bir motor yapma sürecindeyim. Kaynak kodu Python'da (bilmeseniz bile okunması oldukça kolaydır) ve okumak isterseniz burada mevcuttur . Halihazırda aktif olan 'buluşsal yöntemler' listesi (kayıt sırasında):

  • Daha gelişmiş (karşı tarafa daha yakın) parçalar daha iyidir
  • Promosyona daha yakın piyonlar iyi
  • Kings, oyunun hangi aşamada olduğuna göre ayrı ayrı puanlanır (açılış, orta oyun, oyun sonu)
  • Oyuncunun her iki piskoposu varsa, bu bir bonus alır
  • Oyuncu kalksa bonus kazanın
  • İzole piyonlar (etraflarında hiçbir şey olmayan piyonlar) iyi değildir
  • İki katına çıkmış piyonlar (aynı dosyada aralarında boşluk olmayan iki piyon) iyi değil
  • 8 piyonun hepsine sahip olmak iyi bir şey değildir ve cezalandırılır (tahtayı dağıtır ve yol alırlar)
  • Ayrıca kullanılan bu harika değerlendirme fonksiyonuna bir göz atın
  • Piskopos ile aynı renk meydanında daha fazla piyon bulunan piskoposlar cezalandırılır (kalabalık durumlarda iyi değildir)
  • Henüz uygulanmadı, ancak planlandı: Şövalyeler daha kalabalık durumlarda bonus kazanıyor

Bu noktalardan birinde, oyunun 'aşamasından' bahsettim (örneğin, açılış, orta oyun, son oyun) ve bunu motorunuza dahil etmek istiyorsanız, muhtemelen benim yaptığım problemle karşılaşacaksınız: hayır bunları ayıran net çizgi. Oyunun hangi aşamada olduğuna karar veren fonksiyonum birkaç şey kullanıyor:

  • Tahtadaki malzeme miktarı (herhangi bir parça öldürülür öldürülmez oyunu açılışta değil olarak işaretler)
  • Hareket sayısı (ne olursa olsun, 6 tam hareketten azı açıklıktır)
  • kraliçelerin hareketi (eğer her iki kraliçe de taşınmışsa, oyunu orta oyun olarak işaretleyin)

Bu cevap uzun, geç ve konu dışı olabilir, ama umarım yine de yardımcı olmuştur.


4

Şaşırtıcı bir şekilde, değerlendirme işlevi rastgele olduğunda bir Minimax motorunun oldukça iyi oynayacağı ortaya çıkıyor ; Bu Beale etkisi olarak bilinir ve size daha fazla seçenek veren ve rakibinize daha az seçenek sunan konumların genellikle elverişli olduğu ilkesinden kaynaklanır. Tutarlı ve verimli bir şekilde rastgele değerlendirmeler üretmenin makul bir yolu, pozisyon için bir Zobrist karması oluşturmaktır (oyunun başında rastgele seçilen katsayıları kullanarak) ve rastgele değerlendirmeyi doğrudan karmadan elde etmektir.

Ölçeğin karşı ucunda, AlphaZero ve Leela, geniş bir sinir ağı kullanarak aranan her pozisyon için son derece sofistike bir değerlendirme yaparlar . Bu ağın hangi işlevleri etkili bir şekilde uyguladığını insani terimlerle tanımlamak pratik değildir, ancak Stockish'in değerlendirme işlevinden kesinlikle daha etkilidir. AlphaZero araştırma makalesi, bu yaklaşımın Minimax yerine Monte-Carlo Ağaç Arama ile en iyi sonucu verdiğini göstermektedir.

Öte yandan, insan oyuncuların veya yorumcuların bir pozisyonun nüanslarını anlamalarına yardımcı olmak için bir analiz motoru geliştirmek istiyorsanız, belirlenmiş malzeme değerleri ve konum teorisi kullanarak geleneksel bir değerlendirme fonksiyonu uygulamak faydalı olabilir . Mephisto'nun satranç bilgisayarlarının çoğunda kullanılan saygın bir motorun ana tasarım özelliklerini belgeleyen Ed Schröder'in Inside Rebel tarafından iyi bir örnek verilmiştir . Değerlendirme fonksiyonunuzun her bir unsurunun göreceli önemini belirlemek için belirli bir düzeyde makine öğrenimi kullanmak ve ayrıca bir GUI'de sunum için bu öğeleri ayrı ayrı kırmak isteyebilirsiniz.


3

Bence satranç programcıları, değerlendirme fonksiyonlarını tasarlarken güçlü satranç oyuncularının bilgisine güvenme eğilimi göstermez, bunun yerine farklı unsurları dener ve daha sonra diğer motorlara karşı oyunlarda test eder ve ne tutacağına karar verir. Larry Kaufman, bir insanın anlayışının ne olduğuna dair görüşleri hakkında adil bir şekilde konuşuyor, ancak hem Rajlich hem de Dailey çok sonuç odaklıydı ve Kaufman'ın toptan satış fikirlerini benimsemedi.

İlginç bulduğum bir makale, Rybka ve Fruit'in değerlendirme işlevlerini karşılaştıran Zach Wegner'dı. Rybka'nın bir adım ileriye taşıyabileceği alanlardan biri, spesifik parça kombinasyonlarına dayanan malzeme dengesizlik tablolarının birleştirilmesiydi. Kaufman da bu konuda bir makale yazdı.

http://www.top-5000.nl/ZW_Rybka_Fruit.pdf http://danheisman.home.comcast.net/~danheisman/Articles/evaluation_of_material_imbalance.htm


0

Bu bağlantı en iyi başlangıç ​​noktası IMHO'dur. Bunu kendi satranç programımın başlangıç ​​noktası olarak kullanıyorum ve anlaşılması kolay ve kullanışlı buluyorum.

https://chessprogramming.wikispaces.com/Simplified+evaluation+function


2
Lütfen bağlantının içeriği üzerinde kısaca bilgi verebilir misiniz?
Pablo S.Ocal

Wikispaces sitesi artık geçersiz. Yeni evine düzeltilmiş bir bağlantı: chessprogramming.org/Simplified_Evaluation_Function
Chromatix

0

Özetle, bir satranç motorunun parametrelerini ayarlamak için standart yaklaşım:

  1. Parametreleri tanımlayın
  2. Parametrelere nominal (başlangıç) değerleri verin
  3. Nasıl çalıştığını görmek için motoru çalıştırın
  4. Performansını artırmaya çalışmak için parametre değerlerini ayarlayın

Ardından performans hedefinize ulaşıncaya kadar 3. ve 4. Adımları tekrarlayın.

Bunu yapmak için genel yaklaşım, motorların motor turnuvalarında karşılaştığı bir laboratuvar kurmaktır. Motorun her iki rengi de oynadığı birden fazla oyun kullanılır. İlgilendiğiniz ana turnuvalar, parametre değeri A olan bir motorun parametre değeri B olan aynı motora karşı çalıştırılmasını içerir.

Tahmin edebileceğiniz gibi, bu yaklaşımın sonuçları büyük ölçüde aşağıdakilere bağlıdır:

  • Seçilen parametreler
  • Parametreler nasıl belirtilir
  • Parametre değerlerinin test boyunca nasıl değiştiği
  • Motorların çalışma şekli (sınırlı kat derinliği, sınırlı süre, hassasiyet vb.)

Bu yaklaşım da çok zaman alır.

2010'da Genetik Algoritma teknikleri kullanan araştırmacılar tarafından a) parametreleri belirlemek ve b) parametre değerlerini ayarlamak için daha yeni (ve yenilikçi bir yaklaşım) geliştirilmiştir. Araştırmacılar, ilk önce bir dizi büyük usta oyununa karşı başlangıç, nominal bir parametre değeri kümesine sahip bir motoru , "en iyi hareketi" etkin bir şekilde seçip seçemeyeceğini görmek için çalıştırdılar. "En iyi hamle", büyükbabanın * yaptığı hamle olarak tanımlandı. Başarısız olduğu her yerde kaydedildi. Daha sonra başka bir parametre değeri seti denendi ve önceki çalışmaya göre bağıl performans belirlendi.

Daha sonra, parametre değerlerini birleştirmeye yönelik programlı bir yaklaşım , "en uygun olanın" hayatta kalması için Genetik Algoritma prensibi kullanılarak denendi. Burada "en uygun", ideale en çok uyan çıktıyı üreten anlamına gelir. (Aynı zamanda, yaklaşımın kalitesini değerlendirmek için kullanılan bir teknik olan "en küçük karelere uyum" regresyonunun istatistiksel tekniği üzerinde bir punta olur.)

Sadece bir GM'yi taklit edebilecek motor parametreleri bulunduktan sonra, gerçek motor turnuvası aşaması başlar. Bu aşamada, farklı parametre değer kümeleri bu kez doğrudan birbirine karşı bir kez daha çukurlaşır . Genetik Algoritma iyileştirme teknikleri, motorun art arda daha iyi nesillerini üretmek için uygulanır.

Bu araştırma projesinde, parçaların tüm malzeme değerlerini ve geriye doğru piyonlar, zayıf kareler, piskopos çifti vb. Gibi daha yaygın stratejik değerlendirme kriterlerini içeren 36 parametre kullanılmıştır. Bununla birlikte, araştırmacılar, "kral baskısı", "her türlü parça için" hareketlilik "değerleri, kralın bitişiğindeki bir dosyada kale, yarı açık bir dosyada kale, - / b- / g- / h-dosyası, geçirilen piyon ile savunan kral arasındaki ayrım ve daha fazlası.

Ne yazık ki, araştırmacılar bu parametre grubunu nasıl ortaya çıkardıkları ve hangi alternatif parametreleri test ettikleri ve reddettikleri hakkında ayrıntılı bilgi vermezler. Çok daha büyük bir setle başladıklarını ve hangilerinin performans üzerinde en büyük etkiye sahip olduğunu ve hangilerinin önemsiz veya türev olduğunu ve bu nedenle düşürülebileceğini belirlediklerini varsaymak mantıklı olacaktır.

Bu faydalı olabilir gibi görünüyorsa, araştırmayı burada bulabilirsiniz .

* Araştırmacıların kullandığı yaklaşımın bir aşaması hakkında uyarıda bulunmak. Giriş kitabındaki Move tarafından anlaşılması satranç taşı John Nunn seçti "... kuvvetli büyükustalar arasında sert bir kavga oyunlar ..." Onun temalar göstermek için. Sonra ekler:

Okuyucular, bu kitaptaki oyunları süsleyen soru işaretlerinin sayısını görmek oldukça şaşırtıcı olabilir. Şüphesiz, seçilecek sadece otuz oyunla, bazı ses oyunları bulmak kolay olmalıydı. Ancak, emin değilim. ... hemen hemen her karmaşık, zorla dövüşen oyunda hata bulmak mümkün ... Oyunumun tamamen doğru bir yerde olduğunu hiç hissetmedim, bu yüzden kişisel olarak bu vahiyleri üzücü bulmuyorum. Ancak, bazıları satrancın insanlar tarafından oynanan haliyle daha önce düşünülenden daha az doğru olduğunu kabul etmekte zorlanabilir.

Dr Nunn yükseltir noktası taklit ustası hamle gerektirmesi nedeniyle motor parametrelerini ayarlamak için araştırmacıların ilk yaklaşım kusurlu olabileceğini düşündürmektedir insan oyun kusurlu çünkü . Aslında, motorların zaten insanlardan daha iyi oynadığı iyi bilinmektedir .

Bu nedenle, belki de başlangıç ​​parametrelerini ayarlamak için daha iyi bir yaklaşım, yeni bir motoru mevcut üstün bir motorla eşleştirmek olacaktır .


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.