行動提案AI 開発まとめ(Qiita連載総集編)
本記事は、Qiita に投稿してきた一連の記事を 1 本で俯瞰できる総集編です。
対象は、
- プレイ画面(動画)を入力とし
- 状態を推定し
- 次の行動候補を提案する AI
を、実データ・実装ベースで構築する試みです。
※ 版権配慮のため、ゲーム固有名詞は極力一般化しています。
全体像
この連載で一貫して扱っているテーマは、次の流れです。
- 画面から状態をどう読み取るか
- 人間の判断をどう分解・構造化するか
- 学習データをどう作るか
- 評価と限界をどう理解するか
- 実運用(人間操作前提)でどう設計するか
以下では、各記事の位置づけと要点を整理します。
① 画像認識で「状態」を作る
対象記事
- 画面解析・ROI 設計
- UI 要素(手札・リソースバー・盤面)の切り出し
要点
-
ゲーム AI では 内部状態が取得できない前提が現実的
-
そのため、
- 画面全体を CNN に投げるのではなく
- 意味のある領域(ROI)を人間が定義する
-
手札スロット・リソース量・盤面といった
**「人間が見て判断している情報」**を優先的に抽出
👉 認識精度よりも「意味の正しさ」を優先する設計思想
② 行動空間の定義(なにを予測するのか)
対象記事
- 行動 ID 設計
- 「出す/待つ/場所」の分解
要点
- 行動を単純な「カードID予測」にしない
- 人間の操作手順に合わせて
(1) 行動タイプ
(2) 使用対象(スロット)
(3) 配置位置(グリッド)
に分解
-
出せない行動を mask することで
- 破綻した提案を減らす
- 学習を安定させる
👉 AI に自由を与えすぎないことが重要
③ 学習データは「どう作るか」が一番難しい
対象記事
- 動画 + イベントログからのデータ生成
- 人手ラベリングと自動化の境界
要点
-
最大のボトルネックは 教師データ作成
-
完全自動は困難なので、
- 人間が押したタイミング
- 画面差分
- UI 状態
を組み合わせて半自動化
- 「正解ラベル」よりも
**「この状況で人はこうした」**という記録を重視
👉 教師データは事実であって、最適解ではない
④ 評価指標:Accuracy はほぼ意味がない
対象記事
- ベースライン
- F1 / Recall / 混同行列
要点
-
行動提案は クラス不均衡が極端
-
Accuracy が高くても
- 何も出さないだけ
- よくある行動しか出さない
ことが起きる
-
そのため
- most-frequent baseline
- random baseline
と比較し、
- Recall(出すべき時に出せているか)
- 混同行列(どこで迷っているか)
を見る
👉 「数字が良い=賢い」ではない
⑤ 人間が使う前提の AI 設計
対象記事
- 先読み提案
- 待ち行動(WAIT)の扱い
要点
- 本 AI は 自動操作しない
- 人間が見て、操作する
→ つまり
-
1フレーム先の正解を出しても意味がない
-
0.5〜1 秒先の提案が必要
-
また
- 出せないときは「待つ」
- WAIT も立派な行動
として明示的に扱う
👉 実運用を考えない AI は使われない
⑥ なぜ「強い AI」を目指していないのか
立ち位置
-
目的は
- 最強プレイヤー AI ではなく
- 判断補助・可視化
-
人間の思考を
- 分解し
- 記録し
- 再利用できる形にする
こと自体に価値がある
👉 「勝つ AI」より「理解できる AI」
まとめ
この連載を通して伝えたかったのは、
-
ゲーム AI は
- 強化学習以前に
- 状態設計とデータ設計が 9 割
という点です。
派手さはありませんが、
- 画面を見る
- 人間の判断を分解する
- 壊れない提案を作る
という地道な工程こそが、
実際に動く AIにつながります。
次に読むなら
- 個別実装の記事(手札認識・行動 mask)
- 学習ループ改善(人間プレイとの反復)
- デッキ構築や長期戦略への拡張
今後も、実装ベースで掘り下げていく予定です。
関連記事
- https://qiita.com/y4o4/items/051e0fb8552272723943
- https://qiita.com/y4o4/items/54322210927721cb98c5
- https://qiita.com/y4o4/items/f9cb895e4e3164a9a9c3
- https://qiita.com/y4o4/items/a68163ca6c7f5cfe2596
- https://qiita.com/y4o4/items/46ed7ae6b2873dcf2f9c
- https://qiita.com/y4o4/items/0f01afce38cd7b1daf3e
- https://qiita.com/y4o4/items/8d9c091622fc6b4a5299
- https://qiita.com/y4o4/items/8338f79e414a966a1753