ドミニオン CPU のここまで(2026年10月)
いつも CPU と対戦してくれてありがとうございます。集まった棋譜は、CPU の弱点探しにそのまま使っています。 この記事では、9月の終わりにサイトを公開してから今日までに CPU がどう変わったか、何がうまくいって何がうまくいかなかったかをまとめます。
1. 最初の CPU と、限界
最初の CPU は、カードごとに「どれくらい良いか」の点数を手で決め、それに条件分岐を足して打つものでした。 はっきりした弱点が2つありました。
- カードの強さは王国の組み合わせで変わる。 村がある王国の鍛冶屋と、村がない王国の鍛冶屋は別物です。カードに固定の点数をつける方式では、これを表せません。
- 盤面ごとの細かい判断ができない。 属州をあえて買わない、シャッフルすると損なのであえて引かない、といった判断です。
そこで、囲碁の AlphaZero と同じように、自分どうしで大量に対戦して覚える方式に作り替えました。 CPU は「この局面はどれくらい有利か」「次にどの手が良さそうか」を返す小さなニューラルネットを持ちます。それを使って、手番ごとに数百〜千通りの先読みをして手を決めます。
2. 今の CPU のしくみ
ネットは2つ
CPU は小さなニューラルネットを2つ持っています。
| ネット | 役目 | 大きさ |
|---|---|---|
| 方策ネット | 「次にどの手が良さそうか」の見当をつける | 約6万パラメータ |
| 価値ネット | 「この局面でどちらがどれくらい勝ちそうか」を見積もる | 約17万パラメータ(幅128、残差ブロック2つ) |
囲碁や将棋の強い AI と比べると、ずっと小さいネットです。ブラウザの中で、1手ごとに千回近く読むため、この大きさに抑えています。 大きくすれば強くなるとは限らないことも、実験でわかっています。
- 価値ネットは、古い小さな版(約5万)から今の大きさにしたときにははっきり強くなりました。さらに倍の幅にすると、手持ちのデータの量では覚えすぎてしまい(過学習)、強くなりませんでした。
- 方策ネットは、大きくして予測の精度が上がっても、対局の強さには出ませんでした。先読みが、多少の見当違いを補ってしまうためと考えています。
- 王国専門の CPU の知識を写すとき(5章)にも、方策・価値の両方を大きくしたネットを試しました。写していない王国の穴は、やはり閉じませんでした。
ネットが見ているもの
局面は、カードの置き場所ごとに「どのカードが何枚あるか」として読みます。置き場所は9つです。
- 自分の手札・山札(中身だけで、順番は知らない)・捨て札・場
- 相手の持っているカード全体と、相手の捨て札
- サプライの残り、この対戦の王国カード10種
- 選択中のカード(礼拝堂で廃棄するカードを選んでいる途中など)
ほかに、残りのアクション・購入・コイン、手番数、点差なども読みます。
カードは名前ではなく、「似たカードは似た数値になる」ように学習した特徴(埋め込み)で表します。 こうすると、王国の組み合わせが変わっても、カードどうしの関係を使い回せます。 また、どの置き場所も「並び順に関係なく、何が何枚あるか」として読むので、手札が何枚でも、王国がどんな組み合わせでも同じネットで扱えます。
手の決め方
人間と同じく、CPU にも相手の手札や自分の山札の順番は見えません。そこで、1手ごとに次のことを約1000回くり返します(サイトの CPU の設定)。
- 見えていない部分(山札の順番、相手の手札)を、ありうる形の1つに仮に決める
- 方策ネットの見当をもとに有望な手を選び、今の手番から次の自分の手番までを先読みする。相手の手番は、相手の立場で方策ネットに打たせる
- 読み終えた局面を価値ネットで評価する
最後に、全体として一番勝ちやすかった手を選びます。 候補の手は、最初は方策ネットが有望とみた16手から始めて、読みながら半分ずつに絞ります(Gumbel 方式)。 候補どうしは同じ「仮の山札」で比べるので、引き運の差で判断がぶれにくくなっています。 財宝を場に出すことと、選択肢が1つしかない決定以外は、すべて先読みで決めています。
先読みを1000回から4000回に増やしても、強さはほとんど変わりませんでした。今の弱点は読みの量ではなく、ネットの局面の見積もり(とくに、王国ごとの細かい違い)にあると考えています。
練習のしかた
CPU どうしで1世代あたり1万〜2万数千局ほど対戦し、そのたびに次のように学び直します。
- 方策ネットは「先読みした結果、選ばれた手」を覚える
- 価値ネットは「その局面から実際に勝ったか」と、先読みでの見積もりを半々に混ぜて覚える
これを何十世代もくり返しています。計算は、自宅の Windows 機(16スレッド)と、小さなサーバー機(8スレッド)の CPU だけで行っています。 王国専門の CPU も、汎用の CPU と同じ大きさのネットを、その王国だけの対戦で、合わせて数千〜2万局ほど鍛えたものです(ほとんどの王国は 1世代1000局 × 6世代で、手元の機械で約10分)。
3. 自分どうしの対戦では頭打ちになった(9月末)
9月27日に公開した版(社内の名前は azg42)は、私(作者)との対局で CPU が約7割を取るところまで来ました。 ただ、そこから先は、ネットを大きくしても、先読みを4倍にしても、CPU どうしの対戦ではまったく強くなりませんでした。
自分どうしで打ち続けると、お互いに同じ打ち方に落ち着いてしまいます。そうなると「その打ち方の相手にどう勝つか」しか学べません。 本当に目指しているのは、誰がどんな打ち方で来ても崩されにくい CPU です。特定の人の癖を突いて勝つ CPU は目指していません。
4. 穴を探して、ふさぐ
そこで、強さの測り方を「CPU どうしの勝率」から「わざと崩しにくる相手に負け越さないか」に変えました。
- 穴が見つかった。 まっさらな状態から別に育てた CPU が、ある王国(礼拝堂・宰相・工房・庭園・民兵・改築・山賊・市場・魔女・職人)で庭園ラッシュを組みました。この打ち方に、公開版が 39% しか取れませんでした。公開版は庭園を取り合わないので、置いていかれていたのです。
- ふさいだ。 練習相手にその CPU を混ぜて学び直し、10月2日の版(azl16)で、強さを落とさずにこの穴を閉じました。
- 人間との対局から探す。 皆さんとの対局で CPU が負けた王国を、1つずつ調べ直しました。
5. 王国専門の CPU と、わかったこと(10月)
次に「その王国だけで練習した CPU」を作ってみました。サイトの CPU の種類にある 「王国専門」 がこれです。
- 王国を1つに絞って練習させると、10分ほどで、汎用の CPU にその王国では 6〜7割勝つようになります。
- 皆さんに負けた王国やランダムな王国で調べると、ほとんどの王国にこういう差がありました。汎用の CPU の穴は、一部の王国だけでなく広くあるということです。
- 王国専門の CPU の知識を汎用の CPU にまとめて写す方法も試しました。写した王国の穴は閉じますが、写していない王国には広がりません。20王国でも、40王国でも、200王国でも同じでした。
- 戦略の「型」(エンジンが足りない、圧縮が足りない、エンジンを組みすぎ、など)や、カードが8枚同じ近い王国で代用できないかも試しました。どれも届きませんでした。
- 一方で、使わないカード(死にカード)を入れ替えても、専門の CPU はほぼ同じ強さを保ちます。生きたカードが1枚違うだけで、強さは大きく落ちます。
- 最新の調査(10月16日)では、「家臣・衛兵」のように数枚で戦略が決まる王国では、汎用の CPU も正しく打てていました。穴は、数枚のカードではなく王国全体の組み合わせで戦略が決まるところにあるようです。
まとめると、ドミニオンの戦略は王国の細部に強く結びついていて、汎用の CPU が全王国を一度に覚えるのは難しい、というのが今の見立てです。
6. 今の公開版
| 種類 | 中身 |
|---|---|
| 通常の CPU | azp5(10月7日〜)。穴の見つかった王国を重点的に学び直した版で、全体の強さは azl16 と同じ |
| 王国専門 | 866王国(推奨セット、汎用の穴が大きいと予想した王国など)。その王国だけで練習した CPU |
王国専門の「ランダム」では、専門の CPU が使わないカードを死にカードに0〜2枚入れ替えた王国も出ます。入れ替えても強さが変わらないことは確かめてあります。
7. これから / お願い
方針は「よく遊ばれる王国を、王国専門の CPU で埋めていく」です。
- 王国専門の CPU とぜひ対戦してみてください。 専門の CPU に勝てた打ち方は、CPU の盲点の手がかりになるので特に助かります。
- 「この王国で CPU が変な手を打った」という報告も歓迎です。
勝率は、とくに断りがなければ CPU どうしで数百局打った結果です。