LoginSignup
3
9

More than 3 years have passed since last update.

ChainerRL + Minecraftで深層強化学習 ハンズオン [MineRL version]

Last updated at Posted at 2019-10-16

前回のQiita記事に引き続き、今回もMinecraftで深層強化学習する記事を書きます。

目的

なぜ、改めて書き直すかというと、前回使用したMalmöに比べて、より取り扱いのしやすいMinecraft環境「MineRL」が開発されたからです。MineRLとChainerRLを使って簡単に深層強化学習を試してみましょう。

MineRLについて

MineRLは、Malmöを利用したMinecraftの強化学習環境で、Malmöに比べて同期・安定・高速化などが実現しています。特に、Malmöでは同期性能が低く毎stepごとに行動をできない場合がありましたが、MineRLではそこが改善しています。タスクとしては以下などが用意されています。

  • MineRLTreechop
    • 64個の「原木 (log)」を集める
    • 森で、
鉄の斧を持った状態からスタート
    • log を入手するごとに +1 reward

  • MineRLNavigate
    • 指定されたゴール地点へ向かう
    • “compass” を観測可能;ゴール方向を指示してくれる
    • ゴール到達で +100 reward
    • “Dense” 版では更にゴールにとの距離に応じて毎ステップ報酬を貰える (遠ざかると負の報酬)

  • MineRLObtainDiamond
    • ダイヤモンドを入手する
    • 多くの中間アイテムが必要となる
    • ダイヤモンド入手で +1024 reward
    • 中間アイテム入手でも (小さめの) 報酬
    • デフォルトではアイテムの1回目の入手時のみ報酬が貰える
“Dense” 版では何度でも貰える

ベースライン実装

Requirements

  • git、makeをインストールしていること。
  • Dockerをインストールしていること。

動かし方

ハンズオンのためのコードをフォークしたレポジトリbaselinesで管理しています。

まずはcloneして、chainerrlのディレクトリに移動してください。

$ git clone https://github.com/keisuke-umezawa/baselines.git
$ cd baselines/general/chainerrl

次にDockerfileをビルドしましょう。Makefileに必要なコマンドが定義されているので、make buildとコマンドを打てば良いです。

$ make build

次に、実行してbashでログインしましょう。それもMakefileにコマンドが定義されているので、以下で大丈夫です。

$ make run
$ make bash

すると、環境設定されたDockerコンテナ内にbashでログインすることができます。
以下のコマンドで動かしたいスクリプトを動かすことができます。今回は試しに、dddqn.shを動かしてみましょう

# cd baselines
# APP="lxterminal -e 'bash -c /opt/baselines/dddqn.sh'" /usr/bin/graphical-app-launcher.py

実はこのコンテナ内には、VNCサーバーが動いており、ブラウザからlocalhost:6080にアクセスすると、コンテナ内のGUI環境にアクセスすることができます。

スクリーンショット 2019-09-28 15.23.58.png

上記のコマンドを実行して10分程度待つと、以下のようにMinecraftの画面も出てくるはずです。

スクリーンショット 2019-09-23 20.14.59.png

学習済みモデルを使った場合の動かし方

リンク先にそれぞれのタスクとモデルに対して、複数のモデルを用意しています。

例えば、Treechopをdddqnで解きたい場合は、リンク先https://github.com/keisuke-umezawa/baselines/releases/download/v0.0/dddqn1.zipのモデルを使用するといいでしょう。

$ wget https://github.com/keisuke-umezawa/baselines/releases/download/v0.0/dddqn1.zip
$ unzip dddqn1.zip

そうすると、8000000_finishのようなディレクトリができているはずです。

dddqn.shを以下に書き換え、上記と同じように動かしてみましょう。

python3 dqn_family.py \
  --gpu -1 --env MineRLTreechop-v0 --outdir results/MineRLTreechop-v0/dddqn \
  --final-exploration-frames 1000000 --final-epsilon 0.02 --arch dueling --replay-capacity 800000 --replay-start-size 1000 \
  --target-update-interval 1000 --update-interval 1 --agent DoubleDQN --monitor --lr 0.001 --gamma 0.99 --batch-accumulator mean \
  --always-keys attack --reverse-keys forward --exclude-keys back left right sneak sprint --load ./8000000_finish

Reference

3
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
9