Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「AIにゲームを学習させる環境」の導入から安定運用までの学び【DeNA TechCon 2022】

「AIにゲームを学習させる環境」の導入から安定運用までの学び【DeNA TechCon 2022】

近年においてゲームはリリースして終わりではなく、リリース後も数年に渡って運用を行うケースが増えています。その中では運用年数に比例して増えるキャラクターやスキルのバランス調整や、ゲームの改修に伴って発生する不具合の事前検知などの課題に対して、AIを用いて解決する手法の研究や報告が活発です。

DeNAでもこれらの課題を解決するため、シミュレータを用いた「AIにゲームを学習させる環境」を開発、運用しています。

ゲームの開発初期からこのような「AIにゲームを学習させる環境」を開発し活用するには、ゲーム開発チームにAI導入の提案を行い、AIを用いた開発推進のための体制を構築し、シミュレータの安定的な運用を行うための設計・実装を行う必要があります。

本発表では、この「提案」や「体制構築」、「設計・実装」をどのように行ってきたか紹介しつつ、実際にやってみて「良かったノウハウ」「悪かったノウハウ」をお話します。

資料内でのリンク集:
p.8-1, https://cedec.cesa.or.jp/2021/session/detail/s6051bc8b8d6ee
P8-2,p56, https://cedec.cesa.or.jp/2020/session/detail/s5e7d8eee81142.html

◆ You Tube
https://youtu.be/jY4Kl1_cb1Q

◆ You Tube チャンネル登録はこちら↓
https://youtube.com/c/denatech?sub_confirmation=1

◆ Twitter
https://twitter.com/DeNAxTech

◆ DeNA Engineering
https://engineering.dena.com/

◆ DeNA Engineer Blog
https://engineering.dena.com/blog/

◆ DeNA TechCon 2022 公式サイト
https://techcon2022.dena.dev/spring/

8a84268593355816432ceaf78777d585?s=128

DeNA_Tech
PRO

March 17, 2022
Tweet

More Decks by DeNA_Tech

Other Decks in Technology

