AIカードゲーム対戦シミュレーターの作り方――12,480戦して「ロイヤル最強!」になった時に疑うべきもの

カードゲームのAI対戦シミュレーターを作ると、最初にやりたくなるのが「とにかく大量に回す」だ。100戦より1,000戦、1,000戦より10,000戦。数字が大きいと急に研究っぽくなる。白衣を着ていなくてもCSVがあれば研究者の顔ができる。

読書機能の使い方

聴く:本文を読み上げます。速読:語句を順に表示し、速さを調整できます。語学練習:別の言語版と対訳を読み比べます。保存:このブラウザーにブックマークし、プレイヤーの保存済み一覧から開けます。

この記事をシェア
広告
広告

1. 12,480戦やれば賢くなる? ならない。間違いの精度が上がることもある

カードゲームのAI対戦シミュレーターを作ると、最初にやりたくなるのが「とにかく大量に回す」だ。100戦より1,000戦、1,000戦より10,000戦。数字が大きいと急に研究っぽくなる。白衣を着ていなくてもCSVがあれば研究者の顔ができる。

しかし、ここに最大の罠がある。AIの判断が間違っているなら、大量試行は“間違ったAIの平均値”を高精度で求めているだけだ。

実際のケースでは、固定ルールエンジンで12,480戦を回し、ルール監査自体は良好だったのに、ロイヤル約79.8%、ウィッチ約25.6%という極端な数字が出た。これは「ロイヤルが現実でも勝率8割」という意味ではない。むしろ「シミュレーターのプレイ方策に癖があるぞ」という警報だった。

つまり最初の原則はこれ。

対戦回数を増やす前に、CPUがちゃんとカードゲームをしているか確認しろ。

2. シミュレーターは1個のAIではない。「ルール」「判断」「採点」を分ける

AIカードゲームシミュレーターは、ひと塊の「賢いAI」ではない。最低でも次の3層に分けて考える。

  1. ルールエンジン: その行動が合法か、ダメージはいくつか、進化できるか、対象を取れるかを決める。
  2. プレイ方策: 合法な行動の中から、どれを選ぶかを決める。
  3. 評価器: そのデッキや方策が本当に良かったかを採点する。

ここをごちゃ混ぜにすると、「カード処理のバグなのか」「AIが下手なのか」「評価方法が悪いのか」が分からなくなる。

ルールが100%正しくても、AIがコンボ札を全部その場で吐けば負ける。AIが上手くても、先攻だけ多く引けば勝率は歪む。評価が雑なら、平均勝率だけ高い“特定対面で即死するデッキ”を最強認定してしまう。

だから設計では、合法性・意思決定・評価を別テストにする。

3. まずルールエンジンを作る。「賢さ」より先に「世界の物理法則」

対戦AIより先に必要なのは、ゲーム世界そのものだ。

最低限、デッキ枚数、同名枚数制限、クラス制限、PP、ドロー、マリガン、盤面上限、攻撃、守護、疾走・突進、進化・超進化、対象選択、生成カード、トークン、特殊能力、勝敗条件を機械が一貫して処理できなければならない。

ここで大切なのは「だいたい動く」ではなく、カードごとに実装状態を持つことだ。

  • Full: 完全対応
  • Partial: 一部だけ対応
  • Unsupported: 未対応
  • Runtime gap: 実戦で例外が発生

未対応カードが入ったデッキを無理に回して「勝率57.3%!」と出すくらいなら、計算を止めて“このカードが未対応”と返す方が100倍マシだ。

シミュレーターに必要なのは自信ではなく、停止できる勇気である。

4. プレイAIは「今強い行動」だけでは足りない

カードゲームの難しさは、今の盤面だけ見ても答えが出ないところにある。

AIが評価すべきなのは、たとえば次のようなものだ。

  • 今の盤面価値
  • 手札価値
  • 次の1~3ターンの展開
  • リーサル確率
  • キーカードを残す価値
  • 進化権・超進化権を残す価値
  • 相手が次ターンに持っていそうな返し
  • 手札上限で燃えるリスク
  • 盤面を埋めすぎるリスク
  • 代替勝ち筋

「使えるカードを使う」「一番攻撃力が高いカードを出す」「顔を殴れるなら顔を殴る」だけなら、速いデッキではそこそこ戦えてしまう。しかしコンボ、コントロール、リソース管理系デッキでは急激に壊れる。

これが後述する“ロイヤル脳筋AI事件”につながる。

5. 人間の攻略知識はハードコードではなく「ヒント」にする

AIを強くしたいからといって、攻略記事を丸ごとif文にすると別の地獄が始まる。

