Top Banner
Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition について 任天堂のスーパーマリオをトリビュートして Java 環境で開発した MarioAI Benchmark というものがあ る。 MarioAI Competition とは、この MarioAI Benchmark を用いてコントローラー(Agent)を作成しコン ペティションを行なうものである。 1-1. MarioAI Benchmark Java 言語で Agent を開発し、その Agent にマリオを操作させ、ステージの成績(Fitness)の合計点を競 Competititon である。 MarioAI Competition IEEE Symposium on Computational Intelligence and Games で開催されている。ま た国内でも Fuzzy System Symposium 2012(FSS2012)のプラットフォームゲーム CI セッションで開催され た。FSS2012 では LearningTrack のみ(トラックの説明は後述とする)で Competition が開催された。 【参考ページ】 Fuzzy System Symposium 2012 http://fss2012.j-soft.org/ マリオ AI 掲示板 http://sns.j-soft.org/community/82 Mario AI Championship 2012 http://www.marioai.org/ Mario AI Championship 2011 http://www.marioai.com/ Intelligent Media Lab (UEC IS MS) http://www.media.is.uec.ac.jp/medialab-wp/imlab/ 1/45
45

Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

May 09, 2018

Download

Documents

hoanghanh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

1 / 2

1. Mario AI Competitionについて

任天堂のスーパーマリオをトリビュートして Java環境で開発したMarioAI Benchmarkというものがあ

る。MarioAI Competition とは、このMarioAI Benchmark を用いてコントローラー(Agent)を作成しコン

ペティションを行なうものである。

図 1-1. MarioAI Benchmark

Java 言語で Agent を開発し、その Agent にマリオを操作させ、ステージの成績(Fitness)の合計点を競

う Competititon である。

MarioAI Competition は IEEE Symposium on Computational Intelligence and Games で開催されている。ま

た国内でも Fuzzy System Symposium 2012(FSS2012)のプラットフォームゲーム CIセッションで開催され

た。FSS2012では LearningTrackのみ(トラックの説明は後述とする)で Competition が開催された。

【参考ページ】

Fuzzy System Symposium 2012 http://fss2012.j-soft.org/

マリオ AI掲示板 http://sns.j-soft.org/community/82

Mario AI Championship 2012 http://www.marioai.org/

Mario AI Championship 2011 http://www.marioai.com/

Intelligent Media Lab (UEC IS MS) http://www.media.is.uec.ac.jp/medialab-wp/imlab/

1/45   

Page 2: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

2 / 2

1.1 Competitionのトラックについて

MarioAI Competition には、以下の4つのトラックがある。

GamePlayTrack

LearningTrack

LevelGenerationTrack

TuringTestTrack

ここでは GamePlayTrackと LearningTrackを紹介する。

1.1.1 GamePlayTrack

GamePlayTrack は、作成した Agent を用いて課題ステージをプレイし、その結果(得点)を競うトラ

ックである。各ステージ終了時の Fitnessを合計して得点を算出する。

現在MarioAI Competitionで主流となっているアルゴリズムとしてA-star探索アルゴリズムなどがある。

ここでは特にアルゴリズムについては触れないので、興味のある人は各自調べてもらいたい。

1.1.2 LearningTrack

LearningTrackは、指定された回数学習を行なった Agentを用いて課題ステージをプレイし、その結果

(得点)を競うトラックである。LearningTrack では、LearningAgent 型の Agent を使用する。学習には

決められた Levelseed や Leveldifficulty などを使用する。コンペティションによっては学習済みの Agent

を XMLファイルに書き出し、そのファイルを使ってコンペティションを行う場合もある。

学習の方法としては、遺伝的アルゴリズムや強化学習など、さまざまな方法がある。本書では学習の

サンプルとして、遺伝的アルゴリズムのサンプルソースコードと実際の使い方について簡単ではあるが

触れているので、そちらを参照してもらいたい。

2/45   

Page 3: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

1 / 18

1. eclipseのインストール

eclipseは、統合開発環境(IDE)の一つで、高機能ながらオープンソースであり、Javaをはじめとするい

くつかの言語に対応しているものである。こちらを用いてマリオ AI の開発を行う。この章では eclipse

のダウンロード方法、eclipse のインストール方法、マリオ AIを開発する上での必要な eclipse の設定に

関して書いてある。

1.1 準備

以下のファイルを準備する。カッコ内は実際に使用したものである。

eclipse (eclipse-jee-indigo-SR2-win32-x86_64.zip)

JDK (jdk-7u3-windows-x64.exe)

JRE (jre-7u7-windows-x64.exe)

eclipseは以下からダウンロードすることができる。

http://www.eclipse.org/

1.1.1 eclipseのダウンロード

上記のサイトに行き、図 1の赤枠部分からダウンロードページに移る。

図 1-1 eclipseのダウンロード

3/45   

Page 4: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

2 / 18

図 1-2の中の赤枠部分「Eclipse IDE for Java EE Developers」をダウンロードする。

図 1-2 eclipseのダウンロード

自分が使用している OS が 32bitなら 32bitのものを、64bitなら 64bitを選択する。

ダウンロードしてくる場所を選択する。

eclipse をダウンロードできる場所は複数ある。その中から、今回は図 1-3 の赤枠で示す、日本のミラ

ーからダウンロードした。

図 1-3 eclipseのダウンロード場所の選択

JDK、JREのダウンロード

JDK、JRE は以下からダウンロードすることができる。

http://www.oracle.com/technetwork/java/javase/downloads/index.html

4/45   

Page 5: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

3 / 18

1.2 eclipseのインストール

1.2.1 JDK、JREのインストール

JDK、JRE のインストールは exe を実行して、指示に従っていくだけなので省略する。今回のインス

トールを行った時の JDKの場所は C:¥Program Files¥Java¥jdk1.7.0_03となっている。

1.2.2 eclipseのインストール

