Cedec2012 ai-contest-design-patterns-principles

Post on 10-May-2015

923 views 1 download

description

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

Transcript of Cedec2012 ai-contest-design-patterns-principles

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

鷲崎 弘宜、坂本 一憲、和田 雅彦早稲田大学グローバルソフトウェアエンジ

ニアリング研究所http://www.washi.cs.waseda.ac.jp/

1

CEDEC 2012 (コンピューターエンターテイメントデベロッパーズカンファレンス)

本セッションのねらいと目標• ねらい– パターンと原則に関して、自分なりの意義・価

値観を持つ。• 終了時の目標– ゲーム AI プラットフォームの設計におけるパ

ターンや原則を知っている。– ゲーム AI コンテストのゲームデザインにおけ

るパターンを知っている。– それらの概念と広がりを知っている。

2

ゲーム AI プログラミングコンテスト

• 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

何が問題でしょう?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

偶然ではない繰り返し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

例 : Strategy パターン

ContextContext StrategyStrategy

algorithmInterface()algorithmInterface()

ConcreteStrategyAConcreteStrategyA

algorithmInterface()algorithmInterface()

ConcreteStrategyBConcreteStrategyB

algorithmInterface()algorithmInterface()

・・・・・・

・・・・・・

contextInterface()contextInterface()

解決振る舞いのカプセル化、ポリモーフィズムによる変更。

問題・・・アルゴリズムは多数存在している。これらの機能を必要とするクラスに埋め込んでしまうことは望ましくない・・・

文脈異なるアルゴリズムが必要。クライアントが知るべきでないデータ利用。

結果・・・アルゴリズムと他の実装が混ざると保守しにくい・・・・・・アルゴリズムを拡張、動的変更・・・・・・通信に関するオーバーヘッド、オブジェクト数の増加・・・・

7

ソフトウェアパターンとは

• ソフトウェア開発の特定状況下で繰り返される問題と解決– 変更や再利用のための設計– 共通の「ことば」(指針)

• POSA アーキテクチャパターン• Gang of Four ( GoF ) デザインパターン [GoF00] など

[GOF00] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (著) , 本位田真一 , 吉田和樹 ( 監訳 ), “オブジェクト指向における再利用のためのデザインパターン改訂版 ", ソフトバンクパブリッシング , 2000.

文脈 : こういうときに問題 : こうしたかったら制約 : こういうことを考慮し解決策 : こうしなさい

新たな状況

解決 解決

抽象化 具象化

類似

抽象化成功事例

偶然ではなく繰り返される「何か」

抽出して抽象化すると・・・共通の「ことば」に!• 設計原則

– 設計上の根本指針(例 : 高凝集・低結合)• アーキテクチャパターン

– 共通の骨格、全体としての方針(例 : 多層)• デザインパターン

– 共通の部分的方針

それらを具体化すると・・・強力な土台に!• フレームワーク

– 再利用・カスタマイズ可能な半完成の実装

8

詳細を省き様々な場合を網羅、再利用可能性あり

特定の場合にのみ、詳細も一括再利用可(詳細なままではあらゆる場合を網羅しない)

プロダクトライン

9

再利用の単位と技術サブシステム/パッケージサブシステム/パッケージ

クラス(ファイル)クラス(ファイル)

メソッド(関数) /属性メソッド(関数) /属性システムシステムドメインドメイン * * * *

クラス・関数ライブラリ

フレームワーク

アーキテクチャパターン デザインパターン

全体 部分抽象的(汎用)

具体的(特化)

設計原則

あてはまれば使える

使えるかも

たいてい使える

特定の場合に限り使える

使えるかも

プラットフォームでの再利用• ゲーム AI プラットフォームにおける再利用

の問題1. ゲーム AI プログラミングに特化していない–近年活発になっているものの歴史の浅い分野

2. 分析,設計,実装で横断的に再利用されない– 実装における再利用のみ重視されがち– 要求や設計の再利用もしたい!

10再利用可能な資産

要求 設計 実装

横断的な再利用の実践事例• 分析,設計,実装の各工程にまたがる再利

用– 要求分析:品質特性( ISO9126 )に基づく要求

分析– 設計:要求を満たすような設計原則・設計の指針– 実装:設計原則を満たすようなフレームワーク• 正しい設計がされるような制約を設ける

11

要求分析

設計

実装 単体テスト

結合テスト

受け入れテスト

品質特性

要求

設計原則

フレームワーク

品質特性に基づく要求分析• 漠然とした要求分析は難しい–品質特性 (ISO9126) から網羅的に分析

• プラットフォームに必要な品質 (副 ) 特性を列挙– 機能性:セキュリティ– 信頼性:障害許容性–効率性:時間効率性–使用性:理解性,魅力性– 保守性:解析性,変更性–移植性:環境適応性

• 品質 (副 ) 特性から具体的な要求を抽出 12

抜けや漏れのない

