初期のゲームでチェックメイトする方法はいくつありますか?


15

最短のチェックメイトが4プライであることは誰もが知っています。

  1. f3 e5

  2. g4 Qh5#

これが唯一の可能な移動順序ではありません。実際、白がfまたはgポーンを最初に移動するかどうか、fポーンをf3またはf4に移動するかどうか、および黒がe6またはe5を再生するかどうかに応じて8があります。もちろん、これは動きの可能な4プライシーケンスのごく一部を構成しますが、これらはゲームを終了する唯一のものです。

私が探しているのは、少数のプライの場合、チェックメイトで終了するのに対して、チェックメイトで終了しない一連の動きの数です。理想的には、私が望むものは

  • 4プライ:X非チェックメイトシーケンス、8 4プライチェックメイト
  • 5プライ:Y非チェックメイトシーケンス、8 4プライチェックメイト、N 5プライチェックメイト
  • 6層:Z非チェックメイトシーケンス、8 4層チェックメイト、N 5層チェックメイト、M 6層チェックメイト

そして、これが行うのが妥当である限り深く続けます。

これは、2人のプレイヤーがランダムな動きをして同じチェスゲームを行う確率に関するMath.SEの質問に触発されました。ショートゲームがこの確率を大きく支配していると思うので、確率を簡単に概算できるはずですが、実際の数字を使用しておくと便利です。


1
関連あなたが興味のかもしれません(ただし、同一ではない)質問:chess.stackexchange.com/questions/24359/...
itub

2
質問のコンテキストに基づいて、約8プライの繰り返しによりゲームが引き分けに終わる可能性があることを知りたい場合もあります。
DM

1
ここで求めているデータは、Math.SE質問の確率の正確な範囲を提供するのに十分ではないと思います。ゲームツリーの構造に関する詳細情報が必要です。(説明的な反例として、最初の動きに2つの選択肢があるゲームを考えてみましょう:AとB.最初の動きがAの場合、2番目の動きには100万の明確な選択肢がありますが、Bの場合は、可能な2番目の動きはCです。ゲームには1,000,001の2つの動きのシーケンスがありますが、ランダムプレーヤーがシーケンスB、Cをプレイする確率は50%です。)
Ilmari Karonen

@IlmariKaronenそれは本当です。質問を投稿してから、私はそのことを考えました。ただし、チェックを含む行を除き、ゲームツリーの分岐率の広がりはそれほど速くないと思います。確率に対する合計の寄与がプライで急速に低下する場合でも、近似はかなりうまく機能するはずです。
eyeballfrog

回答:


26

0-3プライのチェックメイトはありません。

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

「チェックメイト」は、最終層で行われたチェックメイトの動きの数です。そのため、5プライの場合、正確な長さ5のチェックメイトシーケンスが347個あります。

これらの値は、https//www.chessprogramming.org/Perft_Resultsからのものです

現在、10プライ以上のチェックメイトデータはありません。おそらく計算リソースが必要なためです。

より具体的なデータ(行自体など)を取得するには、チェックメイトで終わる行を保存する独自のperftプログラムを作成する必要があります。


13

この整数のシーケンスは、Online Encyclopedia of Integer Sequences(OEIS)でA079485として知られており、13プライまでの数は、さまざまなリファレンスで知られています。


REFERENCES Homer Simpson, Chess Review, Jan-Feb 1982. わかりました、私はそれの一部を作りましたが、それは面白いでしょう
マイケル

OEISには本当にすべてがありますよね?
eyeballfrog

8

質問に答えますが、遅いですが、私のラップトップで5プライまで実行するのに40分かかります(そして、追加のプライごとに少なくとも30倍増加します)。良いことは、必要に応じてゲームを印刷することです。ここに出力を投稿できましたが、347行の長い回答をしたくありませんでした... :-)

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')

後で参照するために、pastebin.comでそのような出力をスローできます。ピックの有効期限はありません。
ジェイソンC

上記のコメントは、この計算には実際のゲームツリーの調査が必要になる可能性があることを示唆しているため、このプログラムは非常に役立つことがあります。ありがとう。
eyeballfrog

7

この種の分析で私が知っているトップパーソンは、チェスに関連する多くの数値(プライの関数としてのチェスのゲーム数の最大成長率の推定を含む)を計算したFrançoisLabelleです。プライ13までのチェックメイトの数。プライ12までの値については、http://wismuth.com/chess/chess.htmlの図を参照してください

それからhttp://wismuth.com/chess/statistics-games.htmlで、彼は13プライまで特定の数字を与え、明らかに346,742,245,764,219チェックメイトゲームがあります。

ゲームの総数について、彼は15プライ(!)まで上がった他の人からの結果を引用していますが、彼らはチェックメイトを追跡していなかったと思います。

プライ5〜13から、10,000に1つの動きでメイトが配信される可能性があります。しかし、黒に比べて白の方が非常に簡単に交配できるようです:

プライ対メイトチャンスのグラフ

ゲーム数の成長率は、黒の動きよりも白の動きの方が大きくなりますが、ここで特定されたパターンよりもはるかに弱い約1%です。

私はチェスのランダムなゲームを楽しんでいます。複数の世界の仮説が成り立つ場合、チェスのすべてのゲームをプレイするプログラムを持つために、それをオンラインの量子乱数ジェネレーターとリンクするとよいでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.