osim-rlは、人間の筋骨格モデルと物理ベースのシミュレーション環境です。
人間モデルのコントローラーを開発して、最小限の労力で速度命令に従って、歩いたり走ったりすることが目的になります。
osim-rl - https://github.com/stanfordnmbl/osim-rl
osim-rlは、人間の筋骨格モデルと物理ベースのシミュレーション環境です。
人間モデルのコントローラーを開発して、最小限の労力で速度命令に従って、歩いたり走ったりすることが目的になります。
osim-rl - https://github.com/stanfordnmbl/osim-rl
前回収集した人間のデモ操作データを使って事前学習を行います。
環境設定に関しては、前回の記事(模倣学習② 人間のデモを使って事前学習を行う)を参照して下さい。
(Ubuntu 19.10で動作確認しています。)
人間のデモ操作データであるbowling_demo.npzファイルとrecorded_imagesフォルダを使って模倣学習を行うコードは以下の通りです。
[コード]
1 | import gym |
人間の操作したデータを事前学習するにはmodel.pretrain関数(24行目)を使います。
引数の意味は下記の通りです。
また模倣学習を行った後、さらに強化学習を行う場合はmodel.learn関数(27行目)をコメントアウトします。
実行すると、スコアは「120.2」になりました。(人間のデモ操作によって結果は変わります。)
模倣学習と合わせて強化学習も合わせて実行した結果や、強化学習のみで実行した結果も調査していきたいと思います。
ランダム行動では報酬を見つけにくい環境に対応するために模倣学習を試してみます。
Atari環境の1つであるボーリングゲーム(Bowling)を実行環境とします。
(Windowsではうまく動作しなかったので、Ubuntu 19.10で動作確認しています。)
下記のコマンドを実行し、実行環境をインストールします。
1 | pip3 install gym |
人間のデモ収集を行うコードは下記になります。
[コード]
1 | import random |
デモ収集にはgenerate_expert_trajを使います。引数の意味は下記の通りです。
返値はデモ demo(dict型)となります。
実行すると、次のような画面が表示されます。右側のウィンドウにフォーカスをあてるとゲームを操作することができます。

up、downで位置を選択し、fireでボールを投げます。
ボールを投げた後にup、downでボールの起動を曲げることができます。
10ゲーム(1エピソード)の人間の操作が収集され、bowling_demo.npzファイルとrecorded_imagesフォルダが出力されます。
次回は、今回収集した人間のデモデータを使って事前学習を行います。
gym-gazeboは、ROS(Robot Operating System)とGazeboを使用したロボット工学向けの環境です。
ROSはロボット開発のための開発ツールやライブラリが含まれたオープンソースソフトウェア、Gazeboはロボット開発のためのシミュレータになります。
gym-gazebo - https://github.com/erlerobot/gym-gazebo/
Duckietownは、MIT(マサチューセッツ工科大学)発の、ロボット工学とAIを学ぶためのプラットフォームです。
自動車(Duckiebot)、道路、信号、標識、障害物、輸送を必要とする人(Duckies)、そしてそれらが住む都市(Duckietown)で構成されています。
Duckietown - https://www.duckietown.org/
gym-duckietownは、Duckietownのシミュレータ環境になります。
duckietown/gym-duckietown - https://github.com/duckietown/gym-duckietown
(PGE)Parallel Game Engineは、人工知能実験用のゲームエンジンです。ブロック積みゲーム、カートポール、四足歩行、テニスなどの環境が提供されています。
(PGE)Parallel Game Engine - https://github.com/222464/PGE
gym-miniworldは、強化学習とロボット研究のためのミニマルな3Dインテリア環境です。
gym-miniworld - https://github.com/maximecb/gym-miniworld
部屋、ドア、廊下などさまざまなオブジェクトを含む環境をシミュレートするために使用できます。
Obstacle Towerは、エージェントが塔をできるかぎり上の階まで登ることを目的としたゲーム環境です。
Obstacle Tower - https://github.com/Unity-Technologies/obstacle-tower-challenge
機械学習研究者向けのコンテストのために開発された環境で、Unityで制作されています。
Gym Retro環境で利用できるゲームの一覧を取得します。
下記のコードを準備します。
[コード]
1 | import retro |
実行すると下記のようにゲーム一覧が表示されます。
[実行結果]
0 1942-Nes ['1Player.Level1'] 1 1943-Nes ['Level1'] 2 3NinjasKickBack-Genesis ['1Player.Colt.Level1'] 3 8Eyes-Nes ['1Player.Arabia.Level1'] 4 AaahhRealMonsters-Genesis ['Level1'] 5 AbadoxTheDeadlyInnerWar-Nes ['Level1'] 6 AcceleBrid-Snes ['SilverMarine.DefaultSettings.Level1'] 7 ActRaiser2-Snes ['Level1'] 8 ActionPachio-Snes ['Level1'] 9 AddamsFamily-GameBoy ['Level1'] (途中略) 985 ZombiesAteMyNeighbors-Snes ['Start'] 986 ZoolNinjaOfTheNthDimension-Genesis ['Level1'] 987 ZoolNinjaOfTheNthDimension-Sms ['Level1'] 988 ZoolNinjaOfTheNthDimension-Snes ['Level1']
989種類のゲームが利用できることが確認できます。
ここで表示されるのは「ゲームインテグレーション」と呼ばれ、「開始状態」「報酬」「エピソード完了」という情報が定義されているゲームになります。
前回はシューティングゲームをランダムで実行しましたが、今回は強化学習アルゴリズムを実装してゲームを攻略してみます。
baselinesがインストールされていない場合は、下記コマンドを実行してインストールしておきます。
1 | git clone https://github.com/openai/baselines.git |
Airstrikerを学習して実行するコードは次のようになります。
[コード]
1 | import retro |
上記コードを実行すると最初に学習処理が実行されます。(私の環境ではGPUなしで60分以上かかりました。)
それが完了されると下記のようなウィンドウが表示され、学習したモデルでゲームが実行されます。

ランダム行動よりまともにゲームができているようです。