ベネディクト・シャンチー(中国象棋):先手が78%勝つ、その原因はたった一手
ベネディクト・チェスには駒取りがない。駒を動かすと、その新しいマスから利きが通っている敵駒はすべて色が変わり、自分の側につく。敵のキングを転向させれば勝ちだ。W. D. Troyka が2002年に発表し、寝返った人物であるベネディクト・アーノルドにちなんで名付けた。
調べた限り、このルールをシャンチー(中国象棋)の盤上に載せた人はいなかった。Chess Variant Pages は7,383のゲームを収録しているが、シャンチー盤を使う43件と転向系の十数件は互いに交わらない集合であり、Ludii の2,330ゲームや Fairy-Stockfish のバリアント一覧も同様だ。惜しい例は名前を挙げておく価値がある。その多くは蝶番一つ分しか離れていないからだ。Desertion Chess は利きではなく駒の隣に動くことで転向させ、駒取りも残している。Andernach は取られた駒ではなく取った駒の色を変える。Cleopatra Chess は Troyka 自身のルールを1種類の駒に限定したものだ。そしてシャンチー自身の裏返し系ゲームである闇棋(banqi)や掲棋(jieqi)は、駒を裏返して正体を明かすもので、所有者を変えることとはまったく別物である。
シャンチーには障害駒を越えて取る砲があり、九宮の9点に閉じ込められた将があり、河(楚河漢界)を越えられない象がある。だから移植は機械的に済むはずがなかった。既定の答えがない4つの設計判断を突きつけられた。
そのうえで、結果が公平かどうかを調べるエンジンを作った。公平ではない。先手は78%の対局に勝つ。通常のシャンチーでは約55%だ。そのほぼすべては初手で指せる砲の一手に集約される。単に偏っているだけのゲームよりも、これはずっと修正しやすい問題だ。
ルール
駒を動かす。着地点から利きの通る敵駒はすべて自分の側につく。
早い段階で気づくべき点が一つある。据え置きの利きは何もしない。転向させるのは動いた駒だけなので、すでに何かに当たっている車も、取るにはもう一度動かねばならない。脅威は動くことで作られ、待つことでは決して作られない。
遊んでみる
両陣営ともあなたの手番で、背後にエンジンはない。この記事のすべての図が検証に用いているのと同じルールカーネルで動くので、記事が非合法と書いた手を許すことはない。
盤の下のカウントは、この記事が何度も立ち返る数字だ。0から始まり、そのままではいられない。
シャンチーに何が起きるか
終盤が、永遠に来ない。 32枚すべてが対局中ずっと盤上に残る。簡単化も交換もなく、状態空間が縮まらないのでテーブルベースは原理的に不可能だ。シャンチー理論の大半を占める終盤理論は、まったく転用できない。
砲が衰えなくなる。 シャンチーの砲は取るために障害駒を必要とするので、盤が空くにつれて弱くなる。ここでは盤が空くことがなく、砲は80手目でも3手目と同じだけ危険だ。フィッティングした値も一致する。砲は657と出た。シャンチーの駒価値表では450前後とされるところで、車の900に近く、扱い方が変わる。
士と象が何も守らなくなる。 彼らは駒取りに備えて存在するが、駒取りがない。線を止めたり砲台になったりはするので無用ではないが、本来の設計目的はすべて失われる。
対局は短く、誰も引き分けない。 中央値29手、シャンチーの80〜100手に対して。最強設定の54局で引き分けは一つもなく、完全ランダムな指し手による6,000局でも一つもなかった。こちらの方が主張としては強い。強い指し手が引き分けを避けているのではなく、局面が決着以外に行き場を持たないのだ。交換する駒も削り合う終盤もないゲームは、息切れしようがない。
合法手の約28%が即座に負ける。 これは以下の対局の1,696手にわたる平均だが、平均は典型的な局面ではないので正確に述べる価値がある。局面の中央値では負ける手は10%で、平均値はごく一部の非常に激しい局面に引き上げられている。平均は対局の最初の5分の1での24%から最後の5分の1では37%へと上がりもする。起きないのは、駒組みできる静かな序盤の段階だ。最初の5分の1でさえ、全手の4分の1が即負けになる。
ゲームを設計する
将帥対面は依然として禁止。 シャンチーは両将が間に何もない同じ縦列に並ぶことを禁じており、これは残した。代わりに将帥対面を勝利条件にする手もあり、聞こえはいいが壊れる。ベネディクトでは動いた駒だけが数えられるので、縦列を開けても勝ちにならず、結果として両将が向かい合ったまま対局が続き、どちらかが将を縦列上に一歩動かして勝ちを主張するまで終わらない。
禁止を残すのは何の代償もなく、シャンチーにないものを一つ生む。両将の縦列上でピンされた駒は力で除去できない。ここでは何も除去されないからだ。転向させても解放されない。転向はその場で色を変えるだけだからだ。駒を得ても、それを動かせないままになる。解放するのは将が縦列から外れることだけなので、ピンはピンしている側が自分の将をそこに置き続ける限り持続する。
士と象は、所有者ではなく自分が立っている領域に束縛される。 転向した士は敵の九宮の内側にいる。所有者に束縛されるルールではそこに永久に凍結され、死んだ駒とつまらないルールになる。立っている九宮に束縛されるなら、そのまま働き続ける。初期配置ではこの二つの解釈は同一だ。どの士もすでに自陣の九宮に立っているからで、一般化しても代償はなく、死んだ駒を攻め駒に変える。
兵は所有者に束縛される。こちらは逆の判断だ。 兵の前進方向は現在の所有者に従わなければならない。さもなければ転向した兵は自陣から永遠に離れて進むことになる。この二つを逆にするのが、静かにゲームを壊すバグだ。
引き分けには進展カウンタが必要。 駒取りがないので、ほとんどの手が可逆だ。同一局面3回では単独では足りないので、不可逆な二つの事象、すなわち転向と兵の移動でカウンタをリセットする。
検証する
既存のエンジンではこれを指せない。Pikafish、Fairy-Stockfish、そして自作の霧エンジンはいずれも駒取りルールを組み込んでおり、Fairy-Stockfish の唯一の転向機構(flipEnclosedPieces)はドロップで囲まれた駒をリバーシ式に反転させるもので、別のルールだ。
そこで、置換表、主要変化探索、レイトムーブリダクション、転向についての静止探索を備えた Rust の alpha-beta エンジンを書いた。シャンチーの駒価値を持ち込むのではなく、2,500局の自己対戦の結果にロジスティック回帰をかけて値をフィッティングし、これが手で選んだ値との直接対戦に勝った。
フィッティングした数値は引用しない。以前の草稿では引用し、駒の価値の測定値として読んでいたが、相関のある8,000局面へのロジスティック回帰が支えられる以上のことだった。データの4分の1で行った初期のフィットでは、いくつかの係数の符号が後に反転した。残るのはそれが同意した順序、すなわちここでは士と象がほぼ無価値だということで、それは回帰を必要としない。守るべきものがないことから導かれるからだ。
ルールカーネルは連鎖的に検証されている。後に間違ったのはすべて測定側であってルールではなかったので、これは重要だ。JavaScript のプロトタイプは、すでに使っているシャンチーライブラリ elephantops に対して720,947件の駒の幾何比較で差分テストされ、不一致は0だった。Rust エンジンはそのカーネルの着手数を1億1,300万局面まで正確に再現する。TypeScript 移植版は両方を再現する。
3つの結果は以降のあらゆる変更を通じて維持された。どれもエンジンの判断に依存しないからだ。
| テスト | 結果 |
|---|---|
| ランダム対ランダム、6,000局 | 先手 50.1%、引き分け0 |
| 初期配置からの無削減の証明探索、208億ノード | 13手以内に強制勝ちなし |
| 即座に負ける合法手の割合 | 1,696手にわたり平均28%、中央値10% |
この3つはエンジンが変わっても動かない。だから勝率よりも信頼している。
このエンジンはゲームを評価できるほど強いのか。 毎秒約160万局面を探索し、数秒で深さ8か9に達する。成熟したチェスエンジンには遠く及ばない。及ぶ必要もない。
上の3つの結果は棋力にまったく依存しない。一つはランダム手の対照実験、一つは証明、一つは合法手の数え上げだ。証明については正確に述べる価値がある。通常の探索では証明にならないからだ。このエンジンはレイトムーブリダクションを使い、後続の手を浅く探索するので、勝ちが見つからなかった通常の探索は「すべてを見たわけではない」ことしか示さない。リダクションと静止探索を切り、詰み閾値でのyes/noとして問えば証明になる。それが上の13手の意味だ。そして78%については、ここで重要な性質、すなわちエンジンが強くなったときに動くかどうかを確認した。ほとんど動かない。1手30万ノードで77.8%、200万ノードで75.4%。7倍の幅に対して、標本誤差は両方向に数ポイントある。
エンジン強度をまたいだ安定性が私の信頼するテストだが、それ単独では足りない。この測定の以前の版は6手のランダム定跡で対局に変化をつけ、52.7%を得て、同じ10倍の幅にわたる3つのエンジン強度で維持された。安定していたのは、その定跡がまさに測定対象のテンポを使い果たしていたからだ。ランダムな6手はどちらのエンジンが指す前に優位を投げ捨てるので、下にあるゲームがどうであれ結果は互角へ流れる。壊れた温度計はどの部屋でも室温を示す。上の78%は定跡を使わず、代わりに評価値のジッターから変化を得ている。
計算資源を増やして得られるものは限定的で、かなり明確だ。ビットボードと着手順序の改善で深さ12〜14に届く。深い戦術や本物の序盤理論について何か言う前に、そこには居たい。学習評価は高価な選択肢で、おそらく誤った選択だ。他のバリアントでの以前の2度の試みはいずれも置き換えるはずだった手作り評価に届かず飽和し、どちらの失敗も金の問題ではなかった。
というわけでこの記事はクラブ級の強さで見たゲームを記述している。残した主張は、どの強さでも成り立つものだ。
エンジン、カーネル、テストハーネスは数千行の Rust と TypeScript で、54局と序盤の全表とともに GitHub の github.com/brianhliou/benedict-xiangqi にある。この記事のすべての数字は cargo run から出てくる。
砲の一手が決める
先手は78%の対局に勝つ。初期配置からオンポリシーで、序盤定跡なし、両色が交互に先手を取って測定した。1手30万ノードで紅先手は80.5%、黒先手は75.0%(各100局)。200万ノードでは82.5%と68.3%(各60局)。どちらの向きもどちらの予算でも互角を大きく上回るので、優位は色ではなくテンポに従っている。だからこれは私のコードについてではなくゲームについての事実だ。高い予算では紅の方が組み合わせの良い側に見えるが、60局では誤差が約12ポイントあるので、まだ何も読み取らない。
次に紅の42通りの合法初手をすべて個別に測定すると、診断の形が変わった。
42通りの合法初手すべて、各24局、紅のその後の成績で並べた。
| 手 | 紅の成績 | 手 | 紅の成績 | 手 | 紅の成績 | ||
|---|---|---|---|---|---|---|---|
| c1a3 | 0.0% | h1g3 | 25.0% | a4a5 | 41.7% | ||
| e1e2 | 0.0% | a1a3 | 27.1% | g4g5 | 43.8% | ||
| g1i3 | 0.0% | b3b2 | 27.1% | b3b4 | 45.8% | ||
| b3a3 | 4.2% | h3h2 | 29.2% | b3b7 | 50.0% | ||
| b3c3 | 8.3% | b3d3 | 29.2% | d1e2 | 54.2% | ||
| h1i3 | 12.5% | i4i5 | 29.2% | e4e5 | 54.2% | ||
| h3f3 | 16.7% | b3f3 | 33.3% | a1a2 | 58.3% | ||
| b3g3 | 18.8% | b1a3 | 35.4% | h3h7 | 60.4% | ||
| h3c3 | 20.8% | c1e3 | 35.4% | h3h4 | 60.4% | ||
| i1i2 | 20.8% | b3e3 | 35.4% | b3b6 | 70.8% | ||
| h3g3 | 22.9% | c4c5 | 35.4% | f1e2 | 72.9% | ||
| i1i3 | 25.0% | h3e3 | 37.5% | h3h5 | 79.2% | ||
| h3i3 | 25.0% | h3d3 | 39.6% | b3b5 | 87.5% | ||
| g1e3 | 25.0% | b1c3 | 41.7% | h3h6 | 91.7% |
最良の2つは同じ発想で、砲を5段目または6段目に上げる手だ。成績が0の3つは、象、辺への馬、そして中央を一歩上がる将である。
紅の初手の価値は0から92%まで幅があり、42手のうち3手は24局すべてを丸ごと負ける。だから78%は「このゲームではテンポが78%の価値を持つ」ではない。「エンジンはいつでも唯一の強い序盤を見つける」なのだ。
シャンチーの砲は自分と標的の間に駒がちょうど1枚必要だ。黒の初期配置は、その駒を、正しい位置に、無償で用意している。シャンチーの初期配置がたまたまベネディクトのルールに使える位置にあるために、この脅威が存在する。
指したすべての対局
最強設定の54局すべて、選別なし。先手が46局を勝ち、負けた8局こそ開いてみる価値がある。
対局は誰かが悪手を指して終わるのではない。一方が負けにならない手を切らして終わるのであり、その数は盤上に何か見えるものが現れる20手ほど前から上がり続けている。
パイルールで公平にする
42通りの序盤の散らばりこそがこれを回復可能にしており、その修正は他のゲームにすでに存在する。
パイルールは、子ども二人がケーキを分けるやり方と同じだ。一方が切り、他方が選ぶ。紅が初手を指す。次に黒は、黒として続けるか、代わりに紅の局面を引き取るかを選ぶ。この一つの選択肢が紅の最適化対象を変える。黒が単に取れるのなら、最強の序盤を指す意味がなくなるからだ。
そこで紅は互角に最も近い手へ押される。42手のうち4手がそこに位置する。2つは砲が自分の最良のマスを見送る手で、残りの2つは盤上で最も静かな駒組みの手だ。
砲が1歩進むだけで、効き目のある第5列には遠く及ばない。
砲が一気に踏み込み、ここで清算して、残しておけた脅威を手放す。
士が上がり、d1を空ける。将の筋は1手目から勝負に絡んでいる。
中央の兵、失着にならない唯一の静かな駒組みの手。
そのどれかを強いられれば、対局は50%付近に落ち着く。優位を減衰させるのではなく、紅が優位を使う能力を取り除くことによってであり、これは聞こえよりもきれいな修復だ。ヘックスはどの盤サイズでも先手勝ちが証明されているが、世界中で競技として指されている。それはひとえにスワップのおかげだ。
正直な留保は標本だ。この4つの数字はそれぞれ24局から出ている。互いに順位づけしたくはない程度に広く、0%から83%への散らばりが本物だと言える程度に狭い。そのどれかが適切な標本の下で50%付近を保つことを確認するのが、今後の課題だ。
パイルールは激しさに触れずに公平性を直す。負ける手の割合はルールの性質であって誰が優勢かの性質ではないので、まったく動かない。勝負は互角になる。穏やかにはならないし、それが人が遊びたいゲームかどうかは、勝率からは答えられない別の問題だ。
現状
競技ゲームとして出荷できる状態ではない。先手が4局に3局勝つのでは、レーティング制のラダーは成り立たない。
これは似て聞こえる主張と切り分けるべきだ。不公平は遊べないことを意味しない。ルーズチェスは先手勝ちが証明済みでありながら毎日競技として指されている。証明には5年と8台のマシンを要し、人間には見つからない変化を進むからだ。ヘックスはどの盤サイズでも先手勝ちが証明されており、スワップの後ろで指されている。先手の優位だけでゲームが死ぬわけではない。
ここで違うのは深さだ。この78%は、一文で言える一手、砲を5段目に上げる、に乗っており、エンジンは毎回それを見つける。証明されていても到達できない勝ちは好奇の対象だ。暗記できる勝ちはゲームそのものになってしまう。
パイルールの他に、未検証の修復が2つある。将を転向させる代わりに印を付け、守備側に応手を1手与えれば、砲の脅威を直接鈍らせる。攻めている駒を転向させるのはすでに合法な応手だ。あるいは初期配置の中央の兵を動かす。この脅威は黒の兵が砲の必要とする砲台の位置に立っているからこそ存在するのだから。
どちらにしても残るのは設計だ。シャンチー盤上の転向は、終盤のないゲーム、決して弱らない砲、無価値な守備駒、そして敵陣の奥に永久に取り残される転向した士を生む。これは測定のどの版を通じても保たれた。ルールは4通り別々に検証した唯一の部分だったからだ。
次は1テンポルールだ。カーネルに20行、そしてすでに存在するハーネスの再実行だけだ。
残る問いは、紅に強制勝ちがあるかだ。 上のすべては勝率であり、特定の2つのエンジンについての言明だ。その下にある問いは、最善手の下でこのゲームが先手勝ちかどうかで、そちらの答えは何がどれだけ上手く指すかに依存しない。
手元にあるのは下限だ。13手以内に強制勝ちはなく、208億ノードと約30分で証明した。安直な勝ちは排除できるが、長さの中央値が29手のゲームでは、これでようやく半分ほどしか探索していない。
見た目より難しくする要素が2つ、易しくする要素が1つある。駒は保存されるので状態空間は縮まらない。つまり構築すべき終盤データベースはなく、前進探索が中間で出会う相手もいない。解決済みのチェス終盤すべての背後にある技法である後退解析は、単に高価なのではなく原理的に使えない。対称な初期配置から超弱解を得る通常の手段である戦略盗用も適用できない。駒は蓄積されるのではなく移動するので、先手が任意の手を指してそれを捨てることができないからだ。助けになるのは対局が短いことだ。中央値は29手で、54局のエンジン対局にも6,000局のランダム対局にも引き分けはなかった。木は浅く鋭く終端的で、これは証明数探索が得意とする形だ。
次の段は14で、そのてこはハードウェアの追加ではない。上の証明は紅の42通りの初手に分割され、ほぼ完全に並列化できる。それはまさに答えが「なし」だからだ。強制勝ちがなければどの枝も他を打ち切らないので、同時に探索しても失うものがない。それでラップトップ1台から13が得られた。2手深く分割すれば約1,700の独立ジョブになり、これはクラスタを求める形だ。そして一様に深く探索する代わりに証明木の最も狭い部分に労力を注ぐ証明数探索は、まったく実装していない。最後の点は仮定の話ではない。ルーズチェスはそうやって解かれた。Mark Watkins は16コアのマシン8台で5年以上にわたって証明数探索を走らせ、1.e3 が白の勝ちであることを示した。これは必要な技法そのものであり、この仕事をやり切る代償についての正当な警告でもある。
誰かが弱解、あるいは私の思いつかない論法で超弱解にまで到達すれば、パイルールの問題も決着する。先手勝ちが証明されている場合こそ、スワップが発明された場面そのものだからだ。ヘックスはどの盤サイズでも先手勝ちが証明されていて、それでも競技として指されている。