無料でMinecraftを始める【OpenAI】【MARLO 2018】
推荐的是将游戏机设为Linux系统的机器。
我想每户家庭大概都会有一台。
可能不太常听到,但它是不逊于3DS和PSvita的最棒的游戏机。

暂且不谈这一段对于AI研究的台词,据说是Microsoft和OpenAI提供了Minecraft的Python模块供我们使用,所以我尝试了一下。
(假如万一有人不理解上面那句话的意思,就不要想着免费玩我的世界了,老老实实买软件吧。)
马洛 2018年
稍微跑题一下,听说有一个以(假设为基础的)深层强化学习AI为参考的Minecraft竞赛,冠军奖金据说是100万日元。

我决定尝试挑战这个,就算只是试一试。
大致来说,有一种依赖关系。
健身房(OpenAI)<- malmo <- marlo(←我想要这个!)
下面是三个存储库的链接:
– OpenAI的gym存储库:https://github.com/openai/gym
– 微软的malmo存储库:https://github.com/Microsoft/malmo
– crowdAI的marLo存储库:https://github.com/crowdAI/marLo
是的。
(我试图安装malmo却不理解这个,结果搞砸了)
环境建立
如果只依照 https://github.com/crowdAI/marLo ,那就好了。
因为anaconda似乎是推荐的,所以我选择了pyenv×anaconda的方式。
非常简单,而且还能在Minecraft中玩得很正常,我感到很惊讶。
开发环境
ubuntu18.04
GeForce GTX 1060
cuda9.0
cudnn7
(下手にdockerとか使う方法を採用するとgpu周りとゲーム画面の描画周りが面倒なのでそこらへんには注意しました)
pyenv環境構築済み
安装
GeForce GTX 1060
cuda9.0
cudnn7
(下手にdockerとか使う方法を採用するとgpu周りとゲーム画面の描画周りが面倒なのでそこらへんには注意しました)
pyenv環境構築済み
我使用pyenv而不是GUI的Anaconda来使用Anaconda,所以稍微做了一些调整。
$ pyenv install anaconda3-5.2.0 # 最新版のanaconda3
$ pyenv local anaconda3-5.2.0
$ echo ". /home/nama/.pyenv/versions/anaconda3-5.2.0/etc/profile.d/conda.sh" >> ~/.zshrc # あるいは ~/.bashrc等
$ source ~/.zshrc
$ conda create python=3.6 --name marlo
$ conda config --add channels conda-forge
$ conda activate marlo
$ conda install -c crowdai malmo
$ pip install -U marlo
$ python -c "import marlo" # エラーが出ないか確認。
$ python -c "from marlo import MalmoPython" # エラーが出ないか確認。
以上
Single Agent Example
まずマイクラを起動して、pythonからそれを操作する。
启动我的世界
$MALMO_MINECRAFT_ROOT/launchClient.sh -port 10000
$MALMO_MINECRAFT_ROOT/launchClient.sh -port 10000
好像Anaconda自动为我设置了环境变量”MALMO_MINECRAFT_ROOT”。尽管启动需要几十秒并出现了Java的一些警告,但它还是能运行,所以可以算是好的。

ちなみに、
普通にゲーム画面をマウスで操作すれば、普通にマイクラができました(合法無料マイクラktkr)
利用規約は守りましょう。
一开始,我不太了解视野的操作方式,但是当我点击游戏窗口并按下Enter键时,就可以使用鼠标指针来操作视野。再次按下Enter键可以恢复鼠标的操作。
代理人的动作.
#!/usr/bin/env python
# $MALMO_MINECRAFT_ROOT/launchClient.sh -port 10000
import marlo
client_pool = [('127.0.0.1', 10000)]
join_tokens = marlo.make('MarLo-MazeRunner-v0',
params={
"client_pool": client_pool
})
# As this is a single agent scenario,
# there will just be a single token
assert len(join_tokens) == 1
join_token = join_tokens[0]
env = marlo.init(join_token)
observation = env.reset()
done = False
while not done:
_action = env.action_space.sample()
obs, reward, done, info = env.step(_action)
print("reward:", reward)
print("done:", done)
print("info", info)
env.close()
#!/usr/bin/env python
# $MALMO_MINECRAFT_ROOT/launchClient.sh -port 10000
import marlo
client_pool = [('127.0.0.1', 10000)]
join_tokens = marlo.make('MarLo-MazeRunner-v0',
params={
"client_pool": client_pool
})
# As this is a single agent scenario,
# there will just be a single token
assert len(join_tokens) == 1
join_token = join_tokens[0]
env = marlo.init(join_token)
observation = env.reset()
done = False
while not done:
_action = env.action_space.sample()
obs, reward, done, info = env.step(_action)
print("reward:", reward)
print("done:", done)
print("info", info)
env.close()
一旦执行,
2
{}
reward: 0
done: False
info {'has_mission_begun': True, 'is_mission_running': True, 'number_of_video_frames_since_last_state': 3, 'number_of_rewards_since_last_state': 0, 'number_of_observations_since_last_state': 1, 'mission_control_messages': ['<?xml version="1.0" encoding="UTF-8"?><ping/>'], 'observation': {'yawDelta': -0.5, 'nextSubgoal': {'XPos': 43.5, 'YPos': 227.0, 'ZPos': 1.5, 'description': 'MazeSubpoint_2'}}}
reward: 0
done: False
info {'has_mission_begun': True, 'is_mission_running': True, 'number_of_video_frames_since_last_state': 3, 'number_of_rewards_since_last_state': 0, 'number_of_observations_since_last_state': 1, 'mission_control_messages': [], 'observation': {'yawDelta': -0.5, 'nextSubgoal': {'XPos': 43.5, 'YPos': 227.0, 'ZPos': 1.5, 'description': 'MazeSubpoint_2'}}}
reward: 0
done: False
info {'has_mission_begun': True, 'is_mission_running': True, 'number_of_video_frames_since_last_state': 3, 'number_of_rewards_since_last_state': 0, 'number_of_observations_since_last_state': 1, 'mission_control_messages': [], 'observation': {'yawDelta': -0.5, 'nextSubgoal': {'XPos': 43.5, 'YPos': 227.0, 'ZPos': 1.5, 'description': 'MazeSubpoint_2'}}}
reward: 0
:
:
嗯,由于我個人偏好jupyter,
pip install jupyter
jupyter notebook
这样的感觉

(代理人的行为太不稳定了!)
是的。
就是这样!
(paraphrase: 就是这么简单!)
需要注意的事项
デフォルトではconda activate marloをしたディレクトリでしかminecraftを起動できなさそう
jupyterを使うときは、conda activate marloをしたディレクトリで。
最后
jupyterを使うときは、conda activate marloをしたディレクトリで。
如果有任何不正確之处,请在评论中告诉我。
\def\textlarge#1{%
{\rm\Large #1}
}
\def\textsmall#1{%
{\rm\scriptsize #1}
}
(然后尽力用小声说)
我 很 喜 欢 你