Más contenido relacionado
Similar a Cedec2012 ai-contest-design-patterns-principles (20)
Más de Hironori Washizaki (20)
Cedec2012 ai-contest-design-patterns-principles
- 2. • ねらい
– パターンと原則に関して、自分なりの意義・
価値観を持つ。
• 終了時の目標
– ゲームAIプラットフォームの設計におけるパ
ターンや原則を知っている。
– ゲームAIコンテストのゲームデザインにおけ
るパターンを知っている。
– それらの概念と広がりを知っている。
2
- 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. 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) {
...
} 4
- 5. class Mathematic { class Mathematic {
Sorter sorter;
public Data sort(Data data){ public Data sort(Data data){
switch(settings) { return sorter.sort(data);
case QUICK: }
return quickSort(data);
case BUBBLE: abstract class Sorter {
return bubbleSort(data); public abstract Data sort(Data);
default: ...
} class QuickSorter extends Sorter {
} public Data sort(Data) { ... }
class Loan {
class Loan { CapitalCalc capitalCalc;
public double capital(){
public double capital() { return capitalCalc.calc(this);
if(expiry == null && }
maturity != null)
return ...; Interface CapitalCalc {
if(expiry != null && double calc(Loan l);
maturity == null) {
... class TermCapital implements ...{
} 5 double calc(Loan l) { ... }
- 6. 文脈
異なるアルゴリズムが必要。クライアントが知るべきでないデータ
利用。
問題
・・・アルゴリズムは多数存在している。これらの機能
を必要とするクラスに埋め込んでしまうことは望ましく
ない・・・
解決
振る舞いのカプセル化、ポリモーフィズムによる変
更。
Context Strategy
contextInterface() algorithmInterface()
ConcreteStrategyA ConcreteStrategyB ・・・
algorithmInterface() algorithmInterface() ・・・
結果
・・・アルゴリズムと他の実装が混ざると保守しにくい・・・
・・・アルゴリズムを拡張、動的変更・・・
・・・通信に関するオーバーヘッド、オブジェクト数の増
6
- 7. • ソフトウェア開発の特定状況下で繰り返される問題と解
決
– 変更や再利用のための設計
– 共通の「ことば」(指針)
• POSA アーキテクチャパターン
• Gang of Four(GoF) デザインパターン [GoF00] など
文脈: こういうときに
問題: こうしたかったら
抽象化 制約: こういうことを考慮し 具象化
解決策: こうしなさい
類似
解決 解決
成功事例 抽象化 新たな状況
[GOF00] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides(著), 本位田真一, 吉田和樹 (監訳),
7
“オブジェクト指向における再利用のためのデザインパターン改訂版", ソフトバンクパブリッシング,
- 8. 抽出して抽象化すると・・・共通の「こと
ば」に!
• 設計原則
– 設計上の根本指針(例: 高凝集・低結合)
• アーキテクチャパターン
– 共通の骨格、全体としての方針(例: 多
層)
• デザインパターン
詳細を省き様々な場合を網羅、再利用可能性
– 共通の部分的方針
あり
それらを具体化すると・・・強力な土台
に!
特定の場合にのみ、詳細も一括再利用可
• フレームワーク
(詳細なままではあらゆる場合を網羅しな
– 再利用・カスタマイズ可能な半完成の実装 8
- 9. ドメイン * システム * サブシステム* クラス * メソッド
/パッケージ (ファイル) (関数)/属性
全体 部分
抽象的
(汎用) たいてい
使える
設計原則
アーキテクチャ
デザインパターン
パターン
使えるか
使えるかも
も
フレームワーク
特定の場合に
あてはまれ
プロダクトライン ば使える
限り使える クラス・関数ライブラリ
具体的
(特化)
9
- 10. • ゲームAIプラットフォームにおける再利用の
問題
1. ゲームAIプログラミングに特化していない
– 近年活発になっているものの歴史の浅い分野
2. 分析,設計,実装で横断的に再利用されな
い
– 実装における再利用のみ重視されがち
– 要求や設計の再利用もしたい!
要求 設計 実装
再利用可能な資産
10
- 11. • 分析,設計,実装の各工程にまたがる再利
用
– 要求分析:品質特性(ISO9126)に基づく要求
分析
– 設計:要求を満たすような設計原則・設計の指
針
品質特性
– 実装:設計原則を満たすようなフレームワーク
受け入れテス
要求分析 ト
•
要求 正しい設計がされるような制約を設ける
設計 結合テスト
設計原則
実装 単体テスト
フレーム
ワーク 11
- 12. • 漠然とした要求分析は難しい抜けや漏れのない
– 品質特性(ISO9126)から網羅的に分析
• プラットフォームに必要な品質(副)特性を
列挙
– 機能性:セキュリティ
– 信頼性:障害許容性
– 効率性:時間効率性
– 使用性:理解性,魅力性
– 保守性:解析性,変更性
– 移植性:環境適応性
• 品質(副)特性から具体的な要求を抽出
Licenced by Alan Cleaver (http://www.flickr.com/photos/alancleaver/4439276478/) 12
- 13. • 機能性:セキュリティ
– 書き換え不可能
• AIプログラムによるゲーム
状態の不正な変更を防ぐ
• 信頼性:障害許容性 AI 不正な
AI
AI 書き換え
– AIプログラムからの独立
• AIプログラムの不具合がプラットフォームに影響し
ない
• AIプログラムが無限ループしても落ちない
while (true) { Int[] array = new int[10];
…. System.out.println(array[15]);
}
無限ループする 例外を吐くAIプログラム
13
AI
- 14. • 要求を満たすための設計の指針・原則を考
案 Immutable
ゲーム
• 要求1:書き換え不可能 状態
ゲーム AIプログラ
– Immutableパターン ム
ゲームプラットフォー
状態
– 書き換え不可能な ム
オブジェクトを受け渡す
• 要求2:AIプログラムからの独立
– 設計原則:別スレッド(プロセス)での実行
• プロセス単位で動作するGoogle Chromeのタブのよ
うに
– 設計原則:AIプログラムの計算時間の制限 14
- 15. • 設計のパターンや原則をフレームワーク
に織り込む
– 利用者のプログラムも自然と設計原則に従う
• Immutableパターン
– 書き換えできない汎用的なクラスを提供
例)二次元座標を表すPointクラス
• 設計原則:別スレッド(プロセス)での
実行 AIプログラ
– AIプログラムの実行機能を提供 ム
ゲームプラットフォー
– 様々な機能を追加可能 ム
• 実行結果の記録・再生 フレームワーク(GAIA)
• Decoratorパターンを利用 15
- 16. • 実装のみの再利用からの脱却
– 分析,設計,実装に横断する一貫した再利用
• 開発フローにならう再利用可能な資産の
抽出
1. 品質特性から網羅的に要求を列挙
2. 要求を実現するパターンや設計原則を識別
3. パターンや設計原則をもとにフレームワーク
の開発
• ローマは一日してならず
– プロジェクトを回すたびに資産が成長
– いつでも使えるように整理しておくことが重
要 16
- 18. 品質特性
ターン
参加性(閾の低さ) 時間が離散的 擬似リアルタイム
同時
グラフ
マップが離散的
開発コスト 格子
戦略と戦術 3すくみ 3プレイヤー以上
公平性
対称マップ トーラス
稀少な状況
ゲーム性 ランダム要素
ゲームの流れを変える
クライマックス
エンターテイメント性 キープオンムービング 盤面縮退
仕切り直し 18
- 19. 抽出 擬似リアルタイムパターン
•背景
AI コンテストの参加者は幅広
い・・・
•フォース
参加者が AI プログラムの開発に割
り当てられるコストは不明・・・
•問題
•プレイヤーが選択した手の結果を リアルタイムゲームは AI 開発コス
反映させるタイミングに制約を加える ト増
•リフレッシュを高速(人間の知覚基準 •解決
プレイヤーが選択した手の結果を
で) 反映させるタイミングに制約を加
に行い擬似的にリアルタイムな演出 える
楽天コンテス
JC 2009 JC 2010
ト
適用
• 品質特性に寄与し, Samurai
繰り返し実装された仕様を一般化 Coding 2011
19
- 21. 擬似リアルタイムパターン 具体化
補完 仕切り直しパターン
•問題
キープオンムービングパター ・・・・・・
•解決
•問題 ン 盤面が同じ状態を繰り返した際に
強制的に盤面の状態を変化
各プレイヤーが同じ手を繰り返し •関連パターン
見かけ上試合の進行が止まる キープオンムービング
•解決
強制的な盤面の変更や、
繰り返し同じ手を打てない仕様の導 盤面縮退パターン
入 •問題
•関連パターン ・・・・・・
擬似リアルタイムパターン •解決
仕切り直しパターン 盤面を徐々に縮退させ行動範囲を制限
•関連パターン
盤面縮退パターン キープオンムービング
21
- 22. • ゲームデザインの特徴抽出、パターン言語化 [三宅,
AsianPLoP11]
– 「過去の自分と協力プレイ」「あいまいさを題材に」など
• ゲームアーキテクチャ研究の動向 [Morelli, SEKE 2011]
– 近年は graphics,
control の研究が
活発(続いてAI,
audio, network)
– フレームワーク、
設計パターン、
プロダクトライ
ン研究あり
22
- 23. • 設計原則、アーキテクチャ/デザインパターン
– 実装のみではなく、設計の再利用
– 実証済み。開発者間でぶれない。迷わず効率的。
• 設計原則やパターンをフレームワークへ落とし込
もう
– 実証済みノウハウに基づく高品質な実装の再利用へ
– フレームワークの再利用時には背景のパターンや原
則を把握するとより効率・効果的
• パターンの概念はゲームデザインにも使える
– ノウハウの伝達
– 実証済み。新らたなデザインのヒントに。
• パターン間の関連で、「ことば」をつなごう
– 補完、具体化
– ノウハウを深める、広げる 23
- 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