2012年02月25日

【AI】Mario AI Competition動かしてみた



スーパーマリオの動きをAIを使って制御しようというプロジェクトです。
このプログラムが動かせるということで動かしてみました。
ゲームを実行するにはいくつかやり方があったので、各方法についてメモしておきます。

2009年版プロジェクト

http://julian.togelius.com/mariocompetition2009/gettingstarted.php
こちらの右上より「source code」のリンクをクリックし「marioai.zip」をDLして展開する。
展開された「marioai」フォルダを適当な位置に移動する。Ex.「C:\marioai」

続いて、コマンドプロンプトを開いて以下を実行する
cd C:\marioai\classes
java ch.idsia.scenarios.Play

marioai2009.jpg

するとこんな感じのマリオゲームが実行される。
クリアするか敵にあたってゲームオーバになるとゲームが終了し
コマンドプロンプト上にゲーム内スコアが表示される。

操作方法
・左右矢印キー:左右移動
・下矢印キー:しゃがむ
・Sキー:ジャンプ
・Aキー:ダッシュ

また、プログラム実行時にエージェントプログラムを引数で割り当てる事ができる
java ch.idsia.scenarios.Play ch.idsia.ai.agents.ai.ForwardAgent

このエージェントファイルはマリオがただ右に動き、
壁や敵がいたらジャンプで避けるエージェントプログラムです。

「marioai\classes\ch\idsia\ai\agents\ai」に様々なエージェントファイルがあります。

中には動かないものもありましたが、いろいろ動かして試してみると面白いです。

2011年版プロジェクト

http://www.marioai.org/gameplay-track/getting-started
こちらのサイトから「Mario AI Benchmark source package」をクリックしてダウンロードします。

展開された「MarioAI」フォルダを適当な位置に移動させる。Ex.「C:\MarioAI」

コマンドプロンプトを開き以下を実行する。
cd C:\marioai\bin\AmiCobuild\PyJava
java ch.idsia.scenarios.Main

marioai2011.jpg

こんな感じで実行されます。2009年版はPlayでしたが、今回はMainで実行します。
2009年版とはあまり代わり映えしません。2011年年版はゲーム終了時に
コマンドプロンプトに詳細な情報が出力されるようになっています。

[~ Mario AI Benchmark ~ 0.1.9]

[MarioAI] ~ Evaluation Results for Task: BasicTask
Evaluation lasted : 99668 ms
Weighted Fitness : 4385
Mario Status : Loss...
Mario Mode : small
Collisions with creatures : 3
Passed (Cells, Phys) : 177 of 256, 2845 of 4096 (69% passed)
Time Spent(marioseconds) : 162
Time Left(marioseconds) : 37
Coins Gained : 71 of 285 (24% collected)
Hidden Blocks Found : 0 of 0 (0% found)
Mushrooms Devoured : 0 of 0 found (0% collected)
Flowers Devoured : 0 of 0 found (0% collected)
kills Total : 2 of 40 found (5%)
kills By Fire : 0
kills By Shell : 0
kills By Stomp : 2
MEMO INFO: Reason of death: Collision with a creature [Goomba]

2011年版のエージェントプログラムの実行も2009年とは少し違います。
実行ファイル名の後に「-ag」オプションを追加した後にエージェントファイルを指定します。
java ch.idsia.scenarios.Main -ag ch.idsia.agents.controllers.ForwardAgent

また、更にオプションを追加することでゲーム内容を変更させることも可能です。

・ステージ難易度の設定
-ld (num)
ステージの難易度をnumだけ上昇させる。デフォルト値は0。

・乱数シードを設定
-ls (num)
乱数シードをnumに変更する。デフォルト値は0。

・ステージの広さを設定
-ll (num)
ステージの幅をnumに設定する。デフォルト値は256。

・ステージ番号を設置
-lt (num)
ステージ番号をnumに設定する。デフォルト値は0。
0:Overground(0)
1:Underground(1)
2:Castle(2)

その他数多くのパラメータがあるが、詳しくは
「MarioAI\src\ch\idsia\utils\ParameterContainer.java」
を参照。

試しに以下を実行するとこうなります。
java ch.idsia.scenarios.Main -ag ch.idsia.agents.controllers.ForwardAgent -ld 3 -ls 5 -ll 512 -lt 2

marioai2011_customised.jpg

設定したオプションのようにステージパラメータが変更されています。

やっぱEclipseで動かしたい。

コマンドライン上で動かすのではなくEclipse上で動かしたいと思います。
成功した例に関してメモします。

http://www.marioai.org/LevelGeneration/level-generation-track-source
こちらの「MarioLevelCompetition2011」をクリックしダウンロードします。
「MarioLevelComp2011」が展開されると思います。

このプロジェクトも同様に
cd C:\ MarioLevelComp2011\bin
java dk.itu.mario.engine.Play

のように入力することで以下のゲームが実行できます。
mariocompetition2011.jpg

アイテム取得時の時間停止表現がついていて、上記2つと比べても一番マリオっぽいです。

このプログラムに関してEclipseで動いたので、動かし方についてメモします。
「MarioLevelComp2011」にある「src」フォルダを、
Eclipse上で新規作成したJapaProjectの「src」に移動させて実行すればOKです。

setup.jpg

いろいろ聞かれるかもしれませんがとりあえずOKでも問題ないと思います。

参考サイト

・Mario AI Competitionを動かす - Symfoware
http://symfoware.blog68.fc2.com/blog-entry-120.html

・Kanpe’s one step: Mario AI Competition 2009->2011 移行
http://kanpe777.blogspot.com/2011/11/mario-ai-competition-2009-2011.html


posted by Noa at 02:25 | Comment(0) | AI | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。