Google ColabでOpenAIジムを使用しようとしています。ノートブックがリモートサーバーで実行されているため、ジムの環境をレンダリングできません。
Jupyterノートブックの解決策をいくつか見つけましたが、リモートサーバーにアクセスできないため、これらの解決策はcolabでは機能しません。
誰かがグーグルコラボで動作するこのための回避策を知っているのだろうか?
コラコットの答えは正しくありません。
実際、OpenAi Gymは、matplotlibを使用するだけで、ゆっくりと協調的に、アルビエットでゆっくりとレンダリングできます。
方法は次のとおりです。
インストールxvfb&その他の依存関係
!apt-get install -y xvfb python-opengl > /dev/null 2>&1
&インストールpyvirtual display:
!pip install gym pyvirtualdisplay > /dev/null 2>&1
次に、matplotlib&ipythondisplayを含むすべてのライブラリをインポートします。
import gym
import numpy as np
import matplotlib.pyplot as plt
from IPython import display as ipythondisplay
次に、ディスプレイをpyvirtualディスプレイからインポートし、画面サイズを初期化します(この例では400x300 ...)。
from pyvirtualdisplay import Display
display = Display(visible=0, size=(400, 300))
display.start()
最後に、ジムの "rgb_array" renderを機能的に使用して、「Screen」変数にレンダリングし、Matplotlibを使用してscreen変数をプロットします。 (Ipythonディスプレイを使用して間接的にレンダリングされます)
env = gym.make("CartPole-v0")
env.reset()
prev_screen = env.render(mode='rgb_array')
plt.imshow(prev_screen)
for i in range(50):
action = env.action_space.sample()
obs, reward, done, info = env.step(action)
screen = env.render(mode='rgb_array')
plt.imshow(screen)
ipythondisplay.clear_output(wait=True)
ipythondisplay.display(plt.gcf())
if done:
break
ipythondisplay.clear_output(wait=True)
env.close()
私の作業中のColaboratoryノートブックのカートポールのデモへのリンク:
https://colab.research.google.com/drive/16gZuQlwxmxR5ZWYLZvBeq3bTdFfb1r_6
注:すべてのジム環境が「rgb_array」レンダリングモードをサポートしているわけではありませんが、基本的なもののほとんどはサポートしています。
この問題に数え切れないほどの時間を費やした後に私が見つけた断然最良の解決策は、ビデオを録画して再生することです。 UXに関しては、実際のレンダリング機能に非常に近くなります。
これは、ビデオを記録してレンダリングするGoogle colabノートブックですhttps://colab.research.google.com/drive/12osEZByXOlGy8J- MSpkl3faObhzPGIrB
楽しい :)
これを試して :-
!apt-get install python-opengl -y
!apt install xvfb -y
!pip install pyvirtualdisplay
!pip install piglet
from pyvirtualdisplay import Display
Display().start()
import gym
from IPython import display
import matplotlib.pyplot as plt
%matplotlib inline
env = gym.make('CartPole-v0')
env.reset()
img = plt.imshow(env.render('rgb_array')) # only call this once
for _ in range(40):
img.set_data(env.render('rgb_array')) # just update the data
display.display(plt.gcf())
display.clear_output(wait=True)
action = env.action_space.sample()
env.step(action)