eclipseのインストールディレクトリと eclipseのワークスペースを置くディレクトリを決め、作成する。

注意 1:C:¥Program Files¥eclipse-SDK-4.2-win32 のように英記号「-」をインストールディレク

トリに含めると,起動しなくなる可能性がある。

注意 2:eclipseのワークスペースを置くディレクトリは,半角文字でスペースを含まないこと。

今回は以下の場所に作成した。

インストールディレクトリ C:¥Program Files¥installeclipse

ワークスペースのディレクトリ C:¥workspace

インストールディレクトリにダウンロードしてきた eclipseを解凍したものを入れる

eclipseを実行する

実行すると eclipseと書いてある画面が出て、次に図 1-4のような画面が出てくる。ここで作成したワ

ークスペースのディレクトリを赤枠の「Browse...」から指定し、OKボタンを押す。

図 1-4 ワークスペースの指定

その後に、図 1-5のような画面が出てくる。

5/45   

Page 6: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

4 / 18

図 1-4 eclipseの実行画面 1

図 1-5の赤枠部分をクリックし図 1-6 の画面に移動する。

図 1-5 eclipseの実行画面 2

以上で eclipseのインストールは終了となる。次から eclipseの設定に移る。

6/45   

Page 7: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

5 / 18

1.3 eclipseの設定

1.3.1 JREの設定

JRE を設定するには、図 1-7の赤枠部分にある「Window」→「Preferences」を選択する。

図 1-6 JREの設定

「Preferences」を選択した後、図 1-8 の赤枠部分のように一覧の中から「Installed JREs」選択すると図

1-8の画面になる。

図 1-7 「Preferences」の画面

図 1-8の画面になったら、図 1-8中の緑枠内の「Search」をクリックする。「Search」をクリックする

と図 1-9のような画面が出てくる。この図 1-9の画面でインストールした JDKのディレクトリを指定す

る。(筆者の場合 C:¥Program Files¥Java¥JDK1.7.0_03)

7/45   

Page 8: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

6 / 18

図 1-8 JDKをインストールしたディレクトリの選択

ディレクトリを指定し、OKボタンをクリックすると図 1-10の画面になる。図 1-10の赤枠内のように

選択した JRE(赤枠内の「jre」)が追加されたら、□をクリックしチェックを入れて OKボタンをクリッ

クする。

図 1-9 JREの選択

これで JREの設定ができる。 以上で eclipseのインストールと設定を終了する。

8/45   

Page 9: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

7 / 18

1.4 MarioAIのパッケージの使用

ここからは、マリオ AI のパッケージのダウンロードと、開発に必要な JAR の設定について書かれて

いる、

1.4.1 MarioAIのパッケージをダウンロードする

マリオ AIのパッケージは以下からダウンロードできる。

http://www.marioai.org/gameplay-track/getting-started

1.4.2 MarioAIのパッケージを eclipseで使用する

プロジェクトを作成する

プロジェクトの作成は図 1-11のように、Fileをクリックした後、「New」 → 「Java Project」をク

リックして選択する。

図 1-10 プロジェクトの作成 1

選択すると図 1-12の画面が出てくる。

9/45   

Page 10: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

8 / 18

図 1-11 プロジェクトの作成 2

図 1-12の画面が出てきたら、赤枠部分にプロジェクトの名前を入力する。今回は「marioAI」とした。

入力したら緑枠内の「Finish」ボタンをクリックする。

クリックすると図 1-13の赤枠内のようにプロジェクトが作成され、Package Explorerの中に「marioAI」

が追加される。

図 1-12 プロジェクトの作成 3

図 1-13は作成されたプロジェクトの左側にある「+」をクリックし、中にあるものが展開された状態

になっている。

10/45   

Page 11: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

9 / 18

プロジェクトが作成されると、図 1-14の赤枠内のように workspace内にプロジェクトの名前の付いた

ディレクトリが作成される。

図 1-13 プロジェクトの作成 4

workspace内にディレクトリが作成されたら、ディレクトリ内にダウンロードしてきた MarioAIのパ

ッケージを解凍する。解凍が終わったら、解凍されたパッケージ内のファイルをプロジェクトのディレ

クトリ内にコピーする。

コピーが終わったら、図 1-15のように Package Explorer内で右クリックをし、「Refresh」をクリック

する。この「Refresh」はソースを追加した場合などに行う必要がある。詳しくは省略する。各自で eclipse

の基本操作方法は調べて欲しい。

図 1-14 プロジェクトの作成 5(リフレッシュの選択)

11/45   

Page 12: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

10 / 18

Refreshを行うと、図 1-13 の赤枠内の状態から、図 1-16 の赤枠内のように workspace にコピーしたも

のが反映される。

図 1-15 プロジェクトの作成 6(リフレッシュ後)

これで MarioAI のプロジェクトの作成が完了する。しかし、これだけではパッケージの Main や Play

を実行することができないので、さらに JARの設定をする必要がある。

12/45   

Page 13: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

11 / 18

1.4.3 JARを設定する

JAR を設定する方法は、図 1-17のように、プロジェクト「marioAI」の上で右クリックをし、プロジ

ェクトの「Properties」を選択する。

図 1-16 JAR の設定 1

「Properties」を選択すると、図 1-18のような画面が出てくる。

13/45   

Page 14: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

12 / 18

図 1-17 JAR の設定 2(「Properties」の画面)

図 1-18の画面が表示されたら、図 1-18の赤枠内の「Java Build Path」を選択する。選択すると図 1-19

のようなタブが重なっている画面が表示される。

このタブの中からで、図 1-19の赤枠内の「Libraries」を選択する。図 1-19 はすでに「Libraries」を選

択した時の画面になっている。

図 1-18 JAR の設定 3(「Libraries」を選択した状態)

14/45   

Page 15: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

13 / 18

図 1-19の画面が表示されたら、図 1-19の緑枠内の「Add JARs…」をクリックする。

「Add JARs…」をクリックすると図 1-20の「JAR Selection」画面が表示される。