Licenced by Alan Cleaver (http://www.flickr.com/photos/alancleaver/4439276478/)

品質 ( 副 ) 特性から要求へ• 機能性:セキュリティ–書き換え不可能• AI プログラムによるゲーム

状態の不正な変更を防ぐ• 信頼性:障害許容性– AI プログラムからの独立• AI プログラムの不具合がプラットフォームに影響し

ない• AI プログラムが無限ループしても落ちない

13

while (true) { ….}

Int[] array = new int[10];System.out.println(array[15]);

無限ループするAI

例外を吐く AI プログラム

AIAIAI不正な書き換え

要求に基づく設計のパターンや原則

• 要求を満たすための設計の指針・原則を考案• 要求 1:書き換え不可能– Immutable パターン–書き換え不可能な

オブジェクトを受け渡す• 要求 2: AI プログラムからの独立– 設計原則:別スレッド(プロセス)での実行

• プロセス単位で動作する Google Chrome のタブのように

– 設計原則: AI プログラムの計算時間の制限• 一定時間を超えると強制終了

14

ゲームプラットフォーム

AI プログラム

ゲーム状態

Immutableゲーム

状態

フレームワーク化• 設計のパターンや原則をフレームワークに織

り込む– 利用者のプログラムも自然と設計原則に従う

• Immutable パターン–書き換えできない汎用的なクラスを提供例)二次元座標を表す Point クラス

• 設計原則:別スレッド(プロセス)での実行– AI プログラムの実行機能を提供–様々な機能を追加可能

• 実行結果の記録・再生• Decorator パターンを利用

15

フレームワーク( GAIA )ゲームプラットフォーム

AI プログラム

横断的な再利用のまとめ• 実装のみの再利用からの脱却– 分析,設計,実装に横断する一貫した再利用

• 開発フローにならう再利用可能な資産の抽出1. 品質特性から網羅的に要求を列挙2. 要求を実現するパターンや設計原則を識別3. パターンや設計原則をもとにフレームワークの

開発• ローマは一日してならず– プロジェクトを回すたびに資産が成長– いつでも使えるように整理しておくことが重要

• UML やパターンで明文化しておこう!16

パターン活動の実例

• セルフマイニング– 技術者自らが過去の経験を振り返りパターンを抽出– 過去 4度のコンテスト運営経験からマイニング

• 品質特性に基づいたパターンの抽出と整理1. コンテスト向けゲームに関連する品質特性を特定2. 過去の題材ゲームに実装された仕様・反省される仕様から品質特性に寄与するゲームデザインを抽出

3. 抽出したデザインをパターンフォーマットに従いドキュメント化17

•ゲームデザインパターン• AI コンテスト向けのゲーム仕様に関するパターン• ゲーム開発のノウハウを一般化,共有

パターンマップ

18

時間が離散的

擬似リアルタイム 同

格子

ターン

マップが離散的

グラフ

盤面縮退

仕切り直し

キープオンムービング

トーラス

対称マップ 稀少な状

況ランダム要

素クライマック

ゲームの流れを変える

3プレイヤー以上

3すくみ

戦略と戦術

品質特性

参加性 ( 閾の低さ )

公平性

ゲーム性

エンターテイメント性

開発コスト

擬似リアルタイムパターン

• 品質特性に寄与し,繰り返し実装された仕様を一般化

19

擬似リアルタイムパターン

Samurai Coding 2011

抽出

•プレイヤーが選択した手の結果を 反映させるタイミングに制約を加える•リフレッシュを高速(人間の知覚基準で) に行い擬似的にリアルタイムな演出JC

2009JC

2010楽天コンテス

参加性

エンターテイメント性開発コスト

•背景AI コンテストの参加者は幅広い・・・

•フォース参加者が AI プログラムの開発に割り当てられるコストは不明・・・

•問題リアルタイムゲームは AI 開発コスト増

•解決プレイヤーが選択した手の結果を反映させるタイミングに制約を加える

適用

デモ

20

パターン間の関連

21

擬似リアルタイムパターン

キープオンムービングパターン

仕切り直しパターン

盤面縮退パターン

補完具体化

•問題各プレイヤーが同じ手を繰り返し見かけ上試合の進行が止まる

•解決強制的な盤面の変更や、繰り返し同じ手を打てない仕様の導入

•関連パターン擬似リアルタイムパターン仕切り直しパターン盤面縮退パターン

•問題・・・・・・

•解決盤面が同じ状態を繰り返した際に強制的に盤面の状態を変化

•関連パターンキープオンムービング

•問題・・・・・・

•解決盤面を徐々に縮退させ行動範囲を制限

•関連パターンキープオンムービング

ゲームにおけるパターンや原則の広がり

• ゲームデザインの特徴抽出、パターン言語化 [三宅 , AsianPLoP11]– 「過去の自分と協力プレイ」「あいまいさを題材に」など

• ゲームアーキテクチャ研究の動向 [Morelli, SEKE 2011]

22

– 近年は graphics, control の研究が活発(続いて AI, audio, network )

– フレームワーク、設計パターン、プロダクトライン研究あり

ゲーム開発の共通の「ことば」を持とう• 設計原則、アーキテクチャ / デザインパターン

– 実装のみではなく、設計の再利用– 実証済み。開発者間でぶれない。迷わず効率的。

• 設計原則やパターンをフレームワークへ落とし込もう– 実証済みノウハウに基づく高品質な実装の再利用へ– フレームワークの再利用時には背景のパターンや原則を把握するとより効率・効果的

• パターンの概念はゲームデザインにも使える– ノウハウの伝達– 実証済み。新らたなデザインのヒントに。

• パターン間の関連で、「ことば」をつなごう– 補完、具体化– ノウハウを深める、広げる

23

情報処理学会 SamurAI Coding 2012

• http://samuraicoding.org/• 25歳以下 3-5名 / チーム• 国内予選 : 10月末提出締切、決勝 : 12月

24

関連文献• 坂本一憲 , 大橋昭 , 鷲崎弘宜 , 深澤良彰 , " コンピュータプレイヤー

のプログラム作成を通して競い合うゲームプラットフォームの開発を支援するフレームワーク ", 電子情報通信学会論文誌 , 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