到達可能なチェス局面で218手を超える合法手を持つものは存在しない
(lichess.org)- 1964年にNenad Petrovićが発表した218手のチェス局面より多くの手を指せる局面は存在しない
- すべての局面を探索することは現実的に不可能なため、数学的最適化とコンピュータによるモデリング手法を用いて上限を証明した
- 不要な駒の除去、部分的な駒配置の許容、キャスリングの単純化などにより探索空間を効果的に削減した
- 最終的にGurobi最適化ツールで218手が最大であることを確認し、144手(プロモーション除く)などの記録も追加で検証した
- この研究により、チェスエンジンや圧縮の開発者は最大手数制限に関する不確実性を解消できるようになった
序論: 218手チェス局面をめぐる論争
1964年にチェス作曲のグランドマスターNenad Petrovićが218手の局面を発表して以来、この記録を破ろうとする試みが続いてきた。筆者は計算機科学者として、あらゆる局面をコンピュータで分析し、この問いに決着をつけようとした。到達可能なチェス局面は約4.8 × 10^44個存在するが、それほど膨大な探索は現実的ではない。
数学的最適化の導入
不要な駒および組み合わせの最小化
- チェス盤上で黒駒が追加的に手数を増やすケースは限られている
- 白ポーンが取れるようになる場合や、相手キングへのチェック状態を回避する場合など
- ほとんどの黒駒は取り除いても最大手数に影響しない
- 駒数が許す限り、黒駒を弱い駒に置き換えることや、一部の制約条件(ピンなど)の下で配置を調整することができる
- 一方で白駒については、最適局面を作るためにクイーンなどの強い駒にすべて置き換えると非合法局面になる可能性があるため、細かな調整が必要である
チェック状態と手数の制限
- 黒キングがチェックされている状態は合法局面ではないため、考慮する必要がない
- 白キングがチェックされている場合は動きが大きく制限され(最大120手)、218手には絶対に到達できない
- したがって、チェックのない局面だけを対象に探索すればよい
部分的な駒配置と数学的モデリング
組み合わせの複雑さを減らすため、部分的(fractional)な駒配置や移動、さらに一部のチェス規則を緩和したモデルでアプローチした。
- たとえば、ある駒が27.3%の確率でe4にあり、72.7%は別の位置に存在するという形で表現する
- この方法により、Gurobiなどの最新の最適化ツールで**整数計画法(ILP, Integer Linear Programming)**として実装した
- 当初はメモリと時間の限界(約5万5千秒後にメモリ不足)に直面した
- 探索空間を簡素化するため、キャスリング規則、チェックの無視、ピンの無視、アンパッサン条件の単純化などの追加措置を適用した
最適化と結論
最終的に、不要な組み合わせ探索を遮断する補助制約条件の導入などでモデルを改善し、Gurobiプログラムによって最適化を完了した。
- 305手 → 271.67手 → 218手と上限を段階的に絞り込んだ
- 代表的な12個の218手可能局面だけが到達可能であることを確認した
- これらの局面は、証明ゲーム(proof game)によって無理なく到達可能な合法局面であることも証明された
また、プロモーションなしの最大144手、非合法局面での最大288手、到達不能な合法局面での271手という記録も検証を完了した。
結果と意義
- この研究結果により、チェスエンジン開発者や圧縮アルゴリズム研究者は、メモリ設計などで256手制限で十分だと確信できる
- 合法的な経路で218手以上を指せる局面は存在しないことが数学的に証明された
FAQ要約
- チェスの対局自体は218手より長くなりうるが、本研究が扱うのは「1ターンで可能な選択肢」の最大数である
- 一部の局面が到達不能に見えるとしても、直前の手が取りで終わる場合など複数の経路があると述べている
- この研究手法は、膨大な組み合わせ空間において「絶対に不可能な組み合わせ」を素早くふるい落とす数学的オラクルの手法を適用している
- 使用したコードと導出された証拠の数学的妥当性まで公開し、信頼性を確保した
今後の課題と追加研究の提案
この手法を応用すれば、「最多捕獲手数」「最多ステイルメイト」「最多チェック」「最多チェックメイト」「最多2手メイト」など、さまざまなチェス問題に挑戦できる。ただし、一部のケースでは別個の創造的な最適化アルゴリズムが必要になる可能性がある。
結論
- 218手が、チェス局面において1ターンで指せる最大の公式手数である
- 実用面では、チェスソフトウェアや研究者は218(または256)に合わせて構造を設計できる
- 関連コードと最適化結果はGitHubで公開されている
参考
- Nenad Petrovićの218手局面、Jenő Bánの144手(プロモーションなし)など、証明ゲームと局面へのリンクを含む
- 詳細な説明とコードはGithubリポジトリで確認できる
1件のコメント
Hacker Newsのコメント
Lichessでは960やCrazyhouseのような変則チェスのプレーレベルはChess.comよりずっと高い
文字どおりばかげているほど素晴らしい。可能なら寄付を勧める
興味深いことに、混合整数線形計画法(MILP)ソルバーはすでにこうした処理をサポートしている。専門用語では 'row generation' と呼ばれ、通常はこの問題を行列形式で書いたときに、行が制約条件、列が変数であることからそう呼ばれる
(動的に)新しい行を追加することは、違反が起きた場合にだけ制約条件を導入するのと同じだ
この方法は主に巡回セールスマン問題(Traveling Salesman Problem)の解法で使われる
(ちなみにWikipediaには Column generation はあるが row generation はない)
チェスルールを緩和したり省略したりすることは、変数選択にも影響しました。数理モデリングに入る前に、lazy constraints のようなものも試しましたが、有意な速度改善はありませんでした。たとえば白のキングがチェックされているかどうかを考慮しないだけでも、多くの単純化が起きました
(前提として、Gurobiにバグがなく、著者の問題定義と実装にもバグがないとする)
Gurobiが局所最適に陥っている可能性があるのか、それとも本当に大域的最適解であることを証明したのかが気になる
Gurobiと私のコードが意図どおりに動作し、チェスモデルの簡略化の過程に論理的誤りがなかったなら、私の結果は「初期局面から合法な手順で到達可能なチェス局面における合法手数の最大値について、上界も下界も218である」ことを証明したことになる。つまりGurobiが探索空間全体について、これ以上良いものはないと境界によって立証したわけだ
計算の観点では、問題空間全体のほうが重要だ。合法かどうかを判定する前に、まず全部を「計算」しなければならないからだ。合法な局面だけを単純に列挙する方法はない
知人からの連絡で、私の記事がここで議論されていることを知りました
分かりにくいタイトルを付けてしまってすみません。今はもう明確になっているとよいのですが。フィードバックと温かい言葉に感謝します
この手のチェスに関する事実の証明について、ほかにも質問があればお答えできます ^^
ありがとうございます
Tobi
更新: 記事では到達可能なチェス局面は約8.7x10^45個あるとされており、https://github.com/lechmazur/ChessCounter はこれを上界としている
(これは約153ビットに相当する)
ただし効率よくデコードするには、ChessPositionRankingプロジェクトが推奨する数値(8726713169886222032347729969256422370854716254)の log2 の切り上げ値として153ビットが必要になる。ChessCounterは効率的なデコードコードを提供していない
ルーク/クイーン/ナイトも同様だが、チェスでは取られている可能性があるので、各5個の駒ごとに計65状態が必要だ
ビショップはその半分の色のマスにしか行けないので、それぞれ33状態
ポーンは4種類のプロモーション、取られた状態、さらに状況によるがだいたい20〜30ほどの位置候補があるので、全体としてポーン1個あたり約290状態になる
これで片方の色の駒配置を表すのに約112ビット、丸めると両側合わせて224ビット必要になる
アンパッサン(En Passant)やキャスリング制約(キャスリング不可など)は、丸め方次第では追加ビットなしで、各駒に数状態加えるだけで済む
これがおそらく固定長の盤面表現としては最も圧縮された形だ
疎な表現なら、2つのキングは常に存在するので、生き残っている駒を n 桁の10進数と n+2 個の64ビット数で位置表現し、キャスリングやアンパッサンなどは少し追加情報が必要になる。駒の半分程度が消えている平均的な場合、盤面状態の表現には約180ビットかかる
手の履歴も1手あたり約10ビット必要(黒白1組、1 ply は5ビット)なので、18手程度までなら持てる。これは平均的なチェスの対局長の中間点よりやや短い
さらに圧縮するには、とてつもなく大きな辞書を実装する必要がありそうだ
だから盤面全体を固定長でエンコードするなら 644=256ビット=32バイトだ
あるいは駒だけの可変長表現なら、各64マスのインデックスを6ビットとして、駒数10ビットになる
たとえば初期配置は 32*10=320ビット=40バイトだ
5.68e50 の "general" が真の上界で、あらゆる可能な昇格を許している
そのポーンにはたった1つの手(隣のナイトを取ること)しかない。もしそのポーンがなければ、4つの白クイーンとナイトがb2に入れる。だが実際には黒キングはすでにチェックメイトなので、そのような手は実際には存在しえない
e5のクイーンを別の場所に置いて即座にチェックメイトにならないようにしつつ、b2マスをもっと開放したくなる
追記: そのポーンはステイルメイトを防ぐためにそこに生き残っていなければならない気がする
黒番だとしても、e5の白クイーンによってキングがピンされているので、やはり動けない。もしピンされていなければ4通り動ける。アンダープロモーションも可能だ
この局面は White to move です。たとえb2のポーンが白クイーンによってキングをピンしていなかったとしても、黒ポーンは動けません
b2のポーンは、黒キングをチェックから守るために絶対に必要です。そうでなければ局面自体が合法ではありません
すべて本当に入念に確認したので安心してください。白の手数を218超にしようとする試みは不可能でした。それでも多くの方が私の記事に関心を持ってくれて驚き、感謝しています、はは ^^
黒ポーンの1つを白ナイトに変えて手数を増やせそうだが、すでにナイトは2枚ともあり、すべてのポーンが昇格済みなので不可能だ。(両方のポーンを変えると、黒が前の手でこの状態に到達することが不可能になる)
記事全体を読みましたか?
271ではなく 271.666... です :) この値は、すべての決定(0か1か)を連続値(0.0〜1.0やその間の値)に緩和したモデルから出ています。つまり、ある駒が0.23個存在すると仮定できるわけです。ある手を指せる確率も0.843のように扱えます。
こうした一種の「ブラックマジック」を使うと計算がずっと速くなり、実際より多い手数を出せます。
そのため、この方法を使えば、見込みのない部分空間を素早く排除できます。こういうテクニックがなければ、探索空間全体を総当たりするのは不可能です
ちなみに、黒ポーンが開始位置にあると誤解しているようだが、実際には黒ポーンは盤の反対側まで進んでいる(白陣側)