仅在Jupyter笔记本电脑中显示OpenAI体育馆

Mas*_*rat 9 python reinforcement-learning python-3.x jupyter-notebook openai-gym

我想在笔记本中玩OpenAI体育馆,并且将体育馆内联渲染。

这是一个基本示例:

import matplotlib.pyplot as plt
import gym
from IPython import display
%matplotlib inline

env = gym.make('CartPole-v0')
env.reset()

for i in range(25):
   plt.imshow(env.render(mode='rgb_array'))
   display.display(plt.gcf())    
   display.clear_output(wait=True)
   env.step(env.action_space.sample()) # take a random action

env.close()
Run Code Online (Sandbox Code Playgroud)

这行得通,我在笔记本中看到了健身房:

笔记本中的健身房

但!它还会打开一个交互式窗口,显示完全相同的内容。我不希望打开此窗口:

互动式视窗

jef*_*ind 10

我刚刚找到了一个非常好的解决方法。这适用于支持rgb_array渲染模式的环境。然后我们可以使用 matplotlib 的imshow快速替换来显示动画。以下内容应该在 Jupyter Notebook 的一个单元格内运行。

import os
import gym
import matplotlib.pyplot as plt
os.environ["SDL_VIDEODRIVER"] = "dummy"
from IPython.display import clear_output

env = gym.make("LunarLander-v2")#, render_mode="human")
env.action_space.seed(42)

observation, info = env.reset(seed=42, return_info=True)

for _ in range(1000):
    observation, reward, done, info = env.step(env.action_space.sample())

    if done:
        observation, info = env.reset(return_info=True)
        
    clear_output(wait=True)
    plt.imshow( env.render(mode='rgb_array') )
    plt.show()

env.close()
Run Code Online (Sandbox Code Playgroud)


Eoi*_*ray 7

我在这里做了一个工作示例,您可以进行分叉:https : //kyso.io/eoin/openai-gym-jupyter,提供了两个在Jupyter中渲染的示例-一个作为mp4,另一个作为实时gif。

.mp4示例非常简单。

import gym
from gym import wrappers

env = gym.make('SpaceInvaders-v0')
env = wrappers.Monitor(env, "./gym-results", force=True)
env.reset()
for _ in range(1000):
    action = env.action_space.sample()
    observation, reward, done, info = env.step(action)
    if done: break
env.close()
Run Code Online (Sandbox Code Playgroud)

然后在一个新的单元格中

import io
import base64
from IPython.display import HTML

video = io.open('./gym-results/openaigym.video.%s.video000000.mp4' % env.file_infix, 'r+b').read()
encoded = base64.b64encode(video)
HTML(data='''
    <video width="360" height="auto" alt="test" controls><source src="data:video/mp4;base64,{0}" type="video/mp4" /></video>'''
.format(encoded.decode('ascii')))
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用。您尝试过“CartPole-v0”吗?窗户仍然为我打开。“SpaceInvaders-v0”不会出现此问题,但这不是我想要使用的环境,因此这不相关。 (4认同)