「3ターン目は必ずこのカード」「この対面では絶対この札を残す」と固定すると、環境や盤面が少し変わっただけでAIが融通の利かない攻略本botになる。

そこで、人間の知識は優先度・加点・減点として入れる。

例:

  • この対面では全体除去を少し高く評価
  • このコンボ札は早切りを減点
  • 進化権を特定ターンまで残す価値を加点
  • 相手の強い返しターン直前は盤面展開を少し抑える
  • 2~3ターン後にリーサルがあるなら現在の盤面点より未来価値を上げる

さらに攻略情報には、パック、フォーマット、リーダー、アーキタイプ、対面、先後、ターン帯、出典日、信頼度を付ける。意見が割れたら潰して1個にせず、複数の方策候補として残す。

人間の知恵をAIに入れる目的は、「人間の言うことを絶対守れ」ではない。探索する方向を少し賢くすることだ。

6. 公平なA/Bテストは「同じ問題」を解かせる

旧AIと新AIを比べるなら、カードの引きが違ってはいけない。

旧AIが事故手札、新AIが神引きなら、新AIが強く見えるのは当たり前だ。そこで使うのが乱数seedである。

同じseedを使えば、基本的に同じランダム条件を再現できる。さらに先攻・後攻も入れ替える。

seed 001: 旧AI先攻 / 新AI後攻
seed 001: 新AI先攻 / 旧AI後攻
seed 002: 旧AI先攻 / 新AI後攻
seed 002: 新AI先攻 / 旧AI後攻
...

こうすると「新AIが勝った」の理由を、運ではなく判断の差に近づけられる。

同時に、勝率だけでなく次も記録する。

  • リーサル見逃し
  • 手札焼却
  • 盤面詰まり
  • 進化権の無駄遣い
  • キーカード早切り
  • マリガン不一致
  • 相手の強い返しターンの見逃し

勝ったけどプレイはアホだったを検出するためである。

7. 2,016戦は聖なる数字ではない。ただの掛け算である

「なぜ2,016戦?」に神秘はない。

今回のA/B計画では、たとえば次のようなテスト予算から作られた。

56個の対面テスト条件
× 18個のseed
× 2回の先後反転ペア
= 2,016戦

重要なのは2,016という数字ではなく、何をどれだけ網羅したいかを先に決め、その結果として試合数が出ることだ。

だから実運用では段階を分ける方がいい。

  • quick: 数十~数百戦。壊れていないか確認
  • standard: 約2,000戦。方策A/Bや主要対面比較
  • full: 10,000戦以上。環境全体の安定評価

いきなりfullを回して、あとでAIがアホだと判明すると、GPUもCPUも電気代も「お疲れ様でした」で終わる。

8. 最強デッキ探索は「40枚を全部総当たり」ではなく、候補を賢く増やす

40枚デッキの全組み合わせを総当たりするのは現実的ではない。そこで、まず現実の強い構築や大会デッキを種にする。

そこから、

  • 1枚交換
  • 2枚交換
  • 3枚交換
  • 採用枚数の変更
  • 同じ役割のカードへの差し替え
  • 対特定デッキ用テック
  • パッケージ単位の入れ替え

を生成し、シミュレーションで評価する。

評価も平均勝率だけでは足りない。

総合点 = 平均勝率 + 下振れ耐性 + 先後安定性 + 苦手対面の底上げ

たとえば全体平均62%でも、ある人気対面に20%しか勝てないなら環境次第で即死する。平均58%でも最低対面が45%なら、実戦では後者の方が使いやすい場合がある。

だから出力は「宇宙で絶対最強の40枚」ではなく、“このカードDB・このAI方策・このメタ比率・この候補集合の中で最も良かった40枚”と表現する。

科学に必要なのは盛ることではなく、条件を書くことだ。

9. 診断機能は「勝率○%」より、なぜそう動くかを返す

本当に便利なのは、勝率表だけではない。

ユーザーが自分の40枚を入れたら、相手リーダーやアーキタイプごとに次を返せると強い。

  • 推定勝率と不確実性
  • 先攻・後攻差
  • マリガンで残す札、返す札、条件付きキープ
  • 序盤・中盤・終盤の目標
  • 主要勝ち筋
  • 温存すべきカード
  • 除去優先順位
  • 進化権・超進化権を使う目安
  • 相手の次ターンの強い返し
  • 2~3ターン先のリーサル候補
  • よくあるミス
  • 代替ルート
  • 差し替え候補

つまり「このデッキ弱いです」で終わらず、どこで負けているのかを診断する。

AIコーチとして価値が出るのはここである。