図 1-19 JAR の設定 4(JAR の選択画面)

図 1-20の「JAR Selection」画面が表示されたら、「marioAI」の左に表示されている「+」をクリック

し、展開させる。次に、展開されて表示された「marioAI」内の「lib」の左にある「+」をクリックし、

展開させる。そうすると、図 1-20の赤枠内のように「lib」内にある 3つの「asm-all-3.3.jar」、「jdom.jar」、

「junit-4.8.2.jar」が表示される。これら 3 つの「.jar」ファイルを全て選択して緑枠内の OK ボタンをク

リックする。クリックすると図 1-21のようになる。

15/45   

Page 16: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

14 / 18

図 1-20 JAR の設定 5(JAR の選択が終了した時の画面)

図 1-21の赤枠内のように、図 1-19の状態から先ほど選択した 3つの「.jar」ファイルが追加されてい

る事がわかる。これで、JAR の設定ができ、パッケージのMain、Playが実行できるようになる。次は

実際にパッケージのMainを実行して、操作をしてみる。

16/45   

Page 17: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

15 / 18

1.5 MarioAIのMainを実行してみる

1.5.1 Mainを実行し、実際に操作してみる

まず eclipseで「Main.java」を開く。「Main.java」は図 1-22に示す「marioAI/src/ch/idsia/scenarios/manual」

にある。eclipseの Package Explorer上では、marioAIを展開、srcを展開すると表示される、パッケージ

の中の「ch.idsia.scenarios.manual」というパッケージの中に入っている。

図 1-21 Main.javaのある場所

図 1-22の赤枠内にある「Main.java」をダブルクリックすると、図 1-23のように eclipseの画面になる。

図 1-22 Main.javaが開かれた状態の eclipseの画面

図 1-23のようになったら図 1-23 の赤枠部分を拡大した、図 1-24 の赤枠内の「実行ボタン」を押す。

17/45   

Page 18: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

16 / 18

図 1-23 実行ボタンの場所

図 1-24の実行ボタンを押すと、図 1-25のような画面が現れる。

図 1-24 実行ボタンを押すと表示される画面

図 1-25の画面が表示される。これはプロジェクト内にエラーがあると表示される画面であるが、今回

の実行には問題無いので無視する事ができる。気にせずに「Proceed」ボタンを押せばいい。

以上でMainを実行することができる。以下に簡単なキーボードでの操作ボタン配置について表 1に、

オプションの操作について表 2に書いておく。

表 1 マリオの基本操作キー

割り当てられた

キーボードのキー

機能 説明

キーボードの「↑」 マリオの移動:上

キーボードの「↓」 マリオの移動:下

キーボードの「→」 マリオの移動:右

キーボードの「←」 マリオの移動:左

A マリオの RUNボタン 押し続けると加速ができ、ファイアマリオ状態な

ら押すとファイアボールが出せる

S マリオの JUMP ボタン 押し続けている間、限界までジャンプが高くな

る。再度ジャンプする場合には、一度ボタンを離

す必要がある。

18/45   

Page 19: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

17 / 18

表 2 画面などのオプションを操作するキー

Z 画面のサイズを変更する 画面サイズが大きくなる。もう一度押すと元の画

面サイズに戻る。

W 次のステージに移動する そのステージを終了し、次のステージに移ること

ができる。(クリアしたとして終了する)

Space 一時停止させる マリオや敵、時間などが止まる。もう一度押すと

ゲームが再開され、マリオや敵などが動き出す。

G 画面にセルを表示する マリオが取得できる情報の範囲を示すセルが表示

される。詳しくは別途記載(levelScene)

8 限界まで速度を上げる 実行中のパソコンが可能な限り、ゲームの速度を

上昇させる。

より詳しくキーボードのボタン配置について知りたければ、図 1-26の赤枠内に示す。

「ch/idsia/agents/controllers/human」にある「HumanKeyboardAgent.java」や、「CheaterKeyboardAgent.java」

の中に書いてあるので、参照していただきたい。

.

図 1-25 キーボード操作の書いてあるファイルの場所

ここでプレイしているマリオのステージは、パラメータとして設定できるレベルやシードによって地

形や敵の数などが変化している。パラメータにどのようなものがあるかは別の章に詳しく記述してある。

19/45   

Page 20: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

18 / 18

1.6 参考ページ

ダウンロード方法やインストール方法を解説している webページはたくさんあるので参照していた

だきたい。また筆者が参考にしたページには eclipseの日本語化についても書かれている。

参考ページ

金子邦彦研究室

Eclipse 4.2 のダウンロード,インストール,設定,日本語化,基本操作

http://www.kkaneko.com/rinkou/javaintro/eclipse.html

20/45   

Page 21: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

1 / 4

3. エージェント開発

3.1 Agent インタフェースについて

3.1.1 概要

MarioAIの ch.idsia.agentsパッケージ内に Agentインタフェースがある。エージェント開発はこの

Agentインタフェースを実装したサブクラスを作ることで行う。作成したクラスでは Agentインタフェ

ースの抽象メソッドをきちんとオーバーライドする必要がある。

Agent.java

3.2 Agent インタフェースのメソッド

Agent作成の際に特に重要となるメソッドを以下に 3つ紹介する。

boolean[] getAction();

Agent が次のフレームでとる行動を boolean 型の Action 配列で返すためのメソッド。Action はコン

トローラーのボタンに対応しており、配列の 0番目が左、1番目が右、2番目が下、3番目がジャンプ、

4 番目がダッシュ、5 番目が上のキーにそれぞれ対応している。これらのキー番号は以下にあるクラ

スで定義されている。

ch/idsia/benchmark/mario/engine/sprites/Mario.java

public void reset();

reset()は、ゲームの開始時、およびステージが変わる毎に呼ばれるメソッドである。このメソッド

は、Agentの持つ変数を初期化する際などに利用する。

