無料でMinecraftを始める【OpenAI】【MARLO 2018】

推荐的是将游戏机设为Linux系统的机器。
我想每户家庭大概都会有一台。
可能不太常听到,但它是不逊于3DS和PSvita的最棒的游戏机。

Dell_XPS_Laptop_Front-Desktop.png

暂且不谈这一段对于AI研究的台词,据说是Microsoft和OpenAI提供了Minecraft的Python模块供我们使用,所以我尝试了一下。

(假如万一有人不理解上面那句话的意思,就不要想着免费玩我的世界了,老老实实买软件吧。)

马洛 2018年

稍微跑题一下,听说有一个以(假设为基础的)深层强化学习AI为参考的Minecraft竞赛,冠军奖金据说是100万日元。

marlo.png

我决定尝试挑战这个,就算只是试一试。

大致来说,有一种依赖关系。

健身房(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環境構築済み

安装

我使用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

好像Anaconda自动为我设置了环境变量”MALMO_MINECRAFT_ROOT”。尽管启动需要几十秒并出现了Java的一些警告,但它还是能运行,所以可以算是好的。

Screenshot from 2018-09-11 16-53-46.png

ちなみに、
普通にゲーム画面をマウスで操作すれば、普通にマイクラができました(合法無料マイクラ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()

一旦执行,

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

这样的感觉

Screenshot from 2018-09-11 17-03-55.png

(代理人的行为太不稳定了!)

是的。

就是这样!

(paraphrase: 就是这么简单!)

需要注意的事项

    デフォルトではconda activate marloをしたディレクトリでしかminecraftを起動できなさそう
    jupyterを使うときは、conda activate marloをしたディレクトリで。

最后

如果有任何不正確之处,请在评论中告诉我。

\def\textlarge#1{%
  {\rm\Large #1}
}
\def\textsmall#1{%
  {\rm\scriptsize #1}
}

(然后尽力用小声说)
  我 很 喜 欢 你

bannerAds