MinecraftのOpenAI Gym環境 MineRLをWindowsで動かすための環境構築方法について。
ほぼ個人用メモ。
インストール方法は、公式ドキュメントを元にしている。
OpenJDKインストール
Chocolateyを使用してインストールする。
PowerShellを管理者権限で起動し、
choco install openjdk8
MineRLインストール
pip install minerl==0.3.6
バージョンは現時点の最新。
起動テストとgradle修正
iPythonやJupyter QtConsoleなどから、以下のスクリプトを実行する。
import minerl
import gym
env = gym.make('MineRLNavigateDense-v0')
数分待つと、以下のようなビルドエラーが発生する。
* What went wrong:
Could not resolve all dependencies for configuration ':compileClasspath'.
> Could not resolve org.spongepowered:mixin:0.7.5-SNAPSHOT.
Required by:
com.microsoft.MalmoMod:Minecraft:0.37.0
> Could not resolve org.spongepowered:mixin:0.7.5-SNAPSHOT.
> Unable to load Maven meta-data from http://repo.spongepowered.org/maven/org/spongepowered/mixin/0.7.5-SNAPSHOT/maven-metadata.xml.
> Could not GET 'http://repo.spongepowered.org/maven/org/spongepowered/mixin/0.7.5-SNAPSHOT/maven-metadata.xml'. Received status code 520 from server: Origin Error
gradleの定義が古く、URLが間違っているため、以下のファイルをテキストエディタで開き、手動で編集する。
C:\Users\<username>\anaconda3\envs\minerl\Lib\site-packages\minerl\env\Malmo\Minecraft\build.gradle
(変更前)
url = "http://repo.spongepowered.org/maven/"
(変更後)
url = "https://repo.spongepowered.org/maven/"
参考:assanuma Profile - githubmemory
起動テスト
以下のスクリプトを実行する。
import minerl
import gym
env = gym.make('MineRLNavigateDense-v0')
MineCraftが起動する。
obs = env.reset()
を実行すると、ゲームが開始し、小さいウィンドウになる。
↓
env.render()
を実行すると、別ウィンドウで、拡大画面と現在の状態が表示される。
サンプル実行
ランダムに行動するサンプルプログラムを実行する。
import minerl
import gym
env = gym.make('MineRLNavigateDense-v0')
obs = env.reset()
done = False
while not done:
action = env.action_space.sample()
obs, reward, done, info = env.step(action)
ランダムにアクションをサンプリングし、アクションがなくなるまで実行される。
カメラ操作もランダムなので、スムーズな表示ではない。
カメラをゆっくり操作して、大きい画面でウェイトを入れて表示してみる。
import minerl
import gym
from time import sleep
env = gym.make('MineRLNavigateDense-v0')
obs = env.reset()
done = False
while not done:
action = env.action_space.sample()
action['camera'] = [0, min(5, max(-5, action['camera'][1]))]
obs, reward, done, info = env.step(action)
env.render()
sleep(0.01)