10. ロイヤル79.8%事件――“出して殴る”がAIにも優しかった説

今回いちばん面白い失敗がこれだ。

固定AIで大量対戦したところ、ロイヤルが異様に強く、ウィッチが異様に弱かった。

ここで考えられる仮説が、単純なデッキほど未熟なAIでも扱いやすいというもの。

ロイヤル側が、

フォロワー出す!
盤面取る!
顔が空いた!
殴る!
勝った!

でそこそこ成立する一方、ウィッチ側が、

コンボ札? 今使える! 使用!
進化権? 今強くなる! 使用!
手札上限? 知らん!
3ターン後? 未来の俺が何とかする!

をやっていたら、そりゃロイヤルが王になる。

この現象は「ロイヤルが本当に環境最強」という証拠ではなく、AIの認知負荷にデッキごとの差があることを示す。

だからシミュレーション結果が現実と大きくズレた時は、デッキを疑う前に、

  • 長期計画が必要なデッキだけ弱くなっていないか
  • コンボ札のhold価値を理解しているか
  • 進化権を未来に残せるか
  • 手札と盤面の空きを管理できるか
  • 相手の返しを予測できるか

を見るべきだ。

大量対戦で得た最高の成果が「このAI、ロイヤル脳筋プレイだけ得意では?」という発見でも、それは失敗ではない。壊れている場所が分かった時点で研究は前進している。

11. 環境が変わってもすぐ回せる形にする――完成形は「研究所」

最終的に目指すのは、特定パック専用の一発ネタではない。

現行ローテーションを1つのEnvironmentとして保存する。

Environment 8
- card snapshot
- legal card pool
- engine version
- policy version
- meta decks
- human knowledge
- simulation results

新パックが来たらEnvironment 9を作り、差分を取る。

  • 新カード
  • ローテ落ち
  • 能力変更
  • 禁止・制限
  • 新アーキタイプ
  • エンジン対応差分
  • メタ比率変化

そして影響がある部分だけ再計算する。

メタ比率だけ変わったなら既存対戦表を再集計。新カードが入ったデッキは再シミュレーション。ルール未対応カードがあれば昇格を止める。新弾直後は理論構築、実戦データが集まったら観測メタに更新する。

完成した流れはこうだ。

公式カードDB
    ↓
合法カード集合を固定
    ↓
大会・公開デッキを候補化
    ↓
人間知識を方策ヒントに変換
    ↓
CPU同士で公平な大量対戦
    ↓
40枚を少しずつ改良
    ↓
全対面を再評価
    ↓
勝率 + 下振れ + ミス診断
    ↓
GitHubに環境スナップショットとして保存
    ↓
新弾は差分だけ更新

AIカードゲームシミュレーター作りで一番大事なのは、強そうな数字を出すことではない。

「その数字は、どのルール、どのAI、どのカードDB、どのseed、どの環境で出たのか」を全部追えること。

10,000戦回すことより、1戦を再現できること。最強と叫ぶことより、条件を書くこと。AIを賢いことにするより、AIがアホな時にちゃんとバレること。

そしてロイヤルが80%近く勝っていたら、一度だけ疑ってほしい。

「こいつ、出して殴るだけのゲームだと思ってない?」


PRこのテーマの本を探す

この記事には広告(アフィリエイトリンク)が含まれます。 広告について Amazonのアソシエイトとして、mendoi-appsは適格販売により収入を得ています。

広告

今日これ読んで

この記事を読んだ人の次の疑問に、それぞれ答える記事です。

すべての記事から探す「カード・ボードゲーム」の記事をもっと見る

他の記事を探す

すべての記事

めんどいちゃん

この記事を書いた人

めんどいちゃん

仕事や日常の「めんどい」を構造化して、次に動きやすくする記事を書いています。

このサイトについて
広告

新着記事

  1. 1『氷の城壁』『氷の城壁』小雪は冷たいんじゃないの。中で味噌が発酵してるのよ――「分かるわお姉さん」と読む反芻・脳内予想・境界線
  2. 2面接で「圧が強い人がいても大丈夫?」を3回聞かれたら、もう会社説明になってない?
  3. 350年住宅ローンは「家を安くする魔法」ではない――借金ゲーム・金利上昇・金融庁の監視を小学生でも分かるように解剖する
  4. 4『ラヴ上等』『ラヴ上等2』、恋愛に24時間SLAを持ち込むな――Awichは全部知ってる、たいちゃんの耳はHPゲージ、最後はモモンガが「よこせッ!」
  5. 5『ちいかわ』装備:モモンガ、属性:六角堂帰り――人類は他人の「設定資料集」を勝手に書く
広告