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

機械学習ベースの自動プレイエージェントを用いたバランス設計効率化の追求

gree_tech
September 11, 2019

 機械学習ベースの自動プレイエージェントを用いたバランス設計効率化の追求

CEDEC 2019 にて発表された資料です
https://cedec.cesa.or.jp/2019/session/detail/s5c989964626e1

gree_tech

September 11, 2019
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. 自己紹介
 Sohei Morita
 森田 想平
 
 2009年入社。
 データエンジニアとして働いたのち、現在は事業横断部門でデータ 基盤 /

    AIリサーチ / ビジネスアナリシスを担当するグループのマ ネージャーを務める。
 
 本プロジェクトではプロジェクトマネジメントと一部の開発を担当。
 

  2. 本発表でお伝えしたいこと
 G D
 E N
 P M
 知見を言語化して 伝える
 それを


    理解する
 プロジェクト全体の進行管理
 それを
 理解する
 システムのロジック を説明する
 システムが複雑になり すぎるのを防ぐ
 言語化の補強をする

  3. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  4. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  5. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  6. ボスバトルでのスコア計算
 合計ダメージ
 生存ターンボーナス 
 難易度ボーナス
 aaaa
 最終スコア = 合計ダメージ ×

    (1+生存ターンボーナス) × (1+難易度ボーナス)
 覚えなくていいです
 © 大森藤ノ・SBクリエイティブ/ダンまち2製作委員会 

  7.  挑戦難易度
  生存ターン数
  与ダメージ量 
 を最大化してハイスコアを取る
 
 
 最適な行動を考える必要があるバトル
 ボスバトルの設計
 難易度:6段階
 ターン制限:15ターン


    
 
 ボスバトル(高難易度コンテンツ) © 大森藤ノ・SBクリエイティブ/ダンまち2製作委員会 
 想定パーティーを用いて最適行動でハイスコア獲得

  8. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  9. ボスバトルの設計フローと課題
 ステージ
 設計
 マスターデー タ設定
 ビルド
 テスト
 プレイ
 バランス
 調整


    主にステージ設計、バランス調整において
 ダンメモに詳しい熟練のゲームデザイナーでないと難しい
 
 主にテストプレイにおいて
 手動プレイである分、通常バトルよりも膨大な時間がかかる

  10. ボスバトルの設計フロー
 ステージ
 設計
 マスターデー タ設定
 ビルド
 テスト
 プレイ
 バランス
 調整


    ①想定パーティの決定
 ②敵の基本パラメータの決定
 ③ユーザセグメント別のゴール設定

  11. 活躍させたいキャラクターを 複数決定
 
 ステージ設計 ①想定パーティの決定
 そのキャラクターを用いて
 ハイスコアが出せるパーティを作る
 ※パーティは一例です 
 ©

    大森藤ノ・SBクリエイティブ/ダンまち2製作委員会 
 課題
 ダンメモのキャラをすべて把握していないと
 ベストなパーティを組むことが難しい

  12. ユーザセグメント別に
 適正な難易度でハイスコアが出るようにする
 
 
 ステージ設計 ③ユーザセグメント別の設計
 ラ イ ト
 ミ

    ド ル
 なんとか15ターン
 生き残りたい…
 生き残るだけじゃなく もっと高い難易度に挑戦 したい
 ハイスコア狙うぞ!
 ランキング上位にも入り たい!
 継続的な成長欲求の形成
 
 ヘ ビ
 

  13. ボスバトルの設計フロー
 ステージ
 設計
 マスターデー タ設定
 ビルド
 テスト
 プレイ
 バランス
 調整


    ①想定パーティの決定
 ②敵の基本パラメータの決定
 ③ユーザセグメント別のゴール設定
 ①目標値の設定
 ②実際にプレイする

  14. 
 
 
 何ターン生き残るか
 
 
 
 
 テストプレイ ①目標値の設定


    テストプレイの指標として、具体的な目標値を設定する
 ※赤ラインは理想のハイスコア帯
  15. 
 
 
 スコアを算出してみる
 
 
 
 
 テストプレイ ①目標値の設定


    ついでにもう一つ指標ができました
 ※赤ラインは理想のハイスコア帯 aaaa
 最終スコア = 合計ダメージ × (1+生存ターンボーナス) × (1+難易度ボーナス)
 1ターンあたりのダメージ量を実績ベースで出し、
 目標生存ターン数を入れればざっくり最終スコアを算出できる

  16. ボスバトルの設計フロー
 ステージ
 設計
 マスターデー タ設定
 ビルド
 テスト
 プレイ
 バランス
 調整


    ①想定パーティの決定
 ②敵の基本パラメータの決定
 ③ユーザセグメント別のゴール設定
 ①目標値の設定と検証
 ②実際にプレイする
 テストプレイの結果をもと に、敵のパラメータや行動の 調整を行う

  17. バランス調整
 テストプレイの結果をもとに、敵のパラメータや行動の調整を行う
 
 ex) 
 目標の生存ターン数:10ターン
 テストプレイ結果:8ターン
 
 
 © 大森藤ノ・SBクリエイティブ/ダンまち2製作委員会

    
 敵の攻撃力を下げてみる
 攻撃の回数を減らしてみる
 課題
 ダンメモの調整に慣れたゲームデザイナーでないと
 スムーズに調整を行うことができない

  18. ボスバトルの設計フロー
 ステージ
 設計
 マスターデー タ設定
 ビルド
 テスト
 プレイ
 バランス
 調整


    ①想定パーティの決定
 ②敵の基本パラメータの決定
 ③ユーザセグメント別のゴール設定
 ①目標値の設定と検証
 ②実際にプレイする
 テストプレイの結果をもと に、敵のパラメータや行動の 調整を行う

  19. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  20. 開発システムのコンポーネント
 • ゲーム本体
 • シミュレーター
 • シミュレーターが呼び出すスクリプト
 ◦ 共通仕様
 ◦

    ルールベースエージェント
 ◦ サーバーソケットインタフェース
 • OpenAI Gymラッパー
 • Gym対応エージェントスクリプト
 ◦ ルールベースエージェント
 ◦ 機械学習モデルの学習用エージェント
 ◦ 機械学習モデルの推論検証用エージェント
 

  21. 開発システムのコンポーネント
 • ゲーム本体
 • シミュレーター
 • シミュレーターが呼び出すスクリプト
 ◦ 共通仕様
 ◦

    ルールベースエージェント
 ◦ サーバーソケットインタフェース
 • OpenAI Gymラッパー
 • Gym対応エージェントスクリプト
 ◦ ルールベースエージェント
 ◦ 機械学習モデルの学習用エージェント
 ◦ 機械学習モデルの推論検証用エージェント
 

  22. 開発システムのコンポーネント
 • ゲーム本体
 • シミュレーター
 • シミュレーターが呼び出すスクリプト
 ◦ 共通仕様
 ◦

    ルールベースエージェント
 ◦ サーバーソケットインタフェース
 • OpenAI Gymラッパー
 • Gym対応エージェントスクリプト
 ◦ ルールベースエージェント
 ◦ 機械学習モデルの学習用エージェント
 ◦ 機械学習モデルの推論検証用エージェント
 

  23. 開発システムのコンポーネント
 • ゲーム本体
 • シミュレーター
 • シミュレーターが呼び出すスクリプト
 ◦ 共通仕様
 ▪

    バフ/デバフ特徴量
 ◦ ルールベースエージェント
 ◦ サーバーソケットインタフェース
 • OpenAI Gymラッパー
 • Gym対応エージェントスクリプト
 ◦ ルールベースエージェント
 ◦ 機械学習モデルの学習用エージェント
 ◦ 機械学習モデルの推論検証用エージェント
 

  24. 開発システムのコンポーネント
 • ゲーム本体
 • シミュレーター
 • シミュレーターが呼び出すスクリプト
 ◦ 共通仕様
 ◦

    ルールベースエージェント
 ◦ サーバーソケットインタフェース
 • OpenAI Gymラッパー
 • Gym対応エージェントスクリプト
 ◦ ルールベースエージェント
 ◦ 機械学習モデルの学習用エージェント
 ◦ 機械学習モデルの推論検証用エージェント
 

  25. ルールベースエージェント
 ゲームデザイナーがシンプルな行動ルールを考え、 それをそのままコードにする。ダンメモにおいてはそ れなりに強い
 if PC_ID_XXX in status.keys(): 
 if

    status[PC_ID_XXX]['effect']['buff']['attack']['_strength'][1] > 0: 
 commands[PC_ID_XXX] = 'SKILL3' 
 
 ルールの例
 ルールベース エージェント
  26. ルールベースエージェントの課題
 • 熟練ゲームデザイナーでないとルール作成が難しい
 
 • ステージ数が少ない場合は手動で戦った方が早い 
 
 • 汎用的なルール作成は複雑で難しい
 •

    同じパーティとボスでも、難易度により行動が変化する
 • あらゆる情報を複合的に判断している
 • 現ターン数、バフ残ターン数、生存キャラなど
 • 過去の経験から未来を予測をする
 • 人間は数回プレイをし、ボスの行動を記憶している

  27. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモのバトルについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  28. 開発システムのコンポーネント
 • ゲーム本体
 • シミュレーター
 • シミュレーターが呼び出すスクリプト
 ◦ 共通仕様
 ◦

    ルールベースエージェント
 ◦ サーバーソケットインタフェース
 • OpenAI Gymラッパー
 • Gym対応エージェントスクリプト
 ◦ ルールベースエージェント
 ◦ 機械学習モデルの学習用エージェント
 ◦ 機械学習モデルの推論検証用エージェント
 

  29. サーバーソケットインターフェース
 input_data = json.load(sys.stdin) 
 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

    
 finish = False
 s.bind((BIND_IP, BIND_PORT)) 
 s.listen(1)
 while not finish:
 conn, addr = s.accept() 
 with conn:
 while True: 
 data = conn.recv(MESSAGE_SIZE) 
 if data.decode('utf-8') == 'state': 
 conn.send(json.dumps(input_data).encode('utf-8')) 
 elif 'action' in json.loads(data.decode('utf-8')): 
 action = json.loads(data.decode('utf-8'))['action'] 
 finish = True 
 ...
 json.dump(output_data, sys.stdout, indent = 4, ensure_ascii = False) 
 

  30. 開発システムのコンポーネント
 • ゲーム本体
 • シミュレーター
 • シミュレーターが呼び出すスクリプト
 ◦ 共通仕様
 ◦

    ルールベースエージェント
 ◦ サーバーソケットインタフェース
 • OpenAI Gymラッパー
 • Gym対応エージェントスクリプト
 ◦ ルールベースエージェント
 ◦ 機械学習モデルの学習用エージェント
 ◦ 機械学習モデルの推論検証用エージェント
 

  31. OpenAI Gymラッパー
 def reset(self): #シミュレーターを起動するために呼び出す 
 … 
 while True:


    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: 
 s.connect((SIM_IP, SIM_PORT + PARALLEL_PARAM)) 
 s.send('state'.encode('utf-8')) 
 observation = json.loads(s.recv(MESSAGE_SIZE).decode('utf-8')) 
 … 
 
 def step(self, action): #1ターン進めるために呼び出す 
 …
 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: 
 s.connect((SIM_IP, SIM_PORT + PARALLEL_PARAM)) 
 s.send(json.dumps({'action': action}).encode('utf-8') 
 … 

  32. 開発システムのコンポーネント
 • ゲーム本体
 • シミュレーター
 • シミュレーターが呼び出すスクリプト
 ◦ 共通仕様
 ◦

    ルールベースエージェント
 ◦ サーバーソケットインタフェース
 • OpenAI Gymラッパー
 • Gym対応エージェントスクリプト
 ◦ ルールベースエージェント
 ◦ 機械学習モデルの学習用エージェント
 ◦ 機械学習モデルの推論検証用エージェント
 

  33. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモのバトルについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  34. GD・ENは何をしたのか/すべきなのか
 ゲームデザイナー
 • 自分がどうやってゲームをプレイしているか、を言語化した
 ◦ ルールの作成、特徴量の選定
 • ルールベースエージェントの課題を言語化した
 エンジニア
 •

    ゲームデザイナーの話を理解してコード化した
 • 実装しているモデルの仕組みを丁寧に説明した
 ◦ ユーザーログを利用した教師あり学習と強化学習の違い

  35. 協働でエージェントをデザインしていく
 G D
 E N
 P M
 知見を言語化して 伝える
 それを


    理解する
 プロジェクト全体の進行管理
 それを
 理解する
 システムのロジック を説明する
 システムが複雑になり すぎるのを防ぐ
 言語化の補強をする

  36. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモのバトルについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  37. 結果
 コマンド選択の探索を行うことでスコアは大幅に向上
 初期スコア:933,480
 最適化後スコア:15,199,704
 人間の最高スコア: 24,278,700
 (人の壁は厚い)
 
 PvBにおけるコマンド選択の探索はかなり成功
 


    ターン毎の状況判断、強化学習の検証等は今後の課題
 ※有限時間で探索を打ち切っているので、大域的な最適解には至っていない
 CEDEC2018での発表
  38. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモのバトルについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  39. Rules of MLとの出会い
 Rules of Machine Learningという、Googleが公開して いる機械学習プロジェクトのベストプラクティス集を 知った
 その時、漠然と考えていたことを裏付けてくれるような

    内容だったので、以降はこのRules of MLに沿って開 発を進めた
 • ドメイン知識をムッチャ使う進め方
 https://developers.google.com/machine-learning/guides/rules-of-ml/
  40. 本システム開発との対応表
 自動プレイ環境
 の整備
 ルールベース
 エージェント
 特徴量
 エンジニアリング
 パイプライン
 の整備
 ヒューリスティクスの導

    入
 ヒューリスティクスの追 加
 自動プレイエージェント
 Rules of ML
 機械学習での
 置き換え
 機械学習
 エージェント

  41. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモのバトルについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  42. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモのバトルについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  43. コミュニケーション可能な環境を用意する
 G D
 E N
 P M
 知見を言語化して 伝える
 それを


    理解する
 プロジェクト全体の進行管理
 それを
 理解する
 システムのロジック を説明する
 システムが複雑になり すぎるのを防ぐ
 言語化の補強をする

  44. 目次
 運用の課題
 エージェントの開 発/検証
 プロジェクトは
 どう進んだか
 まとめ
 ダンメモのバトルについて
 現状のボスバトルの設計方法とその課題
 自動プレイ環境/ルールベースエージェントの構築


    機械学習エージェントの構築
 振り返り:GD・ENは何をしたのか
 最初の失敗
 システム開発の進め方
 研究サーベイの進め方
 振り返り:PMは何をしたのか

  45. エージェントの開発/検証
 • ゲーム本体
 • シミュレーター
 • シミュレーターが呼び出すスクリプト
 ◦ 共通仕様
 ◦

    ルールベースエージェント
 ◦ サーバーソケットインタフェース
 • OpenAI Gymラッパー
 • Gym対応エージェントスクリプト
 ◦ ルールベースエージェント
 ◦ 機械学習モデルの学習用エージェント
 ◦ 機械学習モデルの推論検証用エージェント