Je veux jouer avec les salles de sport OpenAI dans un cahier, la salle de sport étant rendue en ligne.
Voici un exemple de base:
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()
Cela fonctionne et je vois la salle de sport dans le cahier:
Mais! il ouvre également une fenêtre interactive qui montre exactement la même chose. Je ne veux pas que cette fenêtre soit ouverte:
J'ai fait ici un exemple pratique que vous pouvez créer: https://kyso.io/eoin/openai-gym-jupyter avec deux exemples de rendu dans Jupyter - l'un en tant que MP4 et l'autre en tant que gif en temps réel.
L’exemple .mp4 est assez simple.
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()
Puis dans une nouvelle cellule
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')))