代码之家  ›  专栏  ›  技术社区  ›  MasterScrat

仅在Jupyter笔记本中显示OpenAI gym

  •  4
  • MasterScrat  · 技术社区  · 6 年前

    我想在笔记本上玩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()
    

    我在笔记本上看到了健身房:

    gym in notebook

    但是! 我不想让这扇窗户开着:

    interactive window

    1 回复  |  直到 6 年前
        1
  •  10
  •   Eoin Murray    6 年前

    我在这里做了一个很好的例子,你可以用叉子叉: 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()
    

    然后在一个新的牢房里

    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')))
    
        2
  •  0
  •   bad programmer    4 年前

    这对我在Ubuntu18.04LTS中使用,在本地渲染gym。但是,我相信即使在远程Jupyter笔记本服务器上也能工作。

    首先,在终端中运行以下安装:

    pip install gym
    python -m pip install pyvirtualdisplay
    pip3 install box2d
    sudo apt-get install xvfb
    

    就这样。使用以下代码段配置matplotlib的呈现方式:

    import matplotlib.pyplot as plt
    from pyvirtualdisplay import Display
    display = Display(visible=0, size=(1400, 900))
    display.start()
    
    is_ipython = 'inline' in plt.get_backend()
    if is_ipython:
        from IPython import display
    
    plt.ion()
    
    # Load the gym environment
    
    import gym
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    env = gym.make('LunarLander-v2')
    env.seed(23)
    
    # Let's watch how an untrained agent moves around
    
    state = env.reset()
    img = plt.imshow(env.render(mode='rgb_array'))
    for j in range(200):
    #     action = agent.act(state)
        action = random.choice(range(4))
        img.set_data(env.render(mode='rgb_array')) 
        plt.axis('off')
        display.display(plt.gcf())
        display.clear_output(wait=True)
        state, reward, done, _ = env.step(action)
        if done:
            break 
            
    env.close()