ベネディクト・シャンチー:先手が78%勝つ、その理由はたった一手
要点
- ベネディクト・シャンチーは、ベネディクト・チェスのルールをシャンチー(中国象棋)の盤に載せたもの。駒を取ることはなく、動かした駒が利かせている敵の駒はすべて自分のものになる。
- 終盤が存在せず、砲は決して弱くならず、引き分けもない。エンジン54局でもランダム6,000局でも一度も出なかった。合法手の約28%はその場で負けになる。
- 先手の勝率は78%、シャンチーの約55%に対して。そのほぼすべてがひとつの序盤、すなわち砲を5段目か6段目へ上げる手による。
- パイルールがこれを是正する。黒は1手目の後に紅の局面を引き継ぐことができ、これにより紅はほぼ互角の4つの序盤へ追いやられる。紅に必勝手順があるかは未解決で、13手(片側の一手)以内には存在しない。
ベネディクト・チェスには駒取りがない。駒を動かすと、移動先からその駒が利かせている敵の駒はすべて色を変えて自分側に付く。敵のキングを寝返らせれば勝ちだ。W. D. Troyka が2002年に発表し、陣営を変えたベネディクト・アーノルドにちなんで名付けた。
調べた限り、このルールをシャンチー(中国象棋)の盤に載せた人はいない。Chess Variant Pages は7,383のゲームを索引しているが、シャンチー盤の43項目と変換系の十数項目は互いに交わらない。Ludii の2,330ゲームや Fairy-Stockfish の変種一覧も同じことを示す。惜しい例は挙げておく価値がある。ほとんどが蝶番ひとつ分の違いだからだ。Desertion Chess は駒に利かせるのではなく隣に動くことで変換し、駒取りも残している。Andernach は取られた側ではなく取った側を裏返す。Cleopatra Chess は Troyka 自身のルールを1種類の駒に限定したものだ。そしてシャンチー自身の裏返し系である盤棋や掲棋(ジエチー)は、駒を裏返して何の駒かを明かすもので、誰のものかを変えることとはまったく別物である。
シャンチーには砲台越しに取る砲があり、九宮の9点に閉じ込められた将があり、河(楚河漢界)を越えられない象がある。だから移植は機械的にはいかない。既定の答えがない4つの設計判断を迫られた。
次にエンジンを作り、その結果が公平かどうかを調べた。公平ではなかった。先手は78%の勝率で、通常のシャンチーの約55%に対して高い。そのほぼすべては1手目に指せる砲の一手に帰着する。これは単に偏っているだけのゲームよりはるかに修正しやすい問題だ。
ルール
駒を動かす。着地点からその駒が利かせている敵の駒はすべて自分側に付く。
早めに気づくべき点がひとつ。すでに利いているだけでは何も起きない。変換するのは動いた駒だけなので、すでに何かに利いている車も、取るにはもう一度動かなければならない。脅威は動くことで作られ、待つことでは作られない。
遊んでみる
両陣営ともあなたの操作で、背後にエンジンはない。この記事のすべての図が検証されているのと同じルールカーネルで動いているので、記事が非合法と述べている手は許容しない。
盤の下のカウントは、この記事が繰り返し立ち返る数字だ。ゼロから始まり、そのままではいられない。
シャンチーに何が起きるか
終盤が永遠に来ない。 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がその場で負ける。
ゲームを設計する
将帥対面は依然として禁止。 シャンチーは2つの将が間に何もない同じ縦列に立つことを禁じており、私はそれを残した。代替案は将帥対面を勝利条件にすることで、聞こえは良いが破綻する。ベネディクトでは「動いた」駒だけが数えられるので、線を空けるのは勝ちにならず、結局2つの将が向き合ったまま対局が続き、どちらかが将を縦列に沿って1歩動かして勝ちを主張することになる。
禁止を残しても何の代償もなく、シャンチーにはないものがひとつ生まれる。将の縦列でピンされた駒は力ずくでは取り除けない。ここでは何も取り除かれないからだ。変換しても解放されない。変換はその場で色を変えるだけだからだ。駒を手に入れても動かせないままになる。その駒を解放できるのは将が縦列から外れることだけなので、ピンはピンしている側が自分の将をそこに置き続ける限り続く。
士と象は所有者ではなく、自分が立っている領域に縛られる。 変換された士は敵の九宮の中にいるので、所有者に縛るルールでは永久に凍りつく。死んだ駒であり退屈なルールだ。立っている九宮に縛れば、そのまま働き続ける。初期配置では2つの解釈は同一だ。どの士もすでに自陣の九宮にいるからだ。だから一般化は無償で、死んだ駒を攻め駒に変える。
兵は所有者に縛られる。こちらは逆の判断だ。 兵の前進方向は現在の所有者に従わなければならない。さもないと変換された兵は自陣から永遠に離れて進んでしまう。この2つを逆にするのが、ゲームを静かに壊すバグだ。
引き分けには無取り手数制限が要る。 駒取りがないので、ほぼすべての手が可逆だ。三回同一局面だけでは足りないので、不可逆な事象2つ、すなわち変換と兵の移動でカウンタをリセットする。
検証する
既存のエンジンではこれを指せない。Pikafish、Fairy-Stockfish、そして私自身の霧エンジンもすべて駒取りルールを組み込んでおり、Fairy-Stockfish の唯一の変換機構(flipEnclosedPieces)は打ち込みで囲まれた駒をリバーシ式に裏返すもので、別のルールだ。
そこで、置換表、主要変化探索、後期手の削減、変換に対する静止探索を備えた Rust のアルファベータエンジンを作った。シャンチーの駒の価値を持ち込む代わりに、自己対局2,500局の結果へのロジスティック回帰で当てはめたところ、手作業で選んだ値との直接対決に勝った。
当てはめた数値は引用しない。以前の草稿では引用し、それを駒の価値の測定値として読んでいたが、相関のある8,000局面へのロジスティック回帰が支えられる以上のことだった。データの4分の1での初期の当てはめでは、後に符号が反転した係数がいくつもあった。残るのはそれが支持した順序、すなわちここでは士と象がほぼ無価値だという点だけで、これは回帰を要しない。守るべきものが何もないことから導かれるからだ。
ルールカーネルは連鎖的に検証してある。後に狂ったものはすべてルールではなく測定のほうだったので、この点は重要だ。JavaScript の試作は、私が以前から使っているシャンチーライブラリ elephantops と差分テストし、駒の幾何比較720,947件で不一致ゼロだった。Rust エンジンはそのカーネルの着手数を1億1,300万局面まで完全に再現する。TypeScript 移植版は両者を再現する。
3つの結果はその後のあらゆる変更を通じて保たれた。どれもエンジンの判断に依存しないからだ。
| 検証 | 結果 |
|---|---|
| ランダム対ランダム、6,000局 | 先手 50.1%、引き分け0 |
| 初期配置からの削減なし証明探索、208億ノード | 13手(片側の一手)以内に必勝手順なし |
| その場で負けになる合法手の割合 | 平均28%、中央値10%、1,696手(片側の一手)での集計 |
この3つはエンジンを変えても動かない。だから勝率より信頼している。
このエンジンはゲームを判定できるほど強いのか。 毎秒約160万局面を探索し、数秒で探索深さ8か9に達する。成熟したチェスエンジンには遠く及ばない。及ぶ必要はない。
上の3つの結果は、棋力にまったく依存しない。ひとつはランダム着手の対照群、ひとつは証明、ひとつは合法手の数え上げだ。証明については正確に言う価値がある。通常の探索では証明できないからだ。このエンジンは後期手の削減を使い、後のほうの手を浅く探索するので、勝ちを見つけられなかった通常探索は「すべてを見ていない」ことしか示さない。削減と静止探索を切り、詰みの閾値で是か非かとして問えば証明になる。それが上の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段目へ上げる手だ。まったく得点しない3つは、象、端への馬、そして将が中央を一歩上がる手である。
紅の初手の価値はゼロから92%まで幅があり、42手のうち3手は24局すべてを落とす。だから78%は「このゲームではテンポが78%の価値を持つ」ではない。「エンジンが常にその唯一の強い序盤を見つける」である。
シャンチーの砲は自分と標的の間にちょうど1枚の駒を必要とする。黒の初期配置はその駒を、正しい位置に、無償で用意している。この脅威が存在するのは、シャンチーの初期配置がたまたまベネディクトのルールが利用できる場所にあるからだ。
指したすべての対局
最強設定の54局すべて、選別なし。先手はそのうち46局を勝ち、落とした8局こそ開いてみる価値がある。
対局は誰かが大悪手を指して終わるのではない。一方が負けにならない手を切らして終わる。そしてその手数は、盤上に何か見える変化が起こる20手(片側の一手)前から増え続けている。
パイルールで公平にする
42通りの序盤にまたがるこの散らばりこそが挽回可能性を生み、そして修正法は他のゲームにすでに存在する。
パイルールは、2人の子どもがケーキを分けるやり方と同じだ。一方が切り、他方が選ぶ。紅が初手を指す。次に黒は、そのまま黒として続けるか、代わりに紅の局面を引き継ぐかを選ぶ。この選択肢ひとつで紅が最適化する対象が変わる。最強の序盤を指しても、黒がそれをそのまま取れるなら無意味だからだ。
だから紅は互角に最も近い手へ押しやられ、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の初手に分割され、答えが「なし」であるからこそほぼ完全に並列化できる。必勝手順がないので、どの枝も他を打ち切らず、同時に探索しても何も失わない。それでノートPC1台から13が得られた。2手(片側の一手)深く分割すれば約1,700の独立ジョブになり、これはクラスタが欲しい形だ。そして一様に深く探索する代わりに証明木の最も狭い部分に労力を割く証明数探索は、まったく実装していない。これは仮定の話ではない。アンチチェスが解かれたのはこの方法だ。Mark Watkins は16コアのマシン8台で5年以上にわたり証明数探索を走らせ、1.e3 が白の勝ちであることを示した。これは必要な技法であると同時に、やり遂げる費用についての正当な警告でもある。
誰かが弱解、あるいは私が思いつかない議論による超弱解にたどり着けば、パイルールの問題も片付く。証明済みの先手勝ちこそ、スワップが発明された当のケースだからだ。ヘックスはどの盤サイズでも証明済みの先手勝ちで、それでも競技として指されている。