Oyunun başlarında mat arkadaşı olmak için kaç farklı yol var?


15

Hepimiz mümkün olan en kısa mat arkadaşın 4 kat olduğunu biliyoruz:

  1. f3 e5

  2. g4 Vh5 #

Bu tek olası taşıma sırası değil. Aslında, beyazın önce f veya g piyonunu hareket ettirip etmediğine, f piyonunu f3 veya f4'e taşıdığına ve siyahın e6 veya e5 oynadığına bağlı olarak 8 vardır. Tabii ki, bu olası 4 katlı hareket dizilerinin sadece küçük bir kısmını oluşturuyor, ancak oyunu bitiren tek bunlar bunlar.

Aradığım şey, az sayıda kat için, şahmatta kaç hamle dizisinin bitirdiği ile şahmatta bitmediği. İdeal olarak istediğim,

  • 4 kat: X şahmat olmayan diziler, 8 4 kat kontrol arkadaşı
  • 5 kat: Y şahmat olmayan diziler, 8 4 katlı kontrol arkadaşı, N 5 katlı kontrol arkadaşı
  • 6 kat: Z şahmat olmayan diziler, 8 4 katlı kontrol arkadaşları, N 5 katlı kontrol arkadaşları, M 6 katlı kontrol arkadaşları

ve bunun için makul olduğu kadar derin.

Bu, iki oyuncunun aynı satranç oyunu ile sonuçlanan rastgele hamle yapma olasılığı hakkında bir Math.SE sorusundan esinlenmiştir . Kısa oyunların bu olasılığa büyük ölçüde hakim olduğundan şüpheliyim, bu da olasılığın yaklaşık olarak kolaylaştırılmasını sağlamalıdır, ancak gerçek sayıların birlikte çalışması güzel olurdu.


1
İlginizi çekebilecek ilgili (ama aynı değil) soru: chess.stackexchange.com/questions/24359/…
itub

2
Sorunuzun bağlamına bağlı olarak, bir oyunun yaklaşık 8 kat tekrarlama nedeniyle berabere bitebileceğini bilmek de ilginizi çekebilir.
DM

1
Burada sorduğunuz verilerin Math.SE sorusundaki olasılıklar için doğru sınırlar sağlamak için yeterli olduğunu düşünmüyorum. Oyun ağacının yapısı hakkında daha fazla bilgiye ihtiyacınız var. (Açıklayıcı bir karşı örnek için, ilk hamle için iki olası seçeneğin olduğu bir oyunu düşünün: A ve B İlk hamle A ise, ikinci hamle için 1 milyon ayrı olası seçenek vardır, oysa B ise tek olası ikinci hamle C'dir. Şimdi oyun 1.000.001 olası iki hamle dizisine sahiptir, ancak rastgele bir oyuncunun B dizisini oynama olasılığı sona
ermektedir

@IlmariKaronen Bu doğru ve soruyu yayınladığımdan beri bunu düşündüm. Ancak, oyun ağacının dallanma oranına yayılmanın, çek içeren çizgiler hariç, bu kadar hızlı arttığını düşünmüyorum. Olasılığa toplam katkı kat ile hızlı bir şekilde düşerse, yaklaşım hala makul derecede iyi çalışmalıdır.
eyeballfrog

Yanıtlar:


26

0-3 kat arası checkmat yok.

4 ply: 8 checkmates, 197,281 total nodes
5 ply: 347 checkmates, 4,865,609 total nodes
6 ply: 10,828 checkmates, 119,060,324 total nodes
7 ply: 435,767 checkmates, 3,195,901,860 total nodes
8 ply: 9,852,036 checkmates, 84,998,978,956 total nodes
9 ply: 400,191,963 checkmates, 2,439,530,234,167 total nodes

"checkmates", son kat üzerinde yapılan checkmating hareketlerinin sayısıdır. Yani 5 kat için, tam uzunlukta 5 olan 347 checkmating dizisi vardır.

Bu değerler: https://www.chessprogramming.org/Perft_Results

Şu anda, muhtemelen gerekli hesaplama kaynakları nedeniyle, 10 kat ve üzeri için şah mat verisi bulunmamaktadır.

Daha spesifik veriler elde etmek için (örn. Satırların kendileri), şahmatla biten satırları kaydeden kendi perft programınızı yazmanız gerekir.


13

Bu tamsayılar dizisi, Tamsayı Dizilerinin On-Line Ansiklopedisinde ( OEIS ) A079485 olarak bilinir ve 13 kata kadar ve bunlardan oluşan sayılar, mevcut çeşitli referanslarla bilinir.


REFERENCES Homer Simpson, Chess Review, Jan-Feb 1982. Tamam, ben bunun bir parçası yaptım, ama komik olurdu ...
Michael

OEIS gerçekten her şeye sahip, değil mi?
eyeballfrog

8

İşte soruya cevap veren ancak yavaş olan, dizüstü bilgisayarımda 5 kat çalıştırmak için 40 dakika süren (ve ek kat başına en az 30 kat artan) basit bir Python programı. Güzel bir şey, ihtiyacınız varsa oyunları yazdırmasıdır. Çıkışı buraya gönderebilirim ama 347 satır uzunluğunda bir cevap vermek istemedim ... :-)

import chess
from chess import pgn

def dfs(board, depth):
    global n
    result = board.result(claim_draw=True)
    if result != '*':
        game = pgn.Game.from_board(board)
        print(game.mainline())
    elif depth > 0:
        moves = list(board.legal_moves)
        for move in moves:
            n += 1
            board.push(move)
            dfs(board, depth-1)
            board.pop()

n = 0
try:
    board = chess.Board()
    dfs(board, 4)
except KeyboardInterrupt:
    pass
print(n, 'positions checked')

İleride başvurmak için pastebin.com'a böyle çıktılar atabilirsiniz; seçim asla sona ermez.
Jason C

Yukarıdaki yorumlar, bu hesaplama için gerçek oyun ağacını keşfetmenin gerekli olabileceğini düşündürmektedir, bu nedenle bu program oldukça yararlı olabilir. Teşekkürler.
eyeballfrog

7

Bu tür bir analiz için bildiğim en iyi kişi, satrançla ilişkili birçok sayıyı hesaplayan (satranç oyunlarının katının bir fonksiyonu olarak maksimum büyüme oranının bir tahmini dahil) ve özellikle de 13. kata kadar olan değerlerin sayısı için http://wismuth.com/chess/chess.html adresindeki şekle bakın .

Daha sonra http://wismuth.com/chess/statistics-games.html adresinde , görünüşe göre 346,742,245,764,219 şah mat oyununa sahip olan 13'e kadar belirli rakamlar veriyor.

Toplam oyun sayısı için, 15 (!) Katına çıkan diğerlerinin sonuçlarını alıntılar, ancak sanırım kontrol arkadaşlarını takip etmediler.

5-13. Katlar arasında, 10.000'de bir hamlenin montaj ilişkisi yapma şansı yaklaşık 1'dir. Ancak Siyahla karşılaştırıldığında Beyaz olarak çiftleşmek çok daha kolay görünüyor:

kat şansa karşı kat grafiği

Oyunların büyüme hızı da Beyaz hamleleri üzerinde Beyaz hamleleri için daha fazla, ancak bu sadece% 1, burada tanımlanan modelden çok daha zayıf.

Rastgele satranç oyunlarından hoşlanırım. Bazen, birden fazla dünya hipotezi varsa, çevrimiçi bir kuantum rasgele sayı üreteciyle, tüm satranç oyunlarını oynayan bir programa sahip olmak güzel olurdu.

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.