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層に分けて考える。
- ルールエンジン: その行動が合法か、ダメージはいくつか、進化できるか、対象を取れるかを決める。
- プレイ方策: 合法な行動の中から、どれを選ぶかを決める。
- 評価器: そのデッキや方策が本当に良かったかを採点する。
ここをごちゃ混ぜにすると、「カード処理のバグなのか」「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%近く勝っていたら、一度だけ疑ってほしい。
「こいつ、出して殴るだけのゲームだと思ってない?」