void integrateObservation(Environment environment);

環境情報を取得するためのメソッド。Environmentインタフェースの get~()メソッドを用いて、

Agentの周囲の情報を取得する。環境インタフェースは以下にある。

ch/idsia/benchmark/mario/environments/Environment.java

21/45   

Page 22: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

2 / 4

3.3 Agent 解説(例:ForwardJumpingAgent の場合)

3.3.1 Main での Agent 実行の流れ

既存のサンプル Agentは ch.idsia.agents.controllers パッケージにまとめておいてある。その中の一つで

ある、ForwardJumpingAgentをMainで実行する方法を紹介する。

① ch.idsia.scenariosパッケージにあるMain.java にForwardJumpingAgentをインポートする。

import ch.idsia.agents.controllers.ForwardJumpingAgent;

② Main.javaのmainメソッドに次の行を追加。Mainで実行するエージェントの指定を行う。

Agent agent = new ForwardJumpingAgent();

marioAIOptions.setAgent(agent);

③ Main.javaを実行。

④ ゲーム画面が起動し、マリオがジャンプしながら走り出す。

3.3.2 ForwardJumpingAgent について

ForwardJumpingAgent は ch.idsia.agents.controllers パッケージ内に用意されたエージェントの一つで

ある。このエージェントは単純な動作のみが記述された、非常にシンプルな構成となっている。エー

ジェントというもののイメージを掴んでもらうため、これについて解説を行う。

サンプルプログラム(ForwardJumpingAgent.java)

22/45   

Page 23: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

3 / 4

・解説

importについて

まず、3行目では Agentインタフェースを使うためのインポートをしている。4行目では、Mario

クラスをインポートしている。ここからは getAction()内で用いられる Mario.KEY_JUMP などの

ように、Action 配列におけるキー番号を持ってくることができる。5 行目では、Environment イ

ンタフェースをインポートしている。これは、LevelSceneや Enemiesなどのフィールド情報のほ

かに、Environment.numberOfKeys(Action におけるキーの数)のような情報もとってくること

ができる。

エージェントクラスの作り方

エージェント作成はパッケージで用意された Agent インタフェースを用いて行う。7 行目の

implements Agent で Agent インタフェースの実装を宣言する。今回、ForwardJumpingAgent と

同じパッケージ内に BasicMarioAIAgentクラスがある。これは IntegratedObservation()メソッド

で行う環境情報取得などの基本的な操作が記述されており、これを継承することで、エージェント

を作っている(extends BasicMarioAIAgent) 。もちろん、BasicMarioAIAgentは使わなくても良い。

その場合は、IntegrateObservation()などの Agentインタフェースのメソッドを全て自前で定義す

る必要がある。

reset()メソッドでやっていること

19行目でまず Action配列を用意する。そして、20行目で右キーを trueに、21行目でダッシュ

キーを trueに。これにより、マリオはゲームが始まると同時に右方向へダッシュすることになる。

getAction()メソッドでやっていること

getAction()内 14 行目ではジャンプに関する操作を行っている。右辺の isMarioAbleToJump は

マリオがジャンプできる状態のとき true となり、!isMarioOnGround はマリオが地面に接してい

ないとき true となる。よって、マリオがジャンプ可能または空中にいるときにジャンプアクショ

ンは true となる。マリオは地面に着地してから、再びジャンプできるようになるまで少しだけ間

がある。したがって、右辺が false となるのはマリオが着地した瞬間ということになる。なぜこの

ような操作にしているかというと、マリオはジャンプキーを押すとジャンプをするが、押しっぱな

しにしていると着地したあとに再びジャンプを行わない。一度ジャンプキーをはなして(false にし

て)やる必要があるためである。

これらの reset()と getAction()の組み合わせにより、マリオはひたすら右方向へダッシュしながら

ジャンプを繰り返すという動作を行う。

23/45   

Page 24: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

4 / 4

3.4 Environment インタフェースについて

Environmentインタフェースでは環境情報取得に関するメソッドを取り扱っている。Environmentイン

タフェース内の get~()メソッドを用いることで、マリオの周囲の環境情報を取得することができる。

取得可能な情報は、主にフィールド情報(LevelScene)、敵情報(Enemies)、マリオの状態(marioState)

の 3種類である。具体的に各情報がどのように表現されているか、詳細については 4章で説明する。

3.4.1 応用編

ForwardJumpingAgent ではひたすらジャンプを繰り返すだけのエージェントだが、これを障害物があ

ったらジャンプという風に書き換えてみよう。

ForwardJumpingAgent の getAction()を、環境情報を利用し、目の前に障害物(壁 or 敵)があったらジャ

ンプをするというプログラムに書き換えてみると以下のようになる。

ForwardJumpingAgent.java > getAction()

・解説

getReceptiveFieldCellValue(Levelscene情報取得について)

getReceptiveFieldCellValue()は BasicMarioAIAgentに用意されたメソッドである。これは、引

数で指定された場所にある LevelSceneの情報をもってくることができる。引数にはmarioEgoRow、

marioEgoColという変数を用いているが、これはマリオのいる行数、列数を表している。列数に+

1 することでマリオのひとつ右のマスを指定している。これによりマリオの目の前に障害となるも

のがあるかどうかを判定している。

getEnemiesCellValue(Enemies情報取得について)

getEnemiesCellValueも同様でこちらは Enemiesの情報をとってくることができる。

これらが、Sprite.KIND_NONE でなかったら、つまり何かしらの敵がいたら、先ほどと同様にジ

ャンプ操作を行うというようになっている。

追加した if文によりただジャンプを繰り返すだけだったエージェントは、マリオの1マス右側に壁

となるもの、あるいは何かしらの敵がいた場合はジャンプをしてそれを回避するような動作をする

エージェントに変わった。このように環境情報の取得を行い、それに対するアクションの決定をど

のように行うかを考えていくことが Agent開発の基本となる。

24/45   

Page 25: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

