お久しぶりです。今日は Tokyo Doves とはまた別のダイソーのボドゲについてお話しします。
- 今回のテーマ
- ざっくり概観
- 単純にカウント
- 対称性を考える
- 対称性を加味して改めてカウント
- 対称性を加味してざっくりカウント
- 結果の吟味
- 追記 (2023/12/19)
今回のテーマ
今回取り扱うのは、こちらの記事でも紹介されている、「セカンドベスト」というボードゲームです。
bodoge-nya.hatenablog.com
何度か遊んでみていますが、シンプルながら先を読み通すのが難しい、非常によくできたゲームだなという感想を持っています。
楽しいゲームを見つけると、ついつい「完全解析したい・・・!」と思うのは自然な考えかなと思います。え?思わない?私は思います。
今回は解析に先立って、このゲームの可能局面数をおおよそ見積もってみることを考えてみます。
ざっくり概観
一定程度慣れた状態でルールに従ってゲームを進めていくと、概ね以下のような流れになります:
- 黒と白が交互に石を置いていく
- それぞれの手持ちの8個の石をすべて置いた状態になる
- 石を動かしていく
- ある瞬間に唐突にゲームが終了する
このゲームの進行上現れる各局面は、少なくとも次を満たすことが分かります。
- (黒を先手番として) 黒石は白石と同数か、または1個多い
- ボード上に置かれている石の数は0個以上16個以下
- 同じポジションに重なっている石の数は0個以上3個以下
- 同色の石は区別しない
この条件を満たすものをすべて数え上げれば、可能局面数の悪くない上界を与えるだろうと予想します。まずはこれを数えてみましょう。
単純にカウント
各ポジションに 1~8 と番号を付け、各ポジションに置かれる石の数を とします。このとき
という条件を満たすことが分かります。この への値の割り振り方 (=石の色を区別しない配置の総数) は
の の係数 (ただし )
となります。この値を とします。
白石の個数は なので*1、各々の割り振り方に対する石の並べ方は
となります*2。よって、求めたい総数は
で求まります。
各々の項を気合で計算すると、以下のような結果になります:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
1 | 8 | 36 | 120 | 322 | 728 | 1428 | 2472 | 3823 | 5328 | 6728 | 7728 | 8092 | 7728 | 6728 | 5328 | 3823 | |
1 | 1 | 2 | 3 | 6 | 10 | 20 | 35 | 70 | 126 | 252 | 462 | 924 | 1716 | 3432 | 6435 | 12870 | |
1 | 8 | 72 | 360 | 1932 | 7280 | 28560 | 86520 | 267610 | 671328 | 1695456 | 3570336 | 7477008 | 13261248 | 23090496 | 34285680 | 49202010 |
一番下の段の総和を求めると 133,645,905 となります。ハトのボドゲと比べると*3、この時点でもかなり少ないですね。
対称性を考える
さて、実際に解析を行う際は、ルール上区別されない全く同じ局面は同一視することを考えます。例えば以下のいずれかを満たすような局面のペアは同じものと考えてよさそうです。
- ポジションをひとつずらして一致する局面のペア
- ある対称軸に対してポジションを入れ替えると一致する局面のペア
このように対称性を課した際の個数を数えるときに便利なのが、以下のバーンサイドの補題です*4。
ja.wikipedia.org
主張だけ抜き出すと、以下の通りです。
群 が集合 に作用しているとする。各 に対し、 で不変な の元全体の集合を とする。このとき以下が成り立つ:
今回のケースに適用するなら、群 は「ポジションを1つ分となりに回転させる」と「ポジションをある対称軸について反転させる」で生成される変換の群になります。これはちょうど正8角形の二面体群と同型になります (したがって )。また はまさに前節で計算した場合全体に対応します。対称性を加味して省いた局面数は に対応するので、そのままこの補題が使えることが分かります。
対称性を加味して改めてカウント
群 の元は以下の6種類に分類されます:
(a) 単位元 (ポジションを変えないもの):1個
(b) ポジションを180°回転させるもの:1個
(c) ポジションを90°回転させるもの (時計回り・反時計回り):2個
(d) ポジションを45° または 135°回転させるもの (時計回り・反時計まわり):4個
(e) ポジションを通らない対称軸で反転させるもの:4個
(f) 二つのポジションを通る対称軸で反転させるもの:4個
ここで、同じ分類に属す については は共通です(証明は省きます)。よって各分類に対して を数えればよさそうです。
以下では数が比較的多い の場合について数えてみることにします*5。
s=16 のケース
白黒共に8個ずつボードに置かれている局面です。
(a) 単位元
(対称性を課さないケースで計算済み)
(b) ポジションを180°回転させるもの
この変換で対象な割り振り方は () を満たすもので、この総数は
の の係数
となります。各割り振り方への白石の割り当て方は
通り
なので となります。
(c) ポジションを90°回転させるもの (時計回り・反時計回り)
この変換で対象な割り振り方は () を満たすもので、この総数は
の の係数
となります。各割り振り方への白石の割り当て方は
通り
なので となります。
(d) ポジションを45° または 135°回転させるもの (時計回り・反時計まわり)
この変換で対象な割り振り方は を満たすもので、これは1通りです。各割り振り方への白石の割り当て方は
通り
なので となります。
(e) ポジションを通らない対称軸で反転させるもの
この変換で対象な割り振り方は (番号を適当に付け替えて) () を満たすもので、この総数は
の の係数
となります。各割り振り方への白石の割り当て方は
通り
なので となります。
(f) 二つのポジションを通る対称軸で反転させるもの
この変換で対象な割り振り方は (番号を適当に付け替えて) () を満たすもので、この総数は
の の係数
となります。ここで は の割り振り、もう一方は残りの割り振りに対応します。
ただ、このケースは割り振り方によって白石の割り当て方に違いが出てきます。
対称軸の通るポジションに置かれる石の総数を , それ以外を とすると、 となります。これを用いると、白石の割り当て方は
通り
となります*6。各 の組み合わせに対応する値は以下の通りです。
70 | 70 | 150 | 310 |
さて
(その他の項)
となり、各項がそれぞれ に対応する割り振りを表していることを考えれば
の の係数
となります。
総計
以上の計算をまとめると
となります。
s=15 のケース
黒石が8個、白石が7個ボードに置かれている局面です。
(a) 単位元
(対称性を課さないケースで計算済み)
(b) ポジションを180°回転させるもの
いずれかの石の数が奇数の場合、この対称性を持つ配置はありません。
(c) ポジションを90°回転させるもの (時計回り・反時計回り)
いずれかの石の数が4の倍数でない場合、この対称性を持つ配置はありません。
(d) ポジションを45° または 135°回転させるもの (時計回り・反時計まわり)
いずれかの石の数が8の倍数でない場合、この対称性を持つ配置はありません。
(e) ポジションを通らない対称軸で反転させるもの
いずれかの石の数が奇数の場合、この対称性を持つ配置はありません。
(f) 二つのポジションを通る対称軸で反転させるもの
の場合と同じ記法を用いると、今回は なので
35 | 75 | 155 |
となります。さて
(その他の項)
となり、各項がそれぞれ に対応する割り振りを表していることを考えれば
の の係数
となります。
総計
以上の計算をまとめると
となります。
対称性を加味してざっくりカウント
の場合について説明してきましたが、きっちり計算するのはそこそこ面倒くさいことが分かります。ただよく計算内容を観察してみると、ほぼほぼ (a) の数値÷16になっていることがわかります。(a) の数値はすなわち対称性を加味せずカウントした数に他なりません。なので、ざっくり考えれば、対称性を課したカウントは、対称性を課さない数値を16で割れば大体外さないでしょう。この値は
となります。
結果の吟味
対称性を加味した上ですべての局面を保存するのにどれぐらいの保存容量が必要か考えてみます。仮にひとつの局面を保存するのに4バイト必要だと考えると*7、おおよそ32MBあれば十分であることが分かります。これぐらいであればそのへんのノートPCでも余裕でメモリに乗る範囲でしょう。ハトの解析で必要になって128GBのメモリを積んだ身としては、全然楽勝そうだなと思えます。
気が向いたら、このボドゲも解析したいと思います。
追記 (2023/12/19)
プログラムを使って実際にカウントしてみました。
(石の総数)⇒(パターン数) と表記しています。
0 => 1 1 => 1 2 => 6 3 => 27 4 => 139 5 => 478 6 => 1826 7 => 5487 8 => 16933 9 => 42192 10 => 106332 11 => 223700 12 => 468444 13 => 829912 14 => 1444680 15 => 2144640 16 => 3078229 Total = 8363027
*1: は 以下の最大の整数を表します。
*2:石の場所はすべて区別されます。ポジションに加えて、何段目かという情報が加わるので、 個の場所はすべて別物として考えられます。
*3:【Tokyo Doves】実現可能局面数をざっくり見積もってみる - ぷりんの雑記帳
*4:京都大学数学作問サークルのしゃかやみさん https://twitter.com/shakayami_ に教えてもらいました。ありがとうございます!
*5:実は (f) 以外は自然に一般化できます。(f) だけは少々面倒くさいです。
*6:ゲームのルールから なので であり, が未定義になることはありません。
*7:対称性を考慮しないパターンは より小さいので、素朴には各局面は4バイトぐらいあれば表現できそうです。