Transcript

  1. 「AIにゲームを学習させる環境」 の導入から安定運用までの学び 茂手木 新之介

  2. 目次 • 第1章:登壇者紹介 • 第2章:導入 • 第3章:AIによるゲームの学習 • 第4章:実践~エンジニアリング編~ ◦

    第1節:「AIにゲームを学習させる環境」における機構・機能 ◦ 第2節:「AIにゲームを学習させる環境」における設計・実装 • 第5章:実践~プロジェクト推進編~ ◦ 第1節:「AIにゲームを学習させる環境」の更なる活用 ◦ 第2節:ゲームドメインとAIドメインの接合点 • 第6章:総括
  3. 第1章 登壇者紹介

  4. 登壇者紹介 茂手木 新之介 • 2017年度新卒入社 • ソーシャルゲームの新機能開発や運用を担当 • 2020年よりAI推進グループに籍を置き 複数タイトル案件でAI導入のための

    シミュレータ開発などを行う もてぎ しんのすけ
  5. 第2章 導入

  6. 近年においてゲームはリリースして終わりではなく, リリース後も数年に渡って運用を行うケースが増えている. 特にソーシャルゲームなどのタイトルでは数年に渡って運用するのが一般的であり, 長年運用を続けていくと,スキル・キャラクター・装備などが増えていき, それらの組み合わせは膨大なものになる. ゲーム開発が抱える課題

  7. ゲームにおいて難易度などのゲームバランスはゲームの面白さを左右する重要な観点である. このバランスを正しく保つことがゲームのユーザ体験や品質の向上に繋がる. しかし,長年運用を続けていくと スキル・キャラクター・装備 などの組み合わせが増えていき, 人間の力のみで全てを把握して適切な難易度にゲームバランスを調整する のが難しくなってしまう. ゲームのデバッグやQAも,同様に長年運用を続けた結果として, 複雑になったソースコードや実装の組み合わせに問題が無いかを 人間が全てチェックするのは難しく,効率的な手段が求められている.

    ゲーム開発が抱える課題
  8. これらの, 運用年数に比例してコンテンツの組み合わせ数が増えてしまい, 人間の力のみで全てを把握してバランスを取ることやチェックすることが難しい という課題に対して,人間の代わりにAIにゲームをプレイさせる研究が活発になっており, ゲームバランスの調整やデバッグにAIを用いた報告が年々増えている. AIを用いた解決

  9. では「AIにゲームをプレイ」させるためには何をすればよいのか? 人の代わりにAIにゲームをプレイさせるためには, 人の目や手の変わりにAIが操作できるような機構を追加し, AIにゲームを学習させる必要がある. AIを用いた解決

  10. まとめ ゲームバランスはゲームのユーザ体験や品質の向上に繋がる重要な要素だが, 運用年数に比例して増えていくコンテンツの組み合わせ数に対して, 人間の力のみで全てを把握してバランスを取ることやチェックすることは難しい. そこでゲームに人の目や手の変わりにAIが操作できるような機構を追加し, AIにゲームを学習させた上で, AIに人間以上のパフォーマンスでゲームをプレイさせることで, これらの課題にアプローチする研究が増えている. AIを用いた解決

  11. 第3章 AIによるゲームの学習

  12. AIによる学習とは? ここでいうAIによる学習とは,ゲームにおいて, 「〇〇な状況で」「××したら」「△△になった」 というような因果関係を伴う一連の事象を 膨大なパターン数で試行し,結果を評価・解釈することを言う

  13. AIによる学習とは? ここでいうAIによる学習とは,ゲームにおいて, 「〇〇な状況で」「××したら」「△△になった」 というような因果関係を伴う一連の事象を 膨大なパターン数で試行し,結果を評価・解釈することを言う

  14. AIによる学習とは? ここでいうAIによる学習とは,ゲームにおいて, 「〇〇な状況で」「××したら」「△△になった」 というような因果関係を伴う一連の事象を 膨大なパターン数で試行し,結果を評価・解釈することを言う

  15. AIによる学習とは? ここでいうAIによる学習とは,ゲームにおいて, 「〇〇な状況で」「××したら」「△△になった」 というような因果関係を伴う一連の事象を 膨大なパターン数で試行し, 結果を評価・解釈することを言う

  16. AIによる学習とは? では,ゲームにおける 「〇〇な状況で」「××したら」「△△になった」 という 「因果関係を伴う一連の事象を膨大なパターン数で試行し,結果を評価・解釈学習できる」 環境とは一体どんな環境だろうか?

  17. AIが学習できる環境とは? 人間の場合は?

  18. AIが学習できる環境とは? 画面に映る情報から 状況や結果を認識 コントローラなどの UIを用いて状況を操作

  19. AIが学習できる環境とは? AIの場合は?

  20. AIが学習できる環境とは? 画面に映る情報から 状況や結果を認識 コントローラなどの UIを用いて状況を操作 AIは現実世界に 肉体を持っていない!

  21. AIが学習できる環境とは?  カメラを用いて  画面を認識? ロボットアームを用いて コントローラを操作?

  22. AIが学習できる環境とは?  カメラを用いて  画面を認識? ロボットアームを用いて コントローラを操作? この手段でも 「AIにゲームを学習させる環境」 は作れる. ただし...

  23. • 味方 ◦ HP/MP/攻撃力/防御力/… ◦ スキル ◦ 装備 ◦ 好感度

    • 敵 ◦ ... • ダメージ計算 • etc ... AIが学習できる環境とは? アナログゲームとデジタルゲームを比較した場合, デジタルゲームは内部的に持つパラメータが多く,画面には表示されない要素が多い. また「味方・敵・地形・天候・時間」などプレイヤーが能動的に干渉できない要素も多い. • 盤面 • 自身の駒 • 相手の駒 • 取られた自身の駒 • 取った相手の駒 • 駒の移動方向 • 経過ターン
  24. • 味方 ◦ HP/MP/攻撃力/防御力/… ◦ スキル ◦ 装備 ◦ 好感度

    • 敵 ◦ ... • ダメージ計算 • etc ... AIが学習できる環境とは? ゲームにおける因果関係を伴う一連の事象をAIに学習させようと考えた時, デジタルゲームの状況は画面から目視のみで得られる情報だけで十分だろうか? • 盤面 • 自身の駒 • 相手の駒 • 取られた自身の駒 • 取った相手の駒 • 駒の移動方向 • 経過ターン
  25. • 味方 ◦ HP/MP/攻撃力/防御力/… ◦ スキル ◦ 装備 ◦ 好感度

    • 敵 ◦ ... • ダメージ計算 • etc ... AIが学習できる環境とは? ゲームにおける因果関係を伴う一連の事象をAIに学習させようと考えた時, デジタルゲームの状況は提供されたUIから操作できる内容だけで十分だろうか? • 盤面 • 自身の駒 • 相手の駒 • 取られた自身の駒 • 取った相手の駒 • 駒の移動方向 • 経過ターン
  26. AIが学習できる環境とは? ゲーム内で 見えない部分も含めた状況を 記録できる出力機構 ゲーム内で 見えない部分も含めた状況を 再現できる入力機構

  27. AIが学習できる環境とは? 効率よく学習を行うため, ゲームを 並 列 かつ 高 速 で 実行できる機構が必要

  28. AIが学習できる環境とは? そして,デジタルゲームを学習対象にするのなら,  ゲーム内で見えない部分も含めた状況を再現できる入力機構  ゲーム内で見えない部分も含めた状況を記録できる出力機構  ゲームを並列かつ高速で実行できる仕組み を学習対象のデジタルゲームに対して実装し, そのゲームをサーバなどのCUIで並列かつ高速で実行できるようにするのが良い.

  29. まとめ 「AIが学習できる環境」とは, AIが学習を行うために, ゲーム内で見えない部分も含めた状況を再現できる入力機構 ゲーム内で見えない部分も含めた状況を記録できる出力機構 ゲームを並列かつ高速で実行できる仕組み が学習対象のゲーム上に実装されている環境のこと. AIが学習できる環境とは? この環境のことを シミュレータ環境

    と呼ぶよ
  30. 第4章 実践~エンジニアリング編~

  31. 第1節 「AIにゲームを学習させる環境」 における機構・機能

  32. 実践~エンジニアリング編~ 「AIにゲームを学習させる環境」を導入すると言うことは, 学習対象のゲームに対して, 見えない部分も含めた状況を再現できる入力機構と, 見えない部分も含めた状況を記録できる出力機構を実装して, さらに並列かつ高速で実行できるように実装することである. 出力機構 入力機構 並列実行 &

    高速実行 シミュレータ環境
  33. 実践~エンジニアリング編~ 各機能をシンプルに表現すると以下となる. 出力機構 = AIが学習に用いる為のログを出す機構 入力機構 = ログを用いてゲームロジックに干渉する機構 並列実行 =

    サーバ上で並列にゲームを動かせる 高速実行 = ゲームをGUIから切り離しCUI上で動かせる 本節では上記機能の解説を行う.
  34. 出力機構 ...の前に 実践~エンジニアリング編~

  35. メッセージ駆動のゲーム ゲーム ロジック UI 描画 敵AI 味方 AI システム これから説明する

    出力機構・入力機構では メッセージ駆動で動くゲームを 例に用いて解説を行う
  36. メッセージ駆動のゲーム ゲーム ロジック UI 描画 敵AI 味方 AI システム そのため,

    出力機構・入力機構の解説に先行して メッセージ駆動の解説を行う.
  37. メッセージ駆動のゲーム ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

    ゲームの コアロジック
  38. メッセージ駆動のゲーム ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

    メッセージキュー ゲームロジック メッセージ発行者
  39. メッセージ駆動のゲーム ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

    メッセージ
  40. メッセージ駆動のゲーム ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

  41. メッセージ駆動のゲーム ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

  42. メッセージ駆動のゲーム ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

  43. メッセージ駆動のゲーム ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

  44. メッセージ駆動のゲーム ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

  45. 出力機構 実践~エンジニアリング編~

  46. 実践~エンジニアリング編~:出力機構 ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

    メッセージを いつ・誰が・何の メッセージを キューに送ったか をログに記録 1: From: AI Value: 2: From: UI Value: 3: …
  47. 実践~エンジニアリング編~:出力機構 ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

    1: From: UI Value: 2: From: AI Value: 3: … メッセージを いつ・誰が・何の メッセージを キューに送ったか をログに記録
  48. 実践~エンジニアリング編~:出力機構 ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

    メッセージを 処理した結果, どの様な計算になり, どの様に処理し, どの様に反映したか をログに記録 MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], …
  49. 入力機構 実践~エンジニアリング編~

  50. 実践~エンジニアリング編~:入力機構 ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

    1: From: AI Value: 2: From: UI Value: 3: … 入力機構とは ログなどに従って 各メッセージ発行者のフリをして メッセージを発行する機構. 入力 機構
  51. 実践~エンジニアリング編~:入力機構 ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

    1: From: AI Value: 2: From: UI Value: 3: … 入力 機構 入力機構に ログを読ませると...
  52. 実践~エンジニアリング編~:入力機構 ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

    1: From: AI Value: 2: From: UI Value: 3: … 入力機構が 「それぞれのフリ」 をしてメッセージを発行 入力 機構
  53. 実践~エンジニアリング編~:入力機構 ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

    1: From: AI Value: 2: From: UI Value: 3: … 1: From: AI Value: 2: From: UI Value: 3: … 入力機構を用いて いるときも同じ様に 出力を記録する 入力 機構 メッセージを いつ・誰が・何の メッセージを キューに送ったか をログに記録
  54. 実践~エンジニアリング編~:入力機構 ゲーム ロジック UI 描画 敵 キャラ 味方 キャラ システム

    1: From: AI Value: 2: From: UI Value: 3: … メッセージを 処理した結果, どの様な計算になり, どの様に処理し, どの様に反映したか を記録 入力機構を用いて いるときも同じ様に 出力を記録する 入力 機構 MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], …
  55. 並列実行&高速実行 実践~エンジニアリング編~

  56. 実践~エンジニアリング編~:並列実行&高速実行 AIにおける学習というのはイテレーションが重要である. 学習対象にもよるが弊社がCEDEC2020で行った学習では 「8時間で200,000戦の対戦数を確保」している. 毎分400戦以上行っている計算であり, このためにはゲームが • 並列実行 • 高速実行

    できる必要があり, 高速実行はゲームをGUIから切り離し描画をスキップすることで実現する.
  57. 実践~エンジニアリング編~ 第2節 「AIにゲームを学習させる環境」 における設計・実装

  58. 導入において抑えておくべき設計・実装 ここまで「AIにゲームを学習させる環境」の導入において 求められる機構・仕組みについて解説を行った. この項では, 「AIにゲームを学習させる環境」の導入において 抑えておくべき設計・実装について解説を行なう. DeNAがゲームに対して シミュレータ環境の導入を 行う過程で得られた ノウハウです!

    シミュレータ環境 シミュレータ環境
  59. 「AIにゲームを学習させる環境」 を二重管理にしないようにする 導入において抑えておくべき設計・実装

  60. 「AIにゲームを学習させる環境」を二重管理にしないようにする デジタルゲームに対して「AIにゲームを学習させる環境」を後付けで実装することを考えた際に, すでに運用しているゲームへの影響を最小限にするため, 運用中の実装を複製し,複製した実装に対して「AIにゲームを学習させる環境」を追加する という選択をしがちである. 運用中の実装 シミュレータ環境 複製 シミュレータ環境 シミュレータ環境

  61. 「AIにゲームを学習させる環境」を二重管理にしないようにする しかし,この設計では「運用中の実装」に修正があるたびに あわせて「AIにゲームを学習させる環境」の修正も求められてしまい, 「運用中の実装」に対して常に追従するコストが求められてしまう. 運用中の実装 シミュレータ環境 修正 作業 シミュレータ環境

  62. また,この修正作業が必要になった場合, 修正が完了するまで「AIにゲームを学習させる環境」を稼働させることができない. 昨今の運用型ゲームタイトルでは更新頻度が高いゲームも多く, この二重管理を行う設計は二重に運用・保守コストが掛かってしまうのでので避けるべきである. 更新 作業 「AIにゲームを学習させる環境」を二重管理にしないようにする 運用中の実装 シミュレータ環境 運用保守が

    おつらい! シミュレータ環境
  63. 開発初期時点から 「AIにゲームを学習させる環境」 の導入を前提に設計を行う 導入において抑えておくべき設計・実装

  64. 開発初期時点からの導入を前提に設計を行う 「AIにゲームを学習させる環境」の機構や仕組みは ゲームにおけるコアロジックの実装と密接に関係している. 「AIにゲームを学習させる環境」を既存のゲームに対して後付けで導入した場合, 既存ゲームのコアロジックを修正したり, そこだけイレギュラーな対応を求められたりする事がある. 既存ゲームのコアロジックを修正する場合は, 影響範囲が大きく,工数も多くなってしまい, ゲームや「AIにゲームを学習させる環境」の設計が複雑になってしまう. シミュレータ環境

    シミュレータ環境 シミュレータ環境
  65. 開発初期時点からの導入を前提に設計を行う 故に,ゲームの新規開発を行う際には将来的にAI活用は必須であると見据えた上で, ゲームの開発初期時点から「AIにゲームを学習させる環境」を導入することを前提に, ゲームのコアロジックや周辺機能の設計・実装を行なう必要がある. DeNAにおける開発でも「AIにゲームを学習させる環境」を 後付けで導入した場合と,開発初期から導入した場合における導入コストとして, 開発期間では8倍,開発費用では7倍の差が確認された. シミュレータ環境 シミュレータ環境

  66. まとめ 「AIにゲームを学習させる環境」とは 出力機構と入力機構と並列実行と高速実行を実装したゲームのことであり, 各機能は下記のような特徴を持つ. 出力機構 = AIが学習に用いる為のログを出す機構 入力機構 = ログを用いてゲームロジックに干渉する機構

    並列実行 = サーバ上で並列にゲームを動かせる 高速実行 = ゲームをGUIから切り離しCUI上で動かせる 実践~エンジニアリング編~ シミュレータ環境
  67. まとめ 「AIにゲームを学習させる環境」導入にあたって下記の設計・実装について注意を行なう. • 運用・保守コスト的観点において ゲームと「AIにゲームを学習させる環境」の二重管理になるような設計・実装は避ける. • 開発期間・開発費用といった導入コスト的観点において 「AIにゲームを学習させる環境」を後付けするような設計・実装ではなく, 開発初期時点から導入することを前提にゲームの設計・実装を行なう. 実践~エンジニアリング編~

    シミュレータ環境 シミュレータ環境 シミュレータ環境
  68. 第5章 実践~プロジェクト推進編~

  69. 第1節 「AIにゲームを学習させる環境」 の更なる活用

  70. 「AIにゲームを学習させる環境」の更なる活用 「AIにゲームを学習させる環境」を導入するだけでは, AIによる恩恵を享受するのは難しい. 「対戦AI」や「AIによるバランス調整」などを行うためには, データサイエンティストがAIの実証実験を行い, その後ゲームに機能として実装する必要がある. シミュレータ環境

  71. 「AIにゲームを学習させる環境」の更なる活用 AIの開発を含むプロジェクトは長期間を要する計画になるため, そのためだけに「AIにゲームを学習させる環境」を使うと 短期間かつ早期には恩恵を得られにくい. しかし,「AIにゲームを学習させる環境」というのは様々な利用方法が考えられ, AI機能以外にも利用することで,導入の費用対効果を改善することができる. 本節では「AIにゲームを学習させる環境」について振り返りながら, AI機能以外の利用方法について解説を行う. シミュレータ環境 シミュレータ環境

    シミュレータ環境
  72. 「AIにゲームを学習させる環境」の更なる活用 「AIにゲームを学習させる環境」とは,     出力機構 = AIが学習に用いる為のログを出す機構     入力機構 = ログを用いてゲームロジックに干渉する機構     並列実行 =

    サーバ上で並列にゲームを動かせる     高速実行 = ゲームをGUIから切り離しCUI上で動かせる の機能をゲーム上に実装したものである. シミュレータ環境
  73. 「AIにゲームを学習させる環境」の更なる活用 「AIにゲームを学習させる環境」を利用する例. • リプレイ機能 ◦ スナップショットテスト ◦ チート検知 ◦ 観戦機能

    ◦ お手本機能 ◦ 周回機能 • バランス調整 • 自動編成 • 自動プレイ シミュレータ環境
  74. 「AIにゲームを学習させる環境」の更なる活用 「AIにゲームを学習させる環境」をAI機能開発以外に利用する例. • リプレイ機能 ◦ スナップショットテスト ◦ チート検知 ◦ 観戦機能

    ◦ お手本機能 ◦ 周回機能 • バランス調整 • 自動編成 • 自動プレイ シミュレータ環境 「AIにゲームを学習させる環境」における 入力機構・出力機構 を利用することで リプレイ機能を作ることができる. シミュレータ環境 さらにリプレイ機能を派生させることで, 様々な利用用途に展開可能.
  75. 「AIにゲームを学習させる環境」の更なる活用 「AIにゲームを 学 習 させる 環 境 」をAI 機 能

    開 発 以 外 に 利 用 する 例 . • リプレイ機能 ◦ スナップショットテスト ◦ チート検知 ◦ 観戦機能 ◦ お手本機能 ◦ 周回機能 • バランス調整 • 自動編成 • 自動プレイ シミュレータ環境 「AIにゲームを学習させる環境」における 入力機構・出力機構 を利用することで リプレイ機能を作ることができる. シミュレータ環境 さらにリプレイ機能を派生させることで, 様々な利用用途に展開可能. 本発表ではリプレイ機能と その派生の中でも費用対効果が得やすい スナップショットテストとチート検知 について解説を行う
  76. リプレイ機能 「AIにゲームを学習させる環境」の更なる活用

  77. リプレイ機能 リプレイ機能とはゲームにおける任意の操作を記録し,記録した操作を自動的に再現する機能. シミュレータ環境の入力機構と出力機構を用いて, 1. プレイヤーが任意のプレイを行う 1.1. この時にプレイヤーが行った操作を出力機能を用いてログとして保存する 2. 「1.1.」で記録したログを入力機構に渡して, 「1」で行ったプレイをプレイヤーの代わりに再現をする

  78. リプレイ機能 1: From: UI Value: 2: From: AI Value: 3:

    … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … Ver:2.0 シミュレータ環境 プレイヤーが行った操作を 出力機能を用いてログとして保存する
  79. リプレイ機能 1: From: UI Value: 2: From: AI Value: 3:

    … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … 1: From: UI Value: 2: From: AI Value: 3: … Ver:2.0 シミュレータ環境 プレイヤーが行った操作を プレイヤーの代わりに 再現する
  80. 「AIにゲームを学習させる環境」の更なる活用 「AIにゲームを学習させる環境」をAI機能開発以外に利用する例. • リプレイ機能 ◦ スナップショットテスト ◦ チート検知 ◦ 観戦機能

    ◦ お手本機能 ◦ 周回機能 • バランス調整 • 自動編成 • 自動プレイ シミュレータ環境
  81. スナップショットテスト 「AIにゲームを学習させる環境」の更なる活用

  82. スナップショットテストとは プログラムにおける機能改修前のログと機能改修後のログを比較して ログに差分がないかを見ることでバグやデグレードを検知するテスト. 「リプレイ機能」を使うことで, ゲームの機能改修前におけるログと機能改修後におけるログを収集し, 機能改修前後のログを比較することでバグやデグレードを検知を行う. スナップショットテスト

  83. スナップショットテストとは このスナップショットテストではゲームプレイを通してテスト項目を作ることから, エンジニア以外でもテストを作成可能. QAにて定常的に確認する項目や, 過去に発生したバグの再現プレイを記録しておくことで QA期間の圧縮やバグの再発防止などを狙うことができる. スナップショットテスト

  84. スナップショットテスト 1: From: UI Value: 2: From: AI Value: 3:

    … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … Ver:2.0 Ver:1.0 プレイヤーが行った操作を 出力機能を用いてログとして保存する
  85. スナップショットテスト Ver:2.0 1: From: UI Value: 2: From: AI Value:

    3: … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … 1: From: UI Value: 2: From: AI Value: 3: … プレイヤーが行った操作を プレイヤーの代わりに 再現する
  86. スナップショットテスト 1: From: UI Value: 2: From: AI Value: 3:

    … 1: From: UI Value: 2: From: AI Value: 3: … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], …
  87. スナップショットテスト 1: From: UI Value: 2: From: AI Value: 3:

    … 1: From: UI Value: 2: From: AI Value: 3: … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … 同じ操作を行った時... 同じ操作を行った時...
  88. スナップショットテスト 1: From: UI Value: 2: From: AI Value: 3:

    … 1: From: UI Value: 2: From: AI Value: 3: … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … 同じ操作を行った時... 同じ結果が現れるかを 確認する
  89. スナップショットテスト 1: From: UI Value: 2: From: AI Value: 3:

    … 1: From: UI Value: 2: From: AI Value: 3: … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … 同じ操作を行った時... ログが一致している場合は, 機能改修前後でバグやデグレードが 発生していないことが確認できる
  90. スナップショットテスト 1: From: UI Value: 2: From: AI Value: 3:

    … 1: From: UI Value: 2: From: AI Value: 3: … MessageId: 1 Result: { IsHit: false, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … ログが不一致の場合は, 機能改修前後でバグやデグレードが 発生していることがわかる. ログを読むことで. どの時点の操作で差分が発生したか確認可能. ログが不一致の場合は, 機能改修前後でバグやデグレードが 発生していることがわかる. ログを読むことで. どの時点の操作で差分が発生したか確認可能.
  91. 「AIにゲームを学習させる環境」の更なる活用 「AIにゲームを学習させる環境」をAI機能開発以外に利用する例. • リプレイ機能 ◦ スナップショットテスト ◦ チート検出 ◦ 観戦機能

    ◦ お手本機能 ◦ 周回機能 • バランス調整 • 自動編成 • 自動プレイ シミュレータ環境
  92. チート検出 「AIにゲームを学習させる環境」の更なる活用

  93. チート検出とは ユーザのプレイをログとして記録し,そのログを「リプレイ機能」に対して入力. ユーザのプレイで記録されたログと, 「リプレイ機能」で再現したログが一致するかでチートの検出を行う. チート検出

  94. チート検出とは このチート検出を突破するためには, ゲームの最終スコアだけを改ざんするのではなく, 出力機構が出したゲームプレイのログの整合性を保って改ざんする必要がある. しかしプレイ後のログからリプレイを行い, リプレイから得られたログとの比較でチートを検出するため, チートを行っているプレイをリアルタイムに検出することは出来ない. チート検出 ログの整合性を 保ちながら

    改ざんするの難しい!
  95. チート検出 1: From: UI Value: 2: From: AI Value: 3:

    … MessageId: 1 Result: { IsHit: true, Damage: 100000, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … Ver:2.0 Ver:1.0 プレイヤーが行った操作を 出力機能を用いてログとして保存する
  96. チート検出 1: From: UI Value: 2: From: AI Value: 3:

    … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … 1: From: UI Value: 2: From: AI Value: 3: … Ver:2.0 Ver:1.0 プレイヤーが行った操作を プレイヤーの代わりに 再現する
  97. チート検出 1: From: UI Value: 2: From: AI Value: 3:

    … 1: From: UI Value: 2: From: AI Value: 3: … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … MessageId: 1 Result: { IsHit: true, Damage: 100000, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], …
  98. チート検出 1: From: UI Value: 2: From: AI Value: 3:

    … 1: From: UI Value: 2: From: AI Value: 3: … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … MessageId: 1 Result: { IsHit: true, Damage: 100000, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … 同じ操作を行った時... 同じ操作を行った時...
  99. チート検出 1: From: UI Value: 2: From: AI Value: 3:

    … 1: From: UI Value: 2: From: AI Value: 3: … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … MessageId: 1 Result: { IsHit: true, Damage: 100000, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … 同じ操作を行った時... 同じ結果が現れるかを 確認する
  100. チート検出 1: From: UI Value: 2: From: AI Value: 3:

    … 1: From: UI Value: 2: From: AI Value: 3: … MessageId: 1 Result: { IsHit: true, Damage: 100, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … MessageId: 1 Result: { IsHit: true, Damage: 100000, AttackFrom: player, AttackTo: enemy1, … }, Units: [ { Id: 1, Hp: 50, … }, … ], … ログが一致している場合は, 機能改修前後でバグやデグレードが 発生していないことが確認できる プレイヤーがチートを使用していた場合, 同じ操作を行っても違う結果がログに現れる.
  101. まとめ 「AIにゲームを学習させる環境」を導入しただけでは AIプロジェクトを実行できる準備が整っただけである. AIプロジェクトの完遂には長期的な時間が必要なため, 「AIにゲームを学習させる環境」を スナップショットテストやチート検知といった AI開発以外の用途にも使うことで短期的成果を作るとよい. 「AIにゲームを学習させる環境」の更なる活用 シミュレータ環境 シミュレータ環境

  102. 第2節 ゲームドメインとAIドメインの接合点

  103. ゲームドメインとAIドメインの接合点 「AIにゲームを学習させる環境」の導入・運用には専門知識をもつチームが求められる シミュレータ環境 「AIにゲームを学習させる環境」 の導入 「AIにゲームを学習させる環境」 を使ったAIの作成

  104. 「AIにゲームを学習させる環境」 の導入 「AIにゲームを学習させる環境」 を使ったAIの作成 ゲームドメインとAIドメインの接合点 「AIにゲームを学習させる環境」の導入・運用には専門知識をもつチームが求められる 「AIにゲームを学習させる環境」の導入には 対象ゲームにおける専門的なドメイン知識 が必要 例:

    • 入力機構や出力機構の実装方法 • ゲームクライアントを並列に起動させる設計 • 同じログを入力機構に渡した時における 乱数や物理演算同一性担保 シミュレータ環境 シミュレータ環境
  105. 「AIにゲームを学習させる環境」 の導入 「AIにゲームを学習させる環境」 を使ったAIの作成 ゲームドメインとAIドメインの接合点 「AIにゲームを学習させる環境」の導入・運用には専門知識をもつチームが求められる シミュレータを使った AIの作成には AIにおける専門的なドメイン知識が必要 例:

    • AIのための学習環境構築 • 学習のためのパラメータ選定 • 機械学習に必要なログの選定 シミュレータ環境
  106. ゲームドメインとAIドメインの接合点 しかし,お互いの専門性の高さからコミュニケーションにすれ違いが発生することがある. AI知識ワカラナイ ゲームドメインワカル AI知識ワカル ゲームドメインワカラナイ

  107. ゲームドメインとAIドメインの接合点 しかし,お互いの専門性の高さからコミュニケーションにすれ違いが発生することがある. シミュレータ環境 ってなんだよ!? シミュレータ環境 作って!

  108. ゲームドメインとAIドメインの接合点 しかし,お互いの専門性の高さからコミュニケーションにすれ違いが発生することがある. シミュレータ環境って 費用対効果悪くない? ぐぬぬ...

  109. ゲームドメインとAIドメインの接合点 両者のことを理解しているハブ的役割を追加すると... AI知識ワカラナイ ゲームドメインワカル AI知識ワカル ゲームドメインワカラナイ AI知識チョットワカル ゲームドメインチョットワカル

  110. ゲームドメインとAIドメインの接合点 両者のコミュニケーションがスムーズに行える. なるほど! わかった! シミュレータ環境 作って! 入力機構と出力機構と 並列実行と高速実行の 実装をしよう!

  111. ゲームドメインとAIドメインの接合点 両者のコミュニケーションがスムーズに行える. シミュレータ環境って 費用対効果悪くない? たすかる! シミュレータ環境使うとテス トとかチート検知もできる よ!

  112. ゲームドメインとAIドメインの接合点 ゲームタイトル と データサイエンティスト をつなぐハブとしての役割. 例: • AIプロジェクトの進捗管理 • AIを使ったコンテンツ提案

    • シミュレータ環境実装におけるノウ ハウ蓄積・横展開 AI知識チョットワカル ゲームドメインチョットワカル
  113. まとめ 「AIにゲームを学習させる環境」の導入・運用にはそれぞれ専門知識を持つチームが必要だが, お互いの専門性の高さ故にコミュニケーションにすれ違いが発生してしまうことがある. そこで両者をつなぐハブ的役割が可能なチームを作成することで, スムーズな「AIにゲームを学習させる環境」の導入・運用が行える. また,このハブ的チームにノウハウなどを蓄積させることで, 「AIにゲームを学習させる環境」を横展開したいときなども スムーズな進行が行える. ゲームドメインとAIドメインの接合点 シミュレータ環境

    シミュレータ環境 シミュレータ環境
  114. 第6章 総括

  115. 総括 ゲーム開発における課題として, ゲームバランスはゲームのユーザ体験や品質の向上に繋がる重要な要素だが, 運用年数に比例して増えていくコンテンツの組み合わせ数に対して 人間の力のみで全てを把握してバランスを取ることやチェックすることは難しい. AIにゲームを学習させて 解決しましょう!

  116. 総括 AIにゲームを学習させるためには, • 出力機構 = AIが学習に用いる為のログを出す機構 • 入力機構 = ログを用いてゲームロジックに干渉する機構

    • 並列実行 = サーバ上で並列にゲームを動かせる • 高速実行 = ゲームをGUIから切り離しCUI上で動かせる が必要. これらを満たした 「AIにゲームを学習させる環境」を シミュレータ環境と呼びます!
  117. 総括 「AIにゲームを学習させる環境」を設計・実装する際には... • ゲームを複製して,複製したゲームを「AIにゲームを学習させる環境」とする様な 二重管理の設計・実装は行わない. • 将来的にAI活用は必須であると見据えた上で, ゲームの開発初期から「AIにゲームを学習させる環境」を踏まえた設計・実装を行なう. これらを満たせないと 導入や運用保守のコストが

    増大してしまいます! シミュレータ環境 シミュレータ環境 シミュレータ環境
  118. 総括 「AIにゲームを学習させる環境」を導入しただけでは AIプロジェクトを実行できる準備が整っただけである. AIの開発を含むプロジェクトは長期間を要する計画になるため, そのためだけに「AIにゲームを学習させる環境」を使うと短期では恩恵を得られにくい. 「AIにゲームを学習させる環境」 をAIの開発以外にも利用しましょう! シミュレータ環境 シミュレータ環境 シミュレータ環境

  119. 総括 「AIにゲームを学習させる環境」の導入と 「AIにゲームを学習させる環境」を利用してAIを作成するには それぞれ専門性を持ったチームが必要だが, お互いの専門性の高さからすれ違いが発生することがある. 両チームのことを理解できる ハブ的チームを作ることで スムーズな開発が行えます! シミュレータ環境 シミュレータ環境

  120. 引き続きTechCon2022をお楽しみください! Thank you for listening !