Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Samurai CodingなどにみるゲームAIプログラミングコンテストのための原則とパターン

441 views

Published on

Samurai Coding 2011を中心として、これまでに様々なゲームAIプログラミングコンテストを開催し成功を収めてきました。その実績に基づいて、コンテスト参加者の提出プログラムによりキャラクタ群を対戦させるゲームプラットフォームの設計と実装に共通する設計原則、アーキテクチャおよびそれらを具体化したフレームワークを解説します。さらに、そのようなコンテストにおけるゲーム内容のデザインに関する有用で再利用可能な知見を、10個のゲームデザインパターンとしてまとめあげて説明します。これらの原則やフレームワークおよびパターンを、類似のコンテスト開催やゲームデザインに再利用することで、その実施を効率的かつ効果的に進められることが期待できます。https://cedil.cesa.or.jp/cedil_sessions/view/933

Published in: Software
  • Be the first to comment

Samurai CodingなどにみるゲームAIプログラミングコンテストのための原則とパターン

  1. 1. 鷲崎 弘宜、坂本 一憲、和田 雅彦 早稲田大学グローバルソフトウェアエ ンジニアリング研究所 http://www.washi.cs.waseda.ac.jp/ 1 CEDEC 2012(コンピューターエンターテイメントデベロッパーズカンファレンス)
  2. 2. • ねらい – パターンと原則に関して、自分なりの意義・価値 観を持つ。 • 終了時の目標 – ゲームAIプラットフォームの設計におけるパター ンや原則を知っている。 – ゲームAIコンテストのゲームデザインにおけるパ ターンを知っている。 – それらの概念と広がりを知っている。 2
  3. 3. • AI プログラムを作成し対戦 – プログラミング教育、ゲームAI研究へ – ゲームプラットフォームがAPI提供、ターン制のゲーム • 早稲田大学における開発・運営実績 – ’09: ACM ICPC併設 Java Challenge – ‘10: ACM ICPC併設 Java Challenge, 楽天コンテスト – ‘11: Samurai Coding 2011 – ‘12: ACM ICPC併設Java Challenge, SamurAI Coding 2012 詳細は異なるが、同じようなことをしている! 設計や実装を再利用できれば、楽によいものを作れるのでは?
  4. 4. 4 class Mathematic { public Data sort(Data data){ switch(settings) { case QUICK: return quickSort(data); case BUBBLE: return bubbleSort(data); default: ... } } class Loan { public double capital() { if(expiry == null && maturity != null) return ...; if(expiry != null && maturity == null) { ... }
  5. 5. 5 class Mathematic { public Data sort(Data data){ switch(settings) { case QUICK: return quickSort(data); case BUBBLE: return bubbleSort(data); default: ... } } class Loan { public double capital() { if(expiry == null && maturity != null) return ...; if(expiry != null && maturity == null) { ... } class Mathematic { Sorter sorter; public Data sort(Data data){ return sorter.sort(data); } abstract class Sorter { public abstract Data sort(Data); class QuickSorter extends Sorter { public Data sort(Data) { ... } class Loan { CapitalCalc capitalCalc; public double capital(){ return capitalCalc.calc(this); } Interface CapitalCalc { double calc(Loan l); class TermCapital implements ...{ double calc(Loan l) { ... }
  6. 6. 6 Context Strategy algorithmInterface() ConcreteStrategyA algorithmInterface() ConcreteStrategyB algorithmInterface() ・・・ ・・・ contextInterface() 解決 振る舞いのカプセル化、ポリモーフィズムによる変更。 問題 ・・・アルゴリズムは多数存在している。これらの機能を必要と するクラスに埋め込んでしまうことは望ましくない・・・ 文脈 異なるアルゴリズムが必要。クライアントが知るべきでないデータ利用。 結果 ・・・アルゴリズムと他の実装が混ざると保守しにくい・・・ ・・・アルゴリズムを拡張、動的変更・・・ ・・・通信に関するオーバーヘッド、オブジェクト数の増加・・・・
  7. 7. 7 • ソフトウェア開発の特定状況下で繰り返される問題と解決 – 変更や再利用のための設計 – 共通の「ことば」(指針) • POSA アーキテクチャパターン • Gang of Four(GoF) デザインパターン [GoF00] など [GOF00] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides(著), 本位田真一, 吉田和樹 (監訳), “オブジェクト指向における再利用のためのデザインパターン改訂版", ソフトバンクパブリッシング, 2000. 文脈: こういうときに 問題: こうしたかったら 制約: こういうことを考慮し 解決策: こうしなさい 新たな状況 解決 解決 抽象化 具象化 類似 抽象化成功事例
  8. 8. 抽出して抽象化すると・・・共通の「ことば」に! • 設計原則 – 設計上の根本指針(例: 高凝集・低結合) • アーキテクチャパターン – 共通の骨格、全体としての方針(例: 多層) • デザインパターン – 共通の部分的方針 それらを具体化すると・・・強力な土台に! • フレームワーク – 再利用・カスタマイズ可能な半完成の実装 8 詳細を省き様々な場合を網羅、再利用可能性あり 特定の場合にのみ、詳細も一括再利用可 (詳細なままではあらゆる場合を網羅しない)
  9. 9. プロダクトライン 9 サブシステム /パッケージ クラス (ファイル) メソッド (関数)/属性 システムドメイン * * * * クラス・関数ライブラリ フレームワーク アーキテクチャ パターン デザインパターン 全体 部分 抽象的 (汎用) 具体的 (特化) 設計原則 あてはまれ ば使える 使えるかも たいてい 使える 特定の場合に 限り使える 使えるかも
  10. 10. • ゲームAIプラットフォームにおける再利用の問題 1. ゲームAIプログラミングに特化していない – 近年活発になっているものの歴史の浅い分野 2. 分析,設計,実装で横断的に再利用されない – 実装における再利用のみ重視されがち – 要求や設計の再利用もしたい! 10 再利用可能な資産 要求 設計 実装
  11. 11. • 分析,設計,実装の各工程にまたがる再利用 – 要求分析:品質特性(ISO9126)に基づく要求分析 – 設計:要求を満たすような設計原則・設計の指針 – 実装:設計原則を満たすようなフレームワーク • 正しい設計がされるような制約を設ける 11 要求分析 設計 実装 単体テスト 結合テスト 受け入れテスト 品質特性 要求 設計原則 フレーム ワーク
  12. 12. • 漠然とした要求分析は難しい – 品質特性(ISO9126)から網羅的に分析 • プラットフォームに必要な品質(副)特性を列挙 – 機能性:セキュリティ – 信頼性:障害許容性 – 効率性:時間効率性 – 使用性:理解性,魅力性 – 保守性:解析性,変更性 – 移植性:環境適応性 • 品質(副)特性から具体的な要求を抽出 12 抜けや漏れのない Licenced by Alan Cleaver (http://www.flickr.com/photos/alancleaver/4439276478/)
  13. 13. • 機能性:セキュリティ – 書き換え不可能 • AIプログラムによるゲーム 状態の不正な変更を防ぐ • 信頼性:障害許容性 – AIプログラムからの独立 • AIプログラムの不具合がプラットフォームに影響しない • AIプログラムが無限ループしても落ちない 13 while (true) { …. } Int[] array = new int[10]; System.out.println(array[15]); 無限ループするAI 例外を吐くAIプログラム AIAIAI 不正な 書き換え
  14. 14. • 要求を満たすための設計の指針・原則を考案 • 要求1:書き換え不可能 – Immutableパターン – 書き換え不可能な オブジェクトを受け渡す • 要求2:AIプログラムからの独立 – 設計原則:別スレッド(プロセス)での実行 • プロセス単位で動作するGoogle Chromeのタブのように – 設計原則:AIプログラムの計算時間の制限 • 一定時間を超えると強制終了 14 ゲームプラットフォーム AIプログラムゲーム 状態 Immutable ゲーム 状態
  15. 15. • 設計のパターンや原則をフレームワークに織 り込む – 利用者のプログラムも自然と設計原則に従う • Immutableパターン – 書き換えできない汎用的なクラスを提供 例)二次元座標を表すPointクラス • 設計原則:別スレッド(プロセス)での実行 – AIプログラムの実行機能を提供 – 様々な機能を追加可能 • 実行結果の記録・再生 • Decoratorパターンを利用 15 フレームワーク(GAIA) ゲームプラットフォーム AIプログラム
  16. 16. • 実装のみの再利用からの脱却 – 分析,設計,実装に横断する一貫した再利用 • 開発フローにならう再利用可能な資産の抽出 1. 品質特性から網羅的に要求を列挙 2. 要求を実現するパターンや設計原則を識別 3. パターンや設計原則をもとにフレームワークの 開発 • ローマは一日してならず – プロジェクトを回すたびに資産が成長 – いつでも使えるように整理しておくことが重要 • UMLやパターンで明文化しておこう! 16
  17. 17. • セルフマイニング – 技術者自らが過去の経験を振り返りパターンを抽出 – 過去4度のコンテスト運営経験からマイニング • 品質特性に基づいたパターンの抽出と整理 1. コンテスト向けゲームに関連する品質特性を特定 2. 過去の題材ゲームに実装された仕様・反省される仕様から 品質特性に寄与するゲームデザインを抽出 3. 抽出したデザインをパターンフォーマットに従いドキュメント化 17 •ゲームデザインパターン •AIコンテスト向けのゲーム仕様に関するパターン •ゲーム開発のノウハウを一般化,共有
  18. 18. 18 時間が離散的 擬似リアルタイム 同時 格子 ターン マップが離散的 グラフ 盤面縮退 仕切り直し キープオンムービング トーラス対称マップ 稀少な状況 ランダム要素 クライマックス ゲームの流れを変える 3プレイヤー以上3すくみ戦略と戦術 品質特性 参加性(閾の低さ) 公平性 ゲーム性 エンターテイメント性 開発コスト
  19. 19. • 品質特性に寄与し, 繰り返し実装された仕様を一般化 19 擬似リアルタイムパターン Samurai Coding 2011 抽出 •プレイヤーが選択した手の結果を 反映させるタイミングに制約を加える •リフレッシュを高速(人間の知覚基準で) に行い擬似的にリアルタイムな演出 JC 2009 JC 2010 楽天コンテスト •背景 AI コンテストの参加者は幅広い・・・ •フォース 参加者が AI プログラムの開発に割り 当てられるコストは不明・・・ •問題 リアルタイムゲームは AI 開発コスト増 •解決 プレイヤーが選択した手の結果を反 映させるタイミングに制約を加える 適用
  20. 20. 20
  21. 21. 21 擬似リアルタイムパターン キープオンムービングパターン 仕切り直しパターン 盤面縮退パターン 補完 具体化 •問題 各プレイヤーが同じ手を繰り返し 見かけ上試合の進行が止まる •解決 強制的な盤面の変更や、 繰り返し同じ手を打てない仕様の導入 •関連パターン 擬似リアルタイムパターン 仕切り直しパターン 盤面縮退パターン •問題 ・・・・・・ •解決 盤面が同じ状態を繰り返した際に 強制的に盤面の状態を変化 •関連パターン キープオンムービング •問題 ・・・・・・ •解決 盤面を徐々に縮退させ行動範囲を制限 •関連パターン キープオンムービング
  22. 22. • ゲームデザインの特徴抽出、パターン言語化 [三宅, AsianPLoP11] – 「過去の自分と協力プレイ」「あいまいさを題材に」など • ゲームアーキテクチャ研究の動向 [Morelli, SEKE 2011] 22 – 近年は graphics, control の研究が 活発(続いてAI, audio, network) – フレームワーク、 設計パターン、プ ロダクトライン研究 あり
  23. 23. • 設計原則、アーキテクチャ/デザインパターン – 実装のみではなく、設計の再利用 – 実証済み。開発者間でぶれない。迷わず効率的。 • 設計原則やパターンをフレームワークへ落とし込もう – 実証済みノウハウに基づく高品質な実装の再利用へ – フレームワークの再利用時には背景のパターンや原則を 把握するとより効率・効果的 • パターンの概念はゲームデザインにも使える – ノウハウの伝達 – 実証済み。新らたなデザインのヒントに。 • パターン間の関連で、「ことば」をつなごう – 補完、具体化 – ノウハウを深める、広げる 23
  24. 24. • http://samuraicoding.org/ • 25歳以下3-5名/チーム • 国内予選: 10月提出締切、決勝: 12月 24
  25. 25. • 坂本一憲, 大橋昭, 鷲崎弘宜, 深澤良彰, "コンピュータプレイヤー のプログラム作成を通して競い合うゲームプラットフォームの開発 を支援するフレームワーク", 電子情報通信学会論文誌, Vol.J95-D, No.3, pp.412-424, 2012. • 鷲崎弘宜, “ソフトウェアパターン - 時を超えるソフトウェアの道 -, 情報処理, 情報処理学会, Vol.52, No.9, 2011. • Kazunori Sakamoto, Akira Ohashi, Masaya Shimizu, Syuhei Takahashi, Shinichi Murakami, Hironori Washizaki and Yoshiaki Fukazawa, "コンピュータプレイヤー同士の対戦を通したプログラミ ングコンテストのパターンランゲージ", Proceedings of the 2nd Asian Conference on Pattern Languages of Programs (AsianPLoP 2011), pp.III-116-III-133, 2011. • 坂本一憲, "AIプログラミングを通して参加する教育向けゲームシ ステムに適したソフトウェアアーキテクチャ", CEDEC 2010(CESAデ ベロッパーズカンファレンス2010), 2010. • 坂本一憲, 内山諭, 城間祐輝, 野本悠太郎, 庄山昭彦, 中村悠人, 鷲崎弘宜, 深澤良彰, "AIプログラミングを通して参加する教育向け ゲームシステムに適したソフトウェアアーキテクチャ", ゲーム学会 「ゲームと教育」研究部会第3回研究会, 2010.3. 25

×