1 / 7

4. ステージパラメータ説明

4.1 Zoom Levels (ZLevels)

ZLevels は情報を取る細かさであり、BasicMarioAIAgent に使われている。

3 つレベルがある。

図 4- 1: マリオゲームプレイ

図 4- 2: Zoom Level 2

25/45   

Page 26: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

2 / 7

図 4- 3: Zoom Level 1

図 4- 4: Zoom Level 0

それぞれの Zoom Levels は以下に説明する。

26/45   

Page 27: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

3 / 7

4.1.1 Zoom Level 2 ( ZLevel2, Z2, 2 )

ZLevel2 は一番粗い情報を取るレベルである。

LevelScene

数字 定数 説明

0 障害物がない、 通過できる。

2 GeneralizerLevelScene.COIN_ANIM コイン

-60 GeneralizerLevelScene.BORDER_CANNOT_PASS_THROUGH

障害物があり、通過できない(土

管,キラー砲台 , 全てのブロッ

ク)

5 GeneralizerLevelScene.PRINCESS ピーチ姫(ゴール)

1 他の障害物があり、通過できない

(地面)

Enemies

数字 定数 説明

1 敵あり

0 Sprite.KIND_NONE 敵なし

4.1.2 Zoom Level 1 ( ZLevel1, Z1, 1 )

ZLevel1 は ZLevel2 より細かい情報を取るレベルである。

LevelScene

数字 定数 説明

-24 GeneralizerLevelScene.BRICK ブロック

2 GeneralizerLevelScene.COIN_ANIM コイン

-60 GeneralizerLevelScene.BORDER_CANNOT_PASS_THROUGH ハードの障害物、通過できな

-62 GeneralizerLevelScene.BORDER_HILL

ソフトの障害物, 飛び越える

ことができる(下から通って

飛ぶことができ、上に立つこ

とができる)

-85 GeneralizerLevelScene.FLOWER_POT_OR_CANNON 土管、キラー砲台

61 GeneralizerLevelScene.LADDER はしご(未実装)

5 GeneralizerLevelScene.PRINCESS ピーチ姫(ゴール)

0

障害物なし

27/45   

Page 28: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

4 / 7

Enemies

数字 定数 説明

0 Sprite.KIND_NONE 敵なし

3 Sprite.KIND_FIRE_FLOWER ファイアフラワー

2 Sprite.KIND_MUSHROOM キノコ

25 Sprite.KIND_FIREBALL ファイアボール

80 Sprite.KIND_GOOMBA

踏みつける、またはファイアで倒せる敵(キラー、クリ

ボー、羽クリボー、緑ノコノコ、緑パタパタ、赤ノコノ

コ、赤パタパタ、甲羅)

93 Sprite.KIND_SPIKY 踏むことでは倒せない敵(トゲゾー、フラワー)

4.1.3 Zoom Level 0 ( ZLevel0, Z0, 0 )

ZLevel0 は一番細かい情報を取るレベルである。

LevelScene

数字 定数 説明

-20 GeneralizerLevelScene.BREAKABLE_BRICK ブロック(空、コイン、フラ

ワー、キノコ)

-22 GeneralizerLevelScene.UNBREAKABLE_BRICK はてなブロック(キノコ、フ

ラワー、コイン)

2 GeneralizerLevelScene.COIN_ANIM コイン

-60 GeneralizerLevelScene.BORDER_CANNOT_PASS_THROUGH ハードの障害物、通過できな

-82 GeneralizerLevelScene.CANNON_MUZZLE キラー砲台(発射口)

-80 GeneralizerLevelScene.CANNON_TRUNK キラー砲台(胴体)

-90 GeneralizerLevelScene.FLOWER_POT 土管

-62 GeneralizerLevelScene.BORDER_HILL

ソフトの障害物, 飛び越え

ることができる(下から通っ

て飛ぶことができ、上に立つ

ことができる)

-61 GeneralizerLevelScene.LADDER はしご(未実装)

5 GeneralizerLevelScene.PRINCESS ピーチ姫(ゴール)

28/45   

Page 29: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

5 / 7

Enemies

数字 定数 説明

0 Sprite.KIND_NONE 敵なし

-31 Sprite.KIND_MARIO

マリオ

80 Sprite.KIND_GOOMBA クリボー

95 Sprite.KIND_GOOMBA_WINGED

羽クリボー

82 Sprite.KIND_RED_KOOPA

赤ノコノコ

97 Sprite.KIND_RED_KOOPA_WINGED

赤パタパタ

81 Sprite.KIND_GREEN_KOOPA

緑ノコノコ

96 Sprite.KIND_GREEN_KOOPA_WINGED

緑パタパタ

84 Sprite.KIND_BULLET_BILL キラー

93 Sprite.KIND_SPIKY トゲゾー

99 Sprite.KIND_SPIKY_WINGED

羽トケゾー

91 Sprite.KIND_ENEMY_FLOWER

パックンフラワー

13 Sprite.KIND_SHELL 甲羅

2 Sprite.KIND_MUSHROOM キノコ

3 Sprite.KIND_FIRE_FLOWER フラワー

25 Sprite.KIND_FIREBALL ファイアボール

29/45   

Page 30: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

6 / 7

4.2 ParameterContainer

ch/idsia/utils にある

パラメータ 説明

-ag path to agent (使うエージェントのパス)

-gv GameViewer <on|off> (環境情報と敵情報の表)

-ld level: difficulty (ステージの難易度)

-ls level: seed (ステージのシード)

-lde level: dead ends count (行き止まりの有無)

-lca level: cannons count (キラー砲台の有無)

-ltb level: Tubes count (土管の有無)

-lb level: blocks count (ブロックの有無)

-lco level: coins count (コインの有無)

-lg level: gaps count (穴の有無)

-lhb level: hidden blocks count (隠しブロックの有無)

-le level: enemies; set up with bit mask (敵の有無)

-lf level: flat level (地面を平面にするかどうか)

