25
鷲崎 弘宜、坂本 一憲、和田 雅彦 早稲田大学グローバルソフトウェアエ ンジニアリング研究所 http://www.washi.cs.waseda.ac.jp/ 1 CEDEC 2012(コンピューターエンターテイメントデベロッパーズカンファレンス)

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

Embed Size (px)

Citation preview

鷲崎 弘宜、坂本 一憲、和田 雅彦

早稲田大学グローバルソフトウェアエンジニアリング研究所

http://www.washi.cs.waseda.ac.jp/

1

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

• ねらい

–パターンと原則に関して、自分なりの意義・価値観を持つ。

• 終了時の目標

–ゲームAIプラットフォームの設計におけるパターンや原則を知っている。

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

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

2

• 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

Context Strategy

algorithmInterface()

ConcreteStrategyA

algorithmInterface()

ConcreteStrategyB

algorithmInterface()

・・・

・・・

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プログラム

AI AI AI 不正な 書き換え

• 要求を満たすための設計の指針・原則を考案

• 要求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 2009 JC 2010 楽天コンテスト

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

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

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

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

適用

20

21

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

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

仕切り直しパターン

盤面縮退パターン

補完

具体化

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

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

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

•問題 ・・・・・・

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

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

•問題 ・・・・・・

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

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

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

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

22

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

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

• 設計原則、アーキテクチャ/デザインパターン – 実装のみではなく、設計の再利用

– 実証済み。開発者間でぶれない。迷わず効率的。

• 設計原則やパターンをフレームワークへ落とし込もう – 実証済みノウハウに基づく高品質な実装の再利用へ

– フレームワークの再利用時には背景のパターンや原則を把握するとより効率・効果的

• パターンの概念はゲームデザインにも使える – ノウハウの伝達

– 実証済み。新らたなデザインのヒントに。

• パターン間の関連で、「ことば」をつなごう – 補完、具体化

– ノウハウを深める、広げる 23

• 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