-fps Frames Per Second - update frequency (1秒あたりのフレーム数)

-ze Zoom level enemies (敵情報の細かさ)

-zs Zoom level scene (環境情報の細かさ)

図 4- 5: 環境情報と敵情報の表(GameViewer)

30/45   

Page 31: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

7 / 7

4.3 SystemOfValues, MarioCustomSystemOfValues

得点について

4.3.1 SystemOfValues

デフォルトの得点のパラメータ

MarioAI Benchmark MarioAI FSS 2012 説明

distance = 1; distance = 1; スタートからの距離

win = 1024; win = 0; ゴールしたかどうか

mode = 32; mode = 0;

ゴールまたは死んだときの

マリオの状態(ラージ1点、

ファイアマリオ2点)×モー

coins = 16; coins = 0; コイン1枚の得点

flowerFire = 64; flowerFire = 0; フラワー1個の得点

kills = 42; kills = 0; 敵1匹を倒した得点

killedByFire = 4; killedByFire = 0; ファイアで倒した得点

killedByShell = 17; killedByShell = 0; 甲羅で倒した得点

killedByStomp = 12; killedByStomp = 0; 踏むことで倒した得点

mushrooms = 58; mushrooms = 0; キノコ1個の得点

timeLeft = 8; timeLeft = 0; ゴールまたは死んだとき残

り時間

hiddenBlocks = 24; hiddenBlocks = 0; 隠しブロック1個の得点

4.3.2 MarioCustomSystemOfValues

SystemOfValues を拡張(extends)して調整した得点

MarioAI Benchmark MarioAI FSS 2012 説明

distance = 2; distance = 1; 距離

win = 1; win = 0; ゴール

mode = 500; mode = 0; モード

coins = 0; coins = 0; コイン

flowerFire = 1640; flowerFire = 0; フラワー

mushrooms = 1650; mushrooms = 0; キノコ

kills = 2; kills = 0; 敵を倒す

killedByFire = 4; killedByFire = 0; ファイアで倒す

killedByShell = 170; killedByShell = 0; 甲羅で倒す

killedByStomp = 1; killedByStomp = 0; 踏むことで倒す

timeLeft = 1; timeLeft = 0; 残り時間

hiddenBlocks = 24; hiddenBlocks = 0; 隠しブロック

31/45   

Page 32: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

1 / 12

4.学習型エージェント・学習について

4.1 LearningTrack とは

LearningTrackは作成した AIを設定された回数学習させ、学習させた AIを用いてゲームをプレイさせ

得点を競うというものになる。(コンペティションの場合の学習回数や学習を行わせるステージのパラ

メータなどはあらかじめ設定されている)

学習を行わせるプログラムは src.ch.idsia.scenarios.manualにある LearningTrackクラスを用いる。AIに

は LearningAgent型のエージェントを用いる。

LearningTrack クラスで学習した結果を Xml ファイルに出力することが可能である。この Xml ファイ

ルを用いることで src.ch.idsia.scenarios.manual にある LearnedPlayTrack クラスで学習後の AI を用いてプ

レイさせることが出来るのも特徴である。

4.2 LearningTrack クラスについて

LearningTrackクラスは2つのメソッド evaluateSubmission メソッドとMainから構成されている。

Main部 79行目

LearningAgent learningAgent = new ○○○();

上部○○○に使用したい LearningAgent 型のインターフェースを持つ LearningAgentを明記する。

上記のコードだと LearningWithGA という学習エージェントを用いている

82行目

marioAIOptions.setAgent(learningAgent);

上記上部のコードを用いることで学習 Agentのセットが完了する。

84行目

marioAIOptions.setArgs("-ld 2 -ls 0 –lde on");

上記下部のコードは ParameterContainer クラスで定義されているパラメータの値を設定することで学習

環境のステージ設定を調整している。この場合レベル 2・シード値 0・袋小路ありという設定になる。

後のパラメータはデフォルトのものを使用したステージで学習させるという意味になる。

次の 87行目が肝になる

float finalScore = LearningTrack.evaluateSubmission(marioAIOptions,learningAgent);

evaluateSubmission メソッドは規定の回数学習後ステージを一回プレイしたときの得点を返すメソッド

である。このメソッドを走らせることにより学習が行われる。この evaluateSubmission メソッドについ

て詳しく触れてみたいと思う。

32/45   

Page 33: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

2 / 12

4.3 evaluateSubmission メソッドについて

evaluateSubmission メソッド大きく分けて二つ(学習部分・学習後、のエージェントを用いた得点計算

部)に分かれる。この学習部について見ていく。以下に学習部にあたるコードを示す。

30 行目 setVisualization(false)は学習中のマリオのゲーム画面を描画するかどうか決定するメソッドであ

る。trueなら描画する、falseなら描画しない。上記の場合だと学習中描画しない。この方が早く学習が

終わるのは自明だろう。

35 行目 learn メソッドを呼び出すことにより学習エージェント上で学習が行われる重要なメソッドだ。

この learnメソッドについては後程 LearningAgentにて触れることとする。

40 行目 learn メソッドを用いて学習を行い出来上がったエージェントは bestAgent として定義される。

この bestAgentを Agent型の agentに代入する。

ここからは学習後のエージェントを用いた得点計算部ついて軽く触れて以降と思う。

33/45   

Page 34: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

3 / 12

46行目の setVisualizationメソッドを trueにすることで描画、これにより学習後のエージェントの挙動を

ゲームプレイ画面上で確認できる。

55 行目以降は学習後のエージェントを用いて runSingleEpisode メソッドで一回ステージをプレイさせそ

の結果を fという変数に入れ、この変数を返している。

このような形で LearningAgent(学習エージェント)を動かしている。

では次に LearningAgentがどのようになっているのか見ていきたいと思う。

4.4 LearningAgent について

今回例として遺伝的アルゴリズム(以後 GA と略す)を用いた LearningAgent を例に見ていきたいと

思う。GA とはデータ(解の候補)を遺伝子で表現した「個体」を複数用意し、適応度の高い個体を優

先的に選択して交叉(組み換え)・突然変異などの操作を繰り返しながら解を探索するアルゴリズムで

ある。MarioAI の世界でこの GA を表すと、個体に AI を用いて、複数の AI を用意し、fitness(1 回のス

テージのプレイで得られた得点)の高い個体を優先的に選択し交叉・突然変異などの操作を繰り返しより

良い AIを作成する。

今回配布しているパッケージの中にある【LearningWithGA】と【GAAgent】の二つのプログラムがこ

のGAを用いた LearningAgentになる。なぜ二つのプログラムが必要になるのか次に説明したいと思う。

4.5 LearningAgent の構成について

LearningAgentは二つのプログラムが必要になる。これを簡単に理解するために図 4-1に概念図を示す。

34/45   

Page 35: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

4 / 12

図 4 - 1 LearningAgentの概念図

図 4-1に示すように Agent型の学習エージェントと LearningAgent型の学習環境二つが必要になる。

LearningWithGAが学習環境にあたり、GAAgentが学習エージェントにあたる。このように二つのプロ

グラムから学習を行うエージェントを作成することが出来る。また LearningAgent型のプログラムを GA

ではなくニューラルネットワークや強化学習などのアルゴリズムに変えることもできる。その場合は学

習エージェントもそれにしたがって変更する必要がある。この学習エージェントと学習環境は相互関係

を持つものである。なぜそのように相互関係を持つのか【LearningWithGA】と【GAAgent】の二つのプ

ログラムを観察しながら解説していく。

35/45   

Page 36: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

5 / 12

4.6 LearningWithGA クラスについて

この二つのプログラムを動かすのは前述の LearningTrackなどのコントローラによるものである。ま

ず呼び出されるのは LearningAgent型を持つ LearningWithGA(学習環境)になる。これについて見ていく。

13行目から始まるフィールドについて説明していく。まず 14行目の popsizeは一世代で作成する個体数

である。

15行目のgenerationは世代数になる。学習回数は大会の規定で1万回と決められていたので10000/popsize

となっている。個体を作成するというプロセスについては後程「GAAgentについて」で詳しく説明する

が、簡単に説明すると GAAgentプログラムでエージェントをひとつ作成することである。そのエージェ

ントを用いてステージを 1回プレイさせる。そこで得られた得点を用いて個々の個体の優位さを判断す

る。要するに popsizeが大きければ世代数は少なくなる。popsizeが小さければ世代数は多くなるが優秀

36/45   

Page 37: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

6 / 12

な個体が生まれる確率が低くなり学習効率が悪くなる。この popsizeと世代数の設定については個々で

工夫して欲しい。

16行目 bestnumは交叉させない個体数。

19行目の mutateRateは突然変異の確率。

20行目の crossRateは交叉率。

mutateRate・crossRateの数値は固定ではない、これも popsize同様個々で工夫して欲しい。

41行-44 行目は popsizeで設定した数値分の個体を作成している。この個体は GAAgentクラスで作成し

ている。GAAgentクラスについてはまた後で説明する。

次に learnメソッドについて触れたいと思う。LearningTrackクラスでも触れたが、この learnメソッド

が主として使われるメソッドになる。

52 行目の compfitメソッドは 81行目に記されている。行っていることは簡単にまとめると一世代で作

成したすべての個体を一回ずつステージでプレイさせ評価値を算出。その結果を降順にソート。もし過

去の最高評価値(fmax)を超える個体が生成出来たら xmlファイルを生成する。Xmlファイルの生成は

74行目にある writeFileメソッドで行っている。

75 行目を見てもらいたい。これはパッケージ直下の[output]フォルダに xmlファイルを保存するとい

う意味になる。「output/」が保存先。その先が保存名の設定になる。保存名は過去の最高評価値を超えた

エージェントの名前の後ろに xmlファイルの生成した時間が記されたものになる。この xmlファイルを

用いることで逐次学習させずにゲームをプレイすることが出来る。src.ch.idsia.scenarios.manualにある

LearnedPlayTrackクラスにおいて xmlファイルを用いてゲームを行うことが出来るクラスになる。

37/45   

Page 38: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

7 / 12

learnメソッドの解説に戻る。62行目の selectメソッドでは GA のアルゴリズムにおける優良な遺伝子

の選択行為を行っている。これは交叉の親となる 2 つの遺伝子をルーレット戦略によって選択するメソ

ッドになる。コードは 112 行目から書かれている。

63行目の crossメソッドは GAのアルゴリズムにおける交叉を行っている。selectメソッドで選ばれた親

となる 2つの遺伝子を実際に交叉し、新しい個体を生成。交叉率はフィールド上で設定した値を用い、

その値に従った割合で交叉を行う。コードは 156行目から書かれている。

70行目の mutateメソッドは GAのアルゴリズムにおける突然変異を行っている。コードは 176行目か

ら書かれている。このメソッドは 1世代間で最高評価値を取った bestAgentを除いて遺伝子情報を操作

する。この操作とは遺伝子情報を乱数で上書きするというものだ。遺伝子情報についてのは GAAgent

クラスの説明で解説しようと思う。

38/45   

Page 39: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

8 / 12

4.7 LearnedPlayTrack クラス

4. LearningWithGAクラスについてにおいて少し触れたが、xmlファイルを用いる事で学習済みのエー

ジェントをプレイすることが出来る。

図 4 - 2 outputフォルダ

図 4-2のように outputフォルダに xmlファイルが保存されている。この xmlファイルを選び

learnedPlayTrack の 53行目の String AgentXML=“ ”;に xml ファイルの場所及び名前を記述する。

下 53行目の例だと srcフォルダ下の competitionフォルダ下の fss2012フォルダ下の learningフォルダ下

の UEC フォルダ下にある bestAgent.xmlファイルを用いている。

39/45   

Page 40: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

9 / 12

4.8 GAAgentクラスについて

まず Agent型を implements していることから GAAgentが Agent型という事がわかる。そしてこの

GAAgentは geneという変数を持つ。これが GA の遺伝子にあたる。この遺伝子は 65536個の長さを持

ち、各遺伝子座には 0~32 の byte型の数値が入る(33行目参照)初期値は乱数が代入される。これが

出力(以後 outputと略す)となる。

環境から取得する入力(以後 inputと略す)数は 16個になる。Input一個は 1か 0のビット、bit表現

で表せられる。Inputの内訳は enemies情報が 7bit・levelScene情報が 7bit・isMarioOnGroundが 1bit・

isMarioAbleToJump が 1bit。これら GAAgentの概要図を図 4-3に示す。

40/45   

Page 41: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

10 / 12

図 4 - 2 GAAgentの概要

実際にエージェントの行動を決定するメソッドは getAction メソッドとなる。

enemies情報・levelScene情報・isMarioOnGround・isMarioAbleToJump を用いて inputを構成し、84-87

行目で行動を決定している。ここで例として目の前のマスにクリボーが一匹、マリオが地上にいるかつ

41/45   

Page 42: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

11 / 12

ジャンプできる場合どのように出力が得られるか図 4-4 を使って説明する。遺伝子情報は適当に当ては

めた数値である。

図 4 - 4 行動決定プロセス

enemies情報・levelScene情報共に(-1,-1)・(0,-1)・(1,-1)・(-1,0)・(1,0)・(-1,1)・(1,1)順に inputに

入る。要するに enemies情報・levelScene情報それぞれ(-1,-1)が一番大きな桁数となる。inputは

0000100000000011→4099と変換し、遺伝子情報の 4099番目に入っている output情報に基づいてマリオ

の行動を決定する。output情報はMARIO_KEY_DOWN(下)・MARIO_KEY_JUMP(ジャンプ)・

MARIO_KEY_LEFT(左)・MARIO_KEY_RIGHT(右)・MARIO_KEY_SPEED(ファイア/ダッシュ)という順

に並んでいる。

Action[0] = MARIO_KEY_DOWN

Action[1] = MARIO_KEY_JUMP

Action[2] = MARIO_KEY_LEFT

Action[3] = MARIO_KEY_RIGHT

Action[4] = MARIO_KEY_SPEED

図 4-4の場合 10001なので MARIO_KEY_DOWNとMARIO_KEY_SPEED が選ばれる。

42/45   

Page 43: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

12 / 12

4.9 他の学習エージェントについて

src.ch.idsia.agents.learning に多数の学習エージェントが含まれている、例えば MediumSRNAgentはニ

ューラルネットワークを用いたエージェントであったりGA以外のアルゴリズムを用いたプログラムが

多数あるので是非活用していただきたいと思う。

43/45   

Page 44: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

1 / 2

6. その他

6.1 GeneralizerLevelScene.java

ch/src/idsia/benchmark/mario/engine にある GeneralizerLevelScene.java では levelScene 変数で用いる、ス

テージの情報を定数で宣言しているので、ここから定数を用いることが出来る。例えば、“あるマス(x,y)

にブロック(BRICK)がある場合”のような条件式を使用したい場合、

if(levelScene[y][x]==GeneralizerLevelScene.BRICK){}

のようにすることで、条件式を使用することが出来る。

6.2 Sprite.java

ch/src/idsia/benchmark/mario/engine/sprites にある Sprite.java では enemies 変数で用いる、敵の情報を定

数で宣言しているので、ここから定数を用いることができる。例えば、“あるマス(x,y)にクリボー

(GOOMBA)がいる場合”のような条件式を使用したい場合

if(enemies[y][x]==Sprite.KIND_GOOMBA){}

のようにすることで、条件式を使用することが出来る。

7. 作者の Agent の様子

作者が LearningTrack を用いて 10,000 回学習をさせた Agent を ch/src/idsia/scenarios/manual にある

LearnedPlayTrack.javaで実行させたスコアは 13,511であった。

プラットフォームゲーム CIの結果 http://sns.j-soft.org/community/82/reference/22532

44/45   

Page 45: Mario AI Competition X8Z - Media Systems Lab. · Mario AI manual The University of Electro-Communications 1 / 2 1. Mario AI Competition_X8Z õ ³ ýb«îÃîÐÜ ºÜÅ ... (@ Q#ÝKZ8

Mario AI manual The University of Electro-Communications

2 / 2

8. Q&A

Q:Mainで自作した Agent(例:MyAgent.Java)を動かそうとしたら赤い下線が出てエラーになる

A:自作した Agentが importされていない可能性がある。プログラムの先頭に

import ch.idsia.agents.controllers.MyAgent

を付け加える必要がある。自作 Agentを作成するたびに書き換える必要が有るため、面倒な人は

import ch.idsia.agents.controllers.*

とすることで、以降は書き直す必要がなくなる。

Q:GamePlayTrackでステージの状況(Levelseedや Leveldifficulty)を変えて Agentを動かしてみたい

A: basicTask.setOprionsAndReset(marioAIOptions)の下に marioAIOptions.setArgs()メソッドを書

き足すことで変更することができる。例えば、Levelseed:1234、Leveldifficulty:10 にしたい場合

marioAIOptions.SetArgs(“-ld 10 –ls 1234”);

とすることで指定した Levelseed・Leveldifficultyを用いたステージでAgentを動かすことが出来る。

この他にも、穴やブロックの有無、敵の出現などを設定することが出来る。詳しくは4章の“パラ

メータ設定”を参照すると良い。

Q: 敵を出したくなかったからParameterContainer.javaの-leを offにして敵を出さなくすることは出来た

が、onに戻しても敵が出現しなくなった

A: 敵を出現させるためには、”on”ではなく、””(何も書かない)に戻すこと。

45/45