Lecture 2: Gym

# # Lecture 2: Gym

Dependencies and setup

(this can take a minute or so…)

# !pip install swig

# !pip install rldurham  # latest release
# !pip install git+https://github.com/robert-lieck/rldurham.git@main  # latest main version (typically same as release)
# !pip install git+https://github.com/robert-lieck/rldurham.git@dev  # latest dev version
import gymnasium as gym
import rldurham as rld  # Reinforcement Learning Durham package with helper functions

Basic environment

env = gym.make('CartPole-v1', render_mode="human")
observation, info = env.reset(seed=42)

for episode in range(10):
    observation, info = env.reset()
    done = False
    while not done:
        action = env.action_space.sample()  # random action
        observation, reward, terminated, truncated, info = env.step(action)
        done = terminated or truncated

env.close()

Reinforcement Learning Durham:

_rldurham_ Python package

# drop-in for gym.make that enables logging (use render_mode="rgb_array" to enable video rendering)
env = rld.make('CartPole-v1', render_mode="rgb_array")

# record statistics (returned in info) and videos
env = rld.Recorder(
    env,
    smoothing=10,                       # track rolling averages (not required for coursework)
    video=True,                         # enable recording videos
    video_folder="videos",              # folder for videos
    video_prefix="xxxx00-agent-video",  # prefix for videos
    logs=True,                          # keep logs
)

# make reproducible by seeding everything (python, numpy, pytorch, env)
# this also calls env.reset
seed, observation, info = rld.seed_everything(42, env)

# optionally track statistics for plotting
tracker = rld.InfoTracker()

# run episodes
for episode in range(11):
    # recording statistics and video can be switched on and off (video recording is slow!)
    env.info = episode % 2 == 0   # track every other episode (usually tracking every episode is fine)
    env.video = episode % 4 == 0  # you only want to record videos every x episodes (set BEFORE calling reset!)
    #######################################################################
    # this is the same as above
    observation, info = env.reset()
    done = False
    while not done:
        action = env.action_space.sample()  # Random action
        observation, reward, terminated, truncated, info = env.step(action)
        done = terminated or truncated
    #######################################################################
        if done:
            # per-episode statistics are returned by Recorder wrapper in info
            #     'idx': index/count of the episode
            #     'length': length of the episode
            #     'r_sum': sum of rewards in episode
            #     'r_mean': mean of rewards in episode
            #     'r_std': standard deviation of rewards in episode
            #     'length_': average `length' over smoothing window
            #     'r_sum_': reward sum over smoothing window (not the average)
            #     'r_mean_': average reward sum per episode over smoothing window (i.e. average of `r_sum')
            #     'r_std_': standard deviation of reward sum per episode over smoothing window

            # InfoTracker turns these into arrays over time
            tracker.track(info)
            print(tracker.info)

            # some plotting functionality is provided (this will refresh in notebooks)
            #  - combinations of ``r_mean`` and ``r_std`` or ``r_mean_`` and ``r_std_`` are most insightful
            #  - for `CartPole`, ``length`` and ``r_sum`` are the same as there is a unit reward for each
            #    time step of successful balancing
            tracker.plot(r_mean_=True, r_std_=True,
                         length=dict(linestyle='--', marker='o'),
                         r_sum=dict(linestyle='', marker='x'))

# don't forget to close environment (e.g. triggers last video save)
env.close()

# write log file (for coursework)
env.write_log(folder="logs", file="xxxx00-agent-log.txt")
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
/home/runner/.local/lib/python3.12/site-packages/gymnasium/wrappers/rendering.py:283: UserWarning: WARN: Overwriting existing videos at /home/runner/work/rldurham/rldurham/examples/videos folder (try specifying a different `video_folder` for the `RecordVideo` wrapper if this is not desired)
  logger.warn(
{'recorder': {'idx': [0], 'length': [29], 'r_sum': [29.0], 'r_mean': [1.0], 'r_std': [0.0], 'length_': [29.0], 'r_sum_': [29.0], 'r_mean_': [29.0], 'r_std_': [0.0]}}


{'recorder': {'idx': [0], 'length': [29], 'r_sum': [29.0], 'r_mean': [1.0], 'r_std': [0.0], 'length_': [29.0], 'r_sum_': [29.0], 'r_mean_': [29.0], 'r_std_': [0.0]}}


{'recorder': {'idx': [0, 2], 'length': [29, 69], 'r_sum': [29.0, 69.0], 'r_mean': [1.0, 1.0], 'r_std': [0.0, 0.0], 'length_': [29.0, 49.0], 'r_sum_': [29.0, 98.0], 'r_mean_': [29.0, 49.0], 'r_std_': [0.0, 20.0]}}


{'recorder': {'idx': [0, 2], 'length': [29, 69], 'r_sum': [29.0, 69.0], 'r_mean': [1.0, 1.0], 'r_std': [0.0, 0.0], 'length_': [29.0, 49.0], 'r_sum_': [29.0, 98.0], 'r_mean_': [29.0, 49.0], 'r_std_': [0.0, 20.0]}}


{'recorder': {'idx': [0, 2, 4], 'length': [29, 69, 39], 'r_sum': [29.0, 69.0, 39.0], 'r_mean': [1.0, 1.0, 1.0], 'r_std': [0.0, 0.0, 0.0], 'length_': [29.0, 49.0, 45.666666666666664], 'r_sum_': [29.0, 98.0, 137.0], 'r_mean_': [29.0, 49.0, 45.666666666666664], 'r_std_': [0.0, 20.0, 16.996731711975958]}}


{'recorder': {'idx': [0, 2, 4], 'length': [29, 69, 39], 'r_sum': [29.0, 69.0, 39.0], 'r_mean': [1.0, 1.0, 1.0], 'r_std': [0.0, 0.0, 0.0], 'length_': [29.0, 49.0, 45.666666666666664], 'r_sum_': [29.0, 98.0, 137.0], 'r_mean_': [29.0, 49.0, 45.666666666666664], 'r_std_': [0.0, 20.0, 16.996731711975958]}}


{'recorder': {'idx': [0, 2, 4, 6], 'length': [29, 69, 39, 14], 'r_sum': [29.0, 69.0, 39.0, 14.0], 'r_mean': [1.0, 1.0, 1.0, 1.0], 'r_std': [0.0, 0.0, 0.0, 0.0], 'length_': [29.0, 49.0, 45.666666666666664, 37.75], 'r_sum_': [29.0, 98.0, 137.0, 151.0], 'r_mean_': [29.0, 49.0, 45.666666666666664, 37.75], 'r_std_': [0.0, 20.0, 16.996731711975958, 20.116846174288852]}}


{'recorder': {'idx': [0, 2, 4, 6], 'length': [29, 69, 39, 14], 'r_sum': [29.0, 69.0, 39.0, 14.0], 'r_mean': [1.0, 1.0, 1.0, 1.0], 'r_std': [0.0, 0.0, 0.0, 0.0], 'length_': [29.0, 49.0, 45.666666666666664, 37.75], 'r_sum_': [29.0, 98.0, 137.0, 151.0], 'r_mean_': [29.0, 49.0, 45.666666666666664, 37.75], 'r_std_': [0.0, 20.0, 16.996731711975958, 20.116846174288852]}}


{'recorder': {'idx': [0, 2, 4, 6, 8], 'length': [29, 69, 39, 14, 28], 'r_sum': [29.0, 69.0, 39.0, 14.0, 28.0], 'r_mean': [1.0, 1.0, 1.0, 1.0, 1.0], 'r_std': [0.0, 0.0, 0.0, 0.0, 0.0], 'length_': [29.0, 49.0, 45.666666666666664, 37.75, 35.8], 'r_sum_': [29.0, 98.0, 137.0, 151.0, 179.0], 'r_mean_': [29.0, 49.0, 45.666666666666664, 37.75, 35.8], 'r_std_': [0.0, 20.0, 16.996731711975958, 20.116846174288852, 18.410866356584094]}}


{'recorder': {'idx': [0, 2, 4, 6, 8], 'length': [29, 69, 39, 14, 28], 'r_sum': [29.0, 69.0, 39.0, 14.0, 28.0], 'r_mean': [1.0, 1.0, 1.0, 1.0, 1.0], 'r_std': [0.0, 0.0, 0.0, 0.0, 0.0], 'length_': [29.0, 49.0, 45.666666666666664, 37.75, 35.8], 'r_sum_': [29.0, 98.0, 137.0, 151.0, 179.0], 'r_mean_': [29.0, 49.0, 45.666666666666664, 37.75, 35.8], 'r_std_': [0.0, 20.0, 16.996731711975958, 20.116846174288852, 18.410866356584094]}}


{'recorder': {'idx': [0, 2, 4, 6, 8, 10], 'length': [29, 69, 39, 14, 28, 25], 'r_sum': [29.0, 69.0, 39.0, 14.0, 28.0, 25.0], 'r_mean': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'r_std': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 'length_': [29.0, 49.0, 45.666666666666664, 37.75, 35.8, 34.0], 'r_sum_': [29.0, 98.0, 137.0, 151.0, 179.0, 204.0], 'r_mean_': [29.0, 49.0, 45.666666666666664, 37.75, 35.8, 34.0], 'r_std_': [0.0, 20.0, 16.996731711975958, 20.116846174288852, 18.410866356584094, 17.281975195754296]}}
# print log file
import pandas as pd
log_file = "logs/xxxx00-agent-log.txt"
print(f"log file: {log_file}")
print(pd.read_csv(log_file, sep="\t").head())
log file: logs/xxxx00-agent-log.txt
   count  reward_sum  squared_reward_sum  length
0      0        29.0                29.0      29
1      1        17.0                17.0      17
2      2        69.0                69.0      69
3      3        15.0                15.0      15
4      4        39.0                39.0      39
# show video
import os, re
from ipywidgets import Video
video_file = "videos/" + sorted(f for f in os.listdir("videos") if re.match(r".+episode=4.+\.mp4", f))[0]
print(f"video file: {video_file}")
Video.from_file(video_file)
video file: videos/xxxx00-agent-video,episode=4,score=39.0.mp4

Video(value=b'\x00\x00\x00 ftypisom\x00\x00\x02\x00isomiso2avc1mp41\x00\x00\x00\x08free...')

Different environments

## render mode
# rm = "human"     # for rendering in separate window
rm = 'rgb_array' # for recording videos or rendering in notebook
# rm = None        # no rendering

## select environment
env = rld.make('CartPole-v1', render_mode=rm)              # easy discrete
# env = rld.make('FrozenLake-v1', render_mode=rm)            # easy discrete
# env = rld.make('LunarLander-v3', render_mode=rm)           # discrete
# env = rld.make('ALE/Breakout-v5', render_mode=rm)          # discrete (atari)
# env = rld.make('Pong-ram-v4', render_mode=rm)              # discrete (atari)
# env = rld.make('Gravitar-ram-v4', render_mode=rm)          # hard discrete (atari)
#
# env = rld.make('Pendulum-v1', render_mode=rm)              # easy continuous
# env = rld.make('LunarLanderContinuous-v3', render_mode=rm) # continuous
# env = rld.make('BipedalWalker-v3', render_mode=rm)         # continuous
# env = rld.make('BipedalWalkerHardcore-v3', render_mode=rm) # hard continuous

## wrap for stats and video recording (requires render_mode='rgb_array')
# env = rld.Recorder(env, video=True)
# env.video = False  # deactivate

## there are many more!
# gym.pprint_registry()

# get some info
discrete_act = hasattr(env.action_space, 'n')
discrete_obs = hasattr(env.observation_space, 'n')
act_dim = env.action_space.n if discrete_act else env.action_space.shape[0]
obs_dim = env.observation_space.n if discrete_obs else env.observation_space.shape[0]
discrete_act, discrete_obs, act_dim, obs_dim = rld.env_info(env)  # same
print(f"The environment has "
      f"{act_dim}{(f' discrete' if discrete_act else f'-dimensional continuous')} actions and "
      f"{obs_dim}{(f' discrete' if discrete_obs else f'-dimensional continuous')} observations.")
print('The maximum timesteps is: {}'.format(env.spec.max_episode_steps))
The environment has 2 discrete actions and 4-dimensional continuous observations.
The maximum timesteps is: 500
for episode in range(1):
    observation, info = env.reset()
    rld.render(env, clear=True)
    done = False
    for step in range(200):
        action = env.action_space.sample()  # random action
        observation, reward, terminated, truncated, info = env.step(action)
        rld.render(env, clear=True)
        done = terminated or truncated
        if done:
            break
env.close()
Lecture 2 Gym

Training an agent

import numpy as np
import torch

device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')
print('The device is: {}'.format(device))
if device.type != 'cpu': print('It\'s recommended to train on the cpu for this')
The device is: cpu
class Agent(torch.nn.Module):
    def __init__(self, env):
        super().__init__()
        self.discrete_act, self.discrete_obs, self.act_dim, self.obs_dim = rld.env_info(env)

    def prob_action(self, obs):
        return np.ones(self.act_dim)/self.act_dim

    def sample_action(self, prob):
        if self.discrete_act:
            return np.random.choice(self.act_dim, p=prob)
        else:
            return np.random.uniform(-1.0, 1.0, size=self.act_dim)

    def train(self):
        return

    def put_data(self, item):
        return
# init environment
env = rld.make('CartPole-v1')
env = rld.Recorder(env, smoothing=10)

# seed
rld.seed_everything(seed=42, env=env)

# init agent
agent = Agent(env)

# training procedure
tracker = rld.InfoTracker()
for episode in range(201):
    obs, info = env.reset()
    done = False

    # get episode
    while not done:
        # select action
        prob = agent.prob_action(obs)
        action = agent.sample_action(prob)

        # take action in environment
        next_obs, reward, terminated, truncated, info = env.step(action)
        done = terminated or truncated
        agent.put_data((reward, prob[action] if agent.discrete_act else None))
        obs = next_obs

    # track and plot
    tracker.track(info)
    if episode % 10 == 0:
        tracker.plot(r_mean_=True, r_std_=True)

    # update agent's policy
    agent.train()
env.close()
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
  • Lecture 2 Gym
/home/runner/work/rldurham/rldurham/rldurham/__init__.py:450: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam `figure.max_open_warning`). Consider using `matplotlib.pyplot.close()`.
  fig, ax = plt.subplots(1, 1)

REINFORCE agent example

This code is based on: https://github.com/seungeunrho/minimalRL

Note: these implementations are good to study, although most are for discrete action spaces

# this is an implementation of REINFORCE (taught in lecture 8) - one of the simplest classical policy gradient methods
# this will only work for simple discrete control problems like cart pole or (slowly) lunar lander discrete
plot_interval = 50
video_every = 500
max_episodes = 5000


class Agent(torch.nn.Module):
    def __init__(self, env):
        super().__init__()
        discrete_act, discrete_obs, act_dim, obs_dim = rld.env_info(env)
        if not discrete_act:
            raise RuntimeError("REINFORCE only works for discrete action spaces")
        self.data = []
        self.fc1 = torch.nn.Linear(obs_dim, 128)
        self.fc2 = torch.nn.Linear(128, act_dim)
        self.optimizer = torch.optim.Adam(self.parameters(), lr=0.0002)

    def sample_action(self, prob):
        m = torch.Categorical(prob)
        a = m.sample()
        return a.item()

    def prob_action(self, s):
        x = torch.F.relu(self.fc1(torch.from_numpy(s).float()))
        return torch.F.softmax(self.fc2(x), dim=0)

    def put_data(self, item):
        self.data.append(item)

    def train(self):
        R = 0
        self.optimizer.zero_grad()
        for r, prob in self.data[::-1]:
            R = r + 0.98 * R
            loss = -torch.log(prob) * R
            loss.backward()
        self.optimizer.step()
        self.data = []

Custom environments (here: multi-armed bandits)

# one armed bandits are slot machines where you can win or loose money
# some casinos tune them, so some machines are less successful (the probability distribution of winning)
# the machines also dish out varying rewards (the reward distribution)
# so basically each machine has some probability of dishing out £ reward (p_dist doesn't need to sum to 1) else it gives £0

class BanditEnv(gym.Env):

    def __init__(self, p_dist=[0.4,0.2,0.1,0.1,0.1,0.7], r_dist=[1,0.1,2,0.5,6,70]):

        self.p_dist = p_dist
        self.r_dist = r_dist

        self.n_bandits = len(p_dist)
        self.action_space = gym.spaces.Discrete(self.n_bandits)
        self.observation_space = gym.spaces.Discrete(1)

    def step(self, action):
        assert self.action_space.contains(action)

        reward = -25
        terminated = True
        truncated = False

        if np.random.uniform() < self.p_dist[action]:
            if not isinstance(self.r_dist[action], list):
                reward += self.r_dist[action]
            else:
                reward += np.random.normal(self.r_dist[action][0], self.r_dist[action][1])

        return np.zeros(1), reward, terminated, truncated, {}

    def reset(self, seed=None, options=None):
        if seed is not None:
            self.np_random, seed = gym.utils.seeding.np_random(seed)
        return np.zeros(1), {}

    def render(self):
        pass
# initialise
discrete = True
env = BanditEnv()
obs_dim = 1
act_dim = len(env.p_dist)
env.spec = gym.envs.registration.EnvSpec('BanditEnv-v0', max_episode_steps=5)
max_episodes = 1000

for episode in range(10):
    observation, info = env.reset()
    done = False
    while not done:
        action = env.action_space.sample()  # random action
        observation, reward, terminated, truncated, info = env.step(action)
        print(action, reward)
        done = terminated or truncated

env.close()
1 -25
4 -25
4 -19
1 -25
0 -25
2 -25
1 -25
5 45
5 45
3 -25
gym.register(id="BanditEnv-v0", entry_point=BanditEnv)
gym.pprint_registry()
===== classic_control =====
Acrobot-v1                        CartPole-v0                       CartPole-v1
MountainCar-v0                    MountainCarContinuous-v0          Pendulum-v1
===== phys2d =====
phys2d/CartPole-v0                phys2d/CartPole-v1                phys2d/Pendulum-v0
===== box2d =====
BipedalWalker-v3                  BipedalWalkerHardcore-v3          CarRacing-v3
LunarLander-v3                    LunarLanderContinuous-v3
===== toy_text =====
Blackjack-v1                      CliffWalking-v0                   FrozenLake-v1
FrozenLake8x8-v1                  Taxi-v3
===== tabular =====
tabular/Blackjack-v0              tabular/CliffWalking-v0
===== mujoco =====
Ant-v2                            Ant-v3                            Ant-v4
Ant-v5                            HalfCheetah-v2                    HalfCheetah-v3
HalfCheetah-v4                    HalfCheetah-v5                    Hopper-v2
Hopper-v3                         Hopper-v4                         Hopper-v5
Humanoid-v2                       Humanoid-v3                       Humanoid-v4
Humanoid-v5                       HumanoidStandup-v2                HumanoidStandup-v4
HumanoidStandup-v5                InvertedDoublePendulum-v2         InvertedDoublePendulum-v4
InvertedDoublePendulum-v5         InvertedPendulum-v2               InvertedPendulum-v4
InvertedPendulum-v5               Pusher-v2                         Pusher-v4
Pusher-v5                         Reacher-v2                        Reacher-v4
Reacher-v5                        Swimmer-v2                        Swimmer-v3
Swimmer-v4                        Swimmer-v5                        Walker2d-v2
Walker2d-v3                       Walker2d-v4                       Walker2d-v5
===== None =====
BanditEnv-v0                      GymV21Environment-v0              GymV26Environment-v0
===== env =====
Adventure-ram-v0                  Adventure-ram-v4                  Adventure-ramDeterministic-v0
Adventure-ramDeterministic-v4     Adventure-ramNoFrameskip-v0       Adventure-ramNoFrameskip-v4
Adventure-v0                      Adventure-v4                      AdventureDeterministic-v0
AdventureDeterministic-v4         AdventureNoFrameskip-v0           AdventureNoFrameskip-v4
AirRaid-ram-v0                    AirRaid-ram-v4                    AirRaid-ramDeterministic-v0
AirRaid-ramDeterministic-v4       AirRaid-ramNoFrameskip-v0         AirRaid-ramNoFrameskip-v4
AirRaid-v0                        AirRaid-v4                        AirRaidDeterministic-v0
AirRaidDeterministic-v4           AirRaidNoFrameskip-v0             AirRaidNoFrameskip-v4
Alien-ram-v0                      Alien-ram-v4                      Alien-ramDeterministic-v0
Alien-ramDeterministic-v4         Alien-ramNoFrameskip-v0           Alien-ramNoFrameskip-v4
Alien-v0                          Alien-v4                          AlienDeterministic-v0
AlienDeterministic-v4             AlienNoFrameskip-v0               AlienNoFrameskip-v4
Amidar-ram-v0                     Amidar-ram-v4                     Amidar-ramDeterministic-v0
Amidar-ramDeterministic-v4        Amidar-ramNoFrameskip-v0          Amidar-ramNoFrameskip-v4
Amidar-v0                         Amidar-v4                         AmidarDeterministic-v0
AmidarDeterministic-v4            AmidarNoFrameskip-v0              AmidarNoFrameskip-v4
Assault-ram-v0                    Assault-ram-v4                    Assault-ramDeterministic-v0
Assault-ramDeterministic-v4       Assault-ramNoFrameskip-v0         Assault-ramNoFrameskip-v4
Assault-v0                        Assault-v4                        AssaultDeterministic-v0
AssaultDeterministic-v4           AssaultNoFrameskip-v0             AssaultNoFrameskip-v4
Asterix-ram-v0                    Asterix-ram-v4                    Asterix-ramDeterministic-v0
Asterix-ramDeterministic-v4       Asterix-ramNoFrameskip-v0         Asterix-ramNoFrameskip-v4
Asterix-v0                        Asterix-v4                        AsterixDeterministic-v0
AsterixDeterministic-v4           AsterixNoFrameskip-v0             AsterixNoFrameskip-v4
Asteroids-ram-v0                  Asteroids-ram-v4                  Asteroids-ramDeterministic-v0
Asteroids-ramDeterministic-v4     Asteroids-ramNoFrameskip-v0       Asteroids-ramNoFrameskip-v4
Asteroids-v0                      Asteroids-v4                      AsteroidsDeterministic-v0
AsteroidsDeterministic-v4         AsteroidsNoFrameskip-v0           AsteroidsNoFrameskip-v4
Atlantis-ram-v0                   Atlantis-ram-v4                   Atlantis-ramDeterministic-v0
Atlantis-ramDeterministic-v4      Atlantis-ramNoFrameskip-v0        Atlantis-ramNoFrameskip-v4
Atlantis-v0                       Atlantis-v4                       AtlantisDeterministic-v0
AtlantisDeterministic-v4          AtlantisNoFrameskip-v0            AtlantisNoFrameskip-v4
BankHeist-ram-v0                  BankHeist-ram-v4                  BankHeist-ramDeterministic-v0
BankHeist-ramDeterministic-v4     BankHeist-ramNoFrameskip-v0       BankHeist-ramNoFrameskip-v4
BankHeist-v0                      BankHeist-v4                      BankHeistDeterministic-v0
BankHeistDeterministic-v4         BankHeistNoFrameskip-v0           BankHeistNoFrameskip-v4
BattleZone-ram-v0                 BattleZone-ram-v4                 BattleZone-ramDeterministic-v0
BattleZone-ramDeterministic-v4    BattleZone-ramNoFrameskip-v0      BattleZone-ramNoFrameskip-v4
BattleZone-v0                     BattleZone-v4                     BattleZoneDeterministic-v0
BattleZoneDeterministic-v4        BattleZoneNoFrameskip-v0          BattleZoneNoFrameskip-v4
BeamRider-ram-v0                  BeamRider-ram-v4                  BeamRider-ramDeterministic-v0
BeamRider-ramDeterministic-v4     BeamRider-ramNoFrameskip-v0       BeamRider-ramNoFrameskip-v4
BeamRider-v0                      BeamRider-v4                      BeamRiderDeterministic-v0
BeamRiderDeterministic-v4         BeamRiderNoFrameskip-v0           BeamRiderNoFrameskip-v4
Berzerk-ram-v0                    Berzerk-ram-v4                    Berzerk-ramDeterministic-v0
Berzerk-ramDeterministic-v4       Berzerk-ramNoFrameskip-v0         Berzerk-ramNoFrameskip-v4
Berzerk-v0                        Berzerk-v4                        BerzerkDeterministic-v0
BerzerkDeterministic-v4           BerzerkNoFrameskip-v0             BerzerkNoFrameskip-v4
Bowling-ram-v0                    Bowling-ram-v4                    Bowling-ramDeterministic-v0
Bowling-ramDeterministic-v4       Bowling-ramNoFrameskip-v0         Bowling-ramNoFrameskip-v4
Bowling-v0                        Bowling-v4                        BowlingDeterministic-v0
BowlingDeterministic-v4           BowlingNoFrameskip-v0             BowlingNoFrameskip-v4
Boxing-ram-v0                     Boxing-ram-v4                     Boxing-ramDeterministic-v0
Boxing-ramDeterministic-v4        Boxing-ramNoFrameskip-v0          Boxing-ramNoFrameskip-v4
Boxing-v0                         Boxing-v4                         BoxingDeterministic-v0
BoxingDeterministic-v4            BoxingNoFrameskip-v0              BoxingNoFrameskip-v4
Breakout-ram-v0                   Breakout-ram-v4                   Breakout-ramDeterministic-v0
Breakout-ramDeterministic-v4      Breakout-ramNoFrameskip-v0        Breakout-ramNoFrameskip-v4
Breakout-v0                       Breakout-v4                       BreakoutDeterministic-v0
BreakoutDeterministic-v4          BreakoutNoFrameskip-v0            BreakoutNoFrameskip-v4
Carnival-ram-v0                   Carnival-ram-v4                   Carnival-ramDeterministic-v0
Carnival-ramDeterministic-v4      Carnival-ramNoFrameskip-v0        Carnival-ramNoFrameskip-v4
Carnival-v0                       Carnival-v4                       CarnivalDeterministic-v0
CarnivalDeterministic-v4          CarnivalNoFrameskip-v0            CarnivalNoFrameskip-v4
Centipede-ram-v0                  Centipede-ram-v4                  Centipede-ramDeterministic-v0
Centipede-ramDeterministic-v4     Centipede-ramNoFrameskip-v0       Centipede-ramNoFrameskip-v4
Centipede-v0                      Centipede-v4                      CentipedeDeterministic-v0
CentipedeDeterministic-v4         CentipedeNoFrameskip-v0           CentipedeNoFrameskip-v4
ChopperCommand-ram-v0             ChopperCommand-ram-v4             ChopperCommand-ramDeterministic-v0
ChopperCommand-ramDeterministic-v4 ChopperCommand-ramNoFrameskip-v0  ChopperCommand-ramNoFrameskip-v4
ChopperCommand-v0                 ChopperCommand-v4                 ChopperCommandDeterministic-v0
ChopperCommandDeterministic-v4    ChopperCommandNoFrameskip-v0      ChopperCommandNoFrameskip-v4
CrazyClimber-ram-v0               CrazyClimber-ram-v4               CrazyClimber-ramDeterministic-v0
CrazyClimber-ramDeterministic-v4  CrazyClimber-ramNoFrameskip-v0    CrazyClimber-ramNoFrameskip-v4
CrazyClimber-v0                   CrazyClimber-v4                   CrazyClimberDeterministic-v0
CrazyClimberDeterministic-v4      CrazyClimberNoFrameskip-v0        CrazyClimberNoFrameskip-v4
Defender-ram-v0                   Defender-ram-v4                   Defender-ramDeterministic-v0
Defender-ramDeterministic-v4      Defender-ramNoFrameskip-v0        Defender-ramNoFrameskip-v4
Defender-v0                       Defender-v4                       DefenderDeterministic-v0
DefenderDeterministic-v4          DefenderNoFrameskip-v0            DefenderNoFrameskip-v4
DemonAttack-ram-v0                DemonAttack-ram-v4                DemonAttack-ramDeterministic-v0
DemonAttack-ramDeterministic-v4   DemonAttack-ramNoFrameskip-v0     DemonAttack-ramNoFrameskip-v4
DemonAttack-v0                    DemonAttack-v4                    DemonAttackDeterministic-v0
DemonAttackDeterministic-v4       DemonAttackNoFrameskip-v0         DemonAttackNoFrameskip-v4
DoubleDunk-ram-v0                 DoubleDunk-ram-v4                 DoubleDunk-ramDeterministic-v0
DoubleDunk-ramDeterministic-v4    DoubleDunk-ramNoFrameskip-v0      DoubleDunk-ramNoFrameskip-v4
DoubleDunk-v0                     DoubleDunk-v4                     DoubleDunkDeterministic-v0
DoubleDunkDeterministic-v4        DoubleDunkNoFrameskip-v0          DoubleDunkNoFrameskip-v4
ElevatorAction-ram-v0             ElevatorAction-ram-v4             ElevatorAction-ramDeterministic-v0
ElevatorAction-ramDeterministic-v4 ElevatorAction-ramNoFrameskip-v0  ElevatorAction-ramNoFrameskip-v4
ElevatorAction-v0                 ElevatorAction-v4                 ElevatorActionDeterministic-v0
ElevatorActionDeterministic-v4    ElevatorActionNoFrameskip-v0      ElevatorActionNoFrameskip-v4
Enduro-ram-v0                     Enduro-ram-v4                     Enduro-ramDeterministic-v0
Enduro-ramDeterministic-v4        Enduro-ramNoFrameskip-v0          Enduro-ramNoFrameskip-v4
Enduro-v0                         Enduro-v4                         EnduroDeterministic-v0
EnduroDeterministic-v4            EnduroNoFrameskip-v0              EnduroNoFrameskip-v4
FishingDerby-ram-v0               FishingDerby-ram-v4               FishingDerby-ramDeterministic-v0
FishingDerby-ramDeterministic-v4  FishingDerby-ramNoFrameskip-v0    FishingDerby-ramNoFrameskip-v4
FishingDerby-v0                   FishingDerby-v4                   FishingDerbyDeterministic-v0
FishingDerbyDeterministic-v4      FishingDerbyNoFrameskip-v0        FishingDerbyNoFrameskip-v4
Freeway-ram-v0                    Freeway-ram-v4                    Freeway-ramDeterministic-v0
Freeway-ramDeterministic-v4       Freeway-ramNoFrameskip-v0         Freeway-ramNoFrameskip-v4
Freeway-v0                        Freeway-v4                        FreewayDeterministic-v0
FreewayDeterministic-v4           FreewayNoFrameskip-v0             FreewayNoFrameskip-v4
Frostbite-ram-v0                  Frostbite-ram-v4                  Frostbite-ramDeterministic-v0
Frostbite-ramDeterministic-v4     Frostbite-ramNoFrameskip-v0       Frostbite-ramNoFrameskip-v4
Frostbite-v0                      Frostbite-v4                      FrostbiteDeterministic-v0
FrostbiteDeterministic-v4         FrostbiteNoFrameskip-v0           FrostbiteNoFrameskip-v4
Gopher-ram-v0                     Gopher-ram-v4                     Gopher-ramDeterministic-v0
Gopher-ramDeterministic-v4        Gopher-ramNoFrameskip-v0          Gopher-ramNoFrameskip-v4
Gopher-v0                         Gopher-v4                         GopherDeterministic-v0
GopherDeterministic-v4            GopherNoFrameskip-v0              GopherNoFrameskip-v4
Gravitar-ram-v0                   Gravitar-ram-v4                   Gravitar-ramDeterministic-v0
Gravitar-ramDeterministic-v4      Gravitar-ramNoFrameskip-v0        Gravitar-ramNoFrameskip-v4
Gravitar-v0                       Gravitar-v4                       GravitarDeterministic-v0
GravitarDeterministic-v4          GravitarNoFrameskip-v0            GravitarNoFrameskip-v4
Hero-ram-v0                       Hero-ram-v4                       Hero-ramDeterministic-v0
Hero-ramDeterministic-v4          Hero-ramNoFrameskip-v0            Hero-ramNoFrameskip-v4
Hero-v0                           Hero-v4                           HeroDeterministic-v0
HeroDeterministic-v4              HeroNoFrameskip-v0                HeroNoFrameskip-v4
IceHockey-ram-v0                  IceHockey-ram-v4                  IceHockey-ramDeterministic-v0
IceHockey-ramDeterministic-v4     IceHockey-ramNoFrameskip-v0       IceHockey-ramNoFrameskip-v4
IceHockey-v0                      IceHockey-v4                      IceHockeyDeterministic-v0
IceHockeyDeterministic-v4         IceHockeyNoFrameskip-v0           IceHockeyNoFrameskip-v4
Jamesbond-ram-v0                  Jamesbond-ram-v4                  Jamesbond-ramDeterministic-v0
Jamesbond-ramDeterministic-v4     Jamesbond-ramNoFrameskip-v0       Jamesbond-ramNoFrameskip-v4
Jamesbond-v0                      Jamesbond-v4                      JamesbondDeterministic-v0
JamesbondDeterministic-v4         JamesbondNoFrameskip-v0           JamesbondNoFrameskip-v4
JourneyEscape-ram-v0              JourneyEscape-ram-v4              JourneyEscape-ramDeterministic-v0
JourneyEscape-ramDeterministic-v4 JourneyEscape-ramNoFrameskip-v0   JourneyEscape-ramNoFrameskip-v4
JourneyEscape-v0                  JourneyEscape-v4                  JourneyEscapeDeterministic-v0
JourneyEscapeDeterministic-v4     JourneyEscapeNoFrameskip-v0       JourneyEscapeNoFrameskip-v4
Kangaroo-ram-v0                   Kangaroo-ram-v4                   Kangaroo-ramDeterministic-v0
Kangaroo-ramDeterministic-v4      Kangaroo-ramNoFrameskip-v0        Kangaroo-ramNoFrameskip-v4
Kangaroo-v0                       Kangaroo-v4                       KangarooDeterministic-v0
KangarooDeterministic-v4          KangarooNoFrameskip-v0            KangarooNoFrameskip-v4
Krull-ram-v0                      Krull-ram-v4                      Krull-ramDeterministic-v0
Krull-ramDeterministic-v4         Krull-ramNoFrameskip-v0           Krull-ramNoFrameskip-v4
Krull-v0                          Krull-v4                          KrullDeterministic-v0
KrullDeterministic-v4             KrullNoFrameskip-v0               KrullNoFrameskip-v4
KungFuMaster-ram-v0               KungFuMaster-ram-v4               KungFuMaster-ramDeterministic-v0
KungFuMaster-ramDeterministic-v4  KungFuMaster-ramNoFrameskip-v0    KungFuMaster-ramNoFrameskip-v4
KungFuMaster-v0                   KungFuMaster-v4                   KungFuMasterDeterministic-v0
KungFuMasterDeterministic-v4      KungFuMasterNoFrameskip-v0        KungFuMasterNoFrameskip-v4
MontezumaRevenge-ram-v0           MontezumaRevenge-ram-v4           MontezumaRevenge-ramDeterministic-v0
MontezumaRevenge-ramDeterministic-v4 MontezumaRevenge-ramNoFrameskip-v0 MontezumaRevenge-ramNoFrameskip-v4
MontezumaRevenge-v0               MontezumaRevenge-v4               MontezumaRevengeDeterministic-v0
MontezumaRevengeDeterministic-v4  MontezumaRevengeNoFrameskip-v0    MontezumaRevengeNoFrameskip-v4
MsPacman-ram-v0                   MsPacman-ram-v4                   MsPacman-ramDeterministic-v0
MsPacman-ramDeterministic-v4      MsPacman-ramNoFrameskip-v0        MsPacman-ramNoFrameskip-v4
MsPacman-v0                       MsPacman-v4                       MsPacmanDeterministic-v0
MsPacmanDeterministic-v4          MsPacmanNoFrameskip-v0            MsPacmanNoFrameskip-v4
NameThisGame-ram-v0               NameThisGame-ram-v4               NameThisGame-ramDeterministic-v0
NameThisGame-ramDeterministic-v4  NameThisGame-ramNoFrameskip-v0    NameThisGame-ramNoFrameskip-v4
NameThisGame-v0                   NameThisGame-v4                   NameThisGameDeterministic-v0
NameThisGameDeterministic-v4      NameThisGameNoFrameskip-v0        NameThisGameNoFrameskip-v4
Phoenix-ram-v0                    Phoenix-ram-v4                    Phoenix-ramDeterministic-v0
Phoenix-ramDeterministic-v4       Phoenix-ramNoFrameskip-v0         Phoenix-ramNoFrameskip-v4
Phoenix-v0                        Phoenix-v4                        PhoenixDeterministic-v0
PhoenixDeterministic-v4           PhoenixNoFrameskip-v0             PhoenixNoFrameskip-v4
Pitfall-ram-v0                    Pitfall-ram-v4                    Pitfall-ramDeterministic-v0
Pitfall-ramDeterministic-v4       Pitfall-ramNoFrameskip-v0         Pitfall-ramNoFrameskip-v4
Pitfall-v0                        Pitfall-v4                        PitfallDeterministic-v0
PitfallDeterministic-v4           PitfallNoFrameskip-v0             PitfallNoFrameskip-v4
Pong-ram-v0                       Pong-ram-v4                       Pong-ramDeterministic-v0
Pong-ramDeterministic-v4          Pong-ramNoFrameskip-v0            Pong-ramNoFrameskip-v4
Pong-v0                           Pong-v4                           PongDeterministic-v0
PongDeterministic-v4              PongNoFrameskip-v0                PongNoFrameskip-v4
Pooyan-ram-v0                     Pooyan-ram-v4                     Pooyan-ramDeterministic-v0
Pooyan-ramDeterministic-v4        Pooyan-ramNoFrameskip-v0          Pooyan-ramNoFrameskip-v4
Pooyan-v0                         Pooyan-v4                         PooyanDeterministic-v0
PooyanDeterministic-v4            PooyanNoFrameskip-v0              PooyanNoFrameskip-v4
PrivateEye-ram-v0                 PrivateEye-ram-v4                 PrivateEye-ramDeterministic-v0
PrivateEye-ramDeterministic-v4    PrivateEye-ramNoFrameskip-v0      PrivateEye-ramNoFrameskip-v4
PrivateEye-v0                     PrivateEye-v4                     PrivateEyeDeterministic-v0
PrivateEyeDeterministic-v4        PrivateEyeNoFrameskip-v0          PrivateEyeNoFrameskip-v4
Qbert-ram-v0                      Qbert-ram-v4                      Qbert-ramDeterministic-v0
Qbert-ramDeterministic-v4         Qbert-ramNoFrameskip-v0           Qbert-ramNoFrameskip-v4
Qbert-v0                          Qbert-v4                          QbertDeterministic-v0
QbertDeterministic-v4             QbertNoFrameskip-v0               QbertNoFrameskip-v4
Riverraid-ram-v0                  Riverraid-ram-v4                  Riverraid-ramDeterministic-v0
Riverraid-ramDeterministic-v4     Riverraid-ramNoFrameskip-v0       Riverraid-ramNoFrameskip-v4
Riverraid-v0                      Riverraid-v4                      RiverraidDeterministic-v0
RiverraidDeterministic-v4         RiverraidNoFrameskip-v0           RiverraidNoFrameskip-v4
RoadRunner-ram-v0                 RoadRunner-ram-v4                 RoadRunner-ramDeterministic-v0
RoadRunner-ramDeterministic-v4    RoadRunner-ramNoFrameskip-v0      RoadRunner-ramNoFrameskip-v4
RoadRunner-v0                     RoadRunner-v4                     RoadRunnerDeterministic-v0
RoadRunnerDeterministic-v4        RoadRunnerNoFrameskip-v0          RoadRunnerNoFrameskip-v4
Robotank-ram-v0                   Robotank-ram-v4                   Robotank-ramDeterministic-v0
Robotank-ramDeterministic-v4      Robotank-ramNoFrameskip-v0        Robotank-ramNoFrameskip-v4
Robotank-v0                       Robotank-v4                       RobotankDeterministic-v0
RobotankDeterministic-v4          RobotankNoFrameskip-v0            RobotankNoFrameskip-v4
Seaquest-ram-v0                   Seaquest-ram-v4                   Seaquest-ramDeterministic-v0
Seaquest-ramDeterministic-v4      Seaquest-ramNoFrameskip-v0        Seaquest-ramNoFrameskip-v4
Seaquest-v0                       Seaquest-v4                       SeaquestDeterministic-v0
SeaquestDeterministic-v4          SeaquestNoFrameskip-v0            SeaquestNoFrameskip-v4
Skiing-ram-v0                     Skiing-ram-v4                     Skiing-ramDeterministic-v0
Skiing-ramDeterministic-v4        Skiing-ramNoFrameskip-v0          Skiing-ramNoFrameskip-v4
Skiing-v0                         Skiing-v4                         SkiingDeterministic-v0
SkiingDeterministic-v4            SkiingNoFrameskip-v0              SkiingNoFrameskip-v4
Solaris-ram-v0                    Solaris-ram-v4                    Solaris-ramDeterministic-v0
Solaris-ramDeterministic-v4       Solaris-ramNoFrameskip-v0         Solaris-ramNoFrameskip-v4
Solaris-v0                        Solaris-v4                        SolarisDeterministic-v0
SolarisDeterministic-v4           SolarisNoFrameskip-v0             SolarisNoFrameskip-v4
SpaceInvaders-ram-v0              SpaceInvaders-ram-v4              SpaceInvaders-ramDeterministic-v0
SpaceInvaders-ramDeterministic-v4 SpaceInvaders-ramNoFrameskip-v0   SpaceInvaders-ramNoFrameskip-v4
SpaceInvaders-v0                  SpaceInvaders-v4                  SpaceInvadersDeterministic-v0
SpaceInvadersDeterministic-v4     SpaceInvadersNoFrameskip-v0       SpaceInvadersNoFrameskip-v4
StarGunner-ram-v0                 StarGunner-ram-v4                 StarGunner-ramDeterministic-v0
StarGunner-ramDeterministic-v4    StarGunner-ramNoFrameskip-v0      StarGunner-ramNoFrameskip-v4
StarGunner-v0                     StarGunner-v4                     StarGunnerDeterministic-v0
StarGunnerDeterministic-v4        StarGunnerNoFrameskip-v0          StarGunnerNoFrameskip-v4
Tennis-ram-v0                     Tennis-ram-v4                     Tennis-ramDeterministic-v0
Tennis-ramDeterministic-v4        Tennis-ramNoFrameskip-v0          Tennis-ramNoFrameskip-v4
Tennis-v0                         Tennis-v4                         TennisDeterministic-v0
TennisDeterministic-v4            TennisNoFrameskip-v0              TennisNoFrameskip-v4
TimePilot-ram-v0                  TimePilot-ram-v4                  TimePilot-ramDeterministic-v0
TimePilot-ramDeterministic-v4     TimePilot-ramNoFrameskip-v0       TimePilot-ramNoFrameskip-v4
TimePilot-v0                      TimePilot-v4                      TimePilotDeterministic-v0
TimePilotDeterministic-v4         TimePilotNoFrameskip-v0           TimePilotNoFrameskip-v4
Tutankham-ram-v0                  Tutankham-ram-v4                  Tutankham-ramDeterministic-v0
Tutankham-ramDeterministic-v4     Tutankham-ramNoFrameskip-v0       Tutankham-ramNoFrameskip-v4
Tutankham-v0                      Tutankham-v4                      TutankhamDeterministic-v0
TutankhamDeterministic-v4         TutankhamNoFrameskip-v0           TutankhamNoFrameskip-v4
UpNDown-ram-v0                    UpNDown-ram-v4                    UpNDown-ramDeterministic-v0
UpNDown-ramDeterministic-v4       UpNDown-ramNoFrameskip-v0         UpNDown-ramNoFrameskip-v4
UpNDown-v0                        UpNDown-v4                        UpNDownDeterministic-v0
UpNDownDeterministic-v4           UpNDownNoFrameskip-v0             UpNDownNoFrameskip-v4
Venture-ram-v0                    Venture-ram-v4                    Venture-ramDeterministic-v0
Venture-ramDeterministic-v4       Venture-ramNoFrameskip-v0         Venture-ramNoFrameskip-v4
Venture-v0                        Venture-v4                        VentureDeterministic-v0
VentureDeterministic-v4           VentureNoFrameskip-v0             VentureNoFrameskip-v4
VideoPinball-ram-v0               VideoPinball-ram-v4               VideoPinball-ramDeterministic-v0
VideoPinball-ramDeterministic-v4  VideoPinball-ramNoFrameskip-v0    VideoPinball-ramNoFrameskip-v4
VideoPinball-v0                   VideoPinball-v4                   VideoPinballDeterministic-v0
VideoPinballDeterministic-v4      VideoPinballNoFrameskip-v0        VideoPinballNoFrameskip-v4
WizardOfWor-ram-v0                WizardOfWor-ram-v4                WizardOfWor-ramDeterministic-v0
WizardOfWor-ramDeterministic-v4   WizardOfWor-ramNoFrameskip-v0     WizardOfWor-ramNoFrameskip-v4
WizardOfWor-v0                    WizardOfWor-v4                    WizardOfWorDeterministic-v0
WizardOfWorDeterministic-v4       WizardOfWorNoFrameskip-v0         WizardOfWorNoFrameskip-v4
YarsRevenge-ram-v0                YarsRevenge-ram-v4                YarsRevenge-ramDeterministic-v0
YarsRevenge-ramDeterministic-v4   YarsRevenge-ramNoFrameskip-v0     YarsRevenge-ramNoFrameskip-v4
YarsRevenge-v0                    YarsRevenge-v4                    YarsRevengeDeterministic-v0
YarsRevengeDeterministic-v4       YarsRevengeNoFrameskip-v0         YarsRevengeNoFrameskip-v4
Zaxxon-ram-v0                     Zaxxon-ram-v4                     Zaxxon-ramDeterministic-v0
Zaxxon-ramDeterministic-v4        Zaxxon-ramNoFrameskip-v0          Zaxxon-ramNoFrameskip-v4
Zaxxon-v0                         Zaxxon-v4                         ZaxxonDeterministic-v0
ZaxxonDeterministic-v4            ZaxxonNoFrameskip-v0              ZaxxonNoFrameskip-v4
===== ALE =====
ALE/Adventure-ram-v5              ALE/Adventure-v5                  ALE/AirRaid-ram-v5
ALE/AirRaid-v5                    ALE/Alien-ram-v5                  ALE/Alien-v5
ALE/Amidar-ram-v5                 ALE/Amidar-v5                     ALE/Assault-ram-v5
ALE/Assault-v5                    ALE/Asterix-ram-v5                ALE/Asterix-v5
ALE/Asteroids-ram-v5              ALE/Asteroids-v5                  ALE/Atlantis-ram-v5
ALE/Atlantis-v5                   ALE/Atlantis2-ram-v5              ALE/Atlantis2-v5
ALE/Backgammon-ram-v5             ALE/Backgammon-v5                 ALE/BankHeist-ram-v5
ALE/BankHeist-v5                  ALE/BasicMath-ram-v5              ALE/BasicMath-v5
ALE/BattleZone-ram-v5             ALE/BattleZone-v5                 ALE/BeamRider-ram-v5
ALE/BeamRider-v5                  ALE/Berzerk-ram-v5                ALE/Berzerk-v5
ALE/Blackjack-ram-v5              ALE/Blackjack-v5                  ALE/Bowling-ram-v5
ALE/Bowling-v5                    ALE/Boxing-ram-v5                 ALE/Boxing-v5
ALE/Breakout-ram-v5               ALE/Breakout-v5                   ALE/Carnival-ram-v5
ALE/Carnival-v5                   ALE/Casino-ram-v5                 ALE/Casino-v5
ALE/Centipede-ram-v5              ALE/Centipede-v5                  ALE/ChopperCommand-ram-v5
ALE/ChopperCommand-v5             ALE/Combat-ram-v5                 ALE/Combat-v5
ALE/CrazyClimber-ram-v5           ALE/CrazyClimber-v5               ALE/Crossbow-ram-v5
ALE/Crossbow-v5                   ALE/Darkchambers-ram-v5           ALE/Darkchambers-v5
ALE/Defender-ram-v5               ALE/Defender-v5                   ALE/DemonAttack-ram-v5
ALE/DemonAttack-v5                ALE/DonkeyKong-ram-v5             ALE/DonkeyKong-v5
ALE/DoubleDunk-ram-v5             ALE/DoubleDunk-v5                 ALE/Earthworld-ram-v5
ALE/Earthworld-v5                 ALE/ElevatorAction-ram-v5         ALE/ElevatorAction-v5
ALE/Enduro-ram-v5                 ALE/Enduro-v5                     ALE/Entombed-ram-v5
ALE/Entombed-v5                   ALE/Et-ram-v5                     ALE/Et-v5
ALE/FishingDerby-ram-v5           ALE/FishingDerby-v5               ALE/FlagCapture-ram-v5
ALE/FlagCapture-v5                ALE/Freeway-ram-v5                ALE/Freeway-v5
ALE/Frogger-ram-v5                ALE/Frogger-v5                    ALE/Frostbite-ram-v5
ALE/Frostbite-v5                  ALE/Galaxian-ram-v5               ALE/Galaxian-v5
ALE/Gopher-ram-v5                 ALE/Gopher-v5                     ALE/Gravitar-ram-v5
ALE/Gravitar-v5                   ALE/Hangman-ram-v5                ALE/Hangman-v5
ALE/HauntedHouse-ram-v5           ALE/HauntedHouse-v5               ALE/Hero-ram-v5
ALE/Hero-v5                       ALE/HumanCannonball-ram-v5        ALE/HumanCannonball-v5
ALE/IceHockey-ram-v5              ALE/IceHockey-v5                  ALE/Jamesbond-ram-v5
ALE/Jamesbond-v5                  ALE/JourneyEscape-ram-v5          ALE/JourneyEscape-v5
ALE/Joust-ram-v5                  ALE/Joust-v5                      ALE/Kaboom-ram-v5
ALE/Kaboom-v5                     ALE/Kangaroo-ram-v5               ALE/Kangaroo-v5
ALE/KeystoneKapers-ram-v5         ALE/KeystoneKapers-v5             ALE/KingKong-ram-v5
ALE/KingKong-v5                   ALE/Klax-ram-v5                   ALE/Klax-v5
ALE/Koolaid-ram-v5                ALE/Koolaid-v5                    ALE/Krull-ram-v5
ALE/Krull-v5                      ALE/KungFuMaster-ram-v5           ALE/KungFuMaster-v5
ALE/LaserGates-ram-v5             ALE/LaserGates-v5                 ALE/LostLuggage-ram-v5
ALE/LostLuggage-v5                ALE/MarioBros-ram-v5              ALE/MarioBros-v5
ALE/MazeCraze-ram-v5              ALE/MazeCraze-v5                  ALE/MiniatureGolf-ram-v5
ALE/MiniatureGolf-v5              ALE/MontezumaRevenge-ram-v5       ALE/MontezumaRevenge-v5
ALE/MrDo-ram-v5                   ALE/MrDo-v5                       ALE/MsPacman-ram-v5
ALE/MsPacman-v5                   ALE/NameThisGame-ram-v5           ALE/NameThisGame-v5
ALE/Othello-ram-v5                ALE/Othello-v5                    ALE/Pacman-ram-v5
ALE/Pacman-v5                     ALE/Phoenix-ram-v5                ALE/Phoenix-v5
ALE/Pitfall-ram-v5                ALE/Pitfall-v5                    ALE/Pitfall2-ram-v5
ALE/Pitfall2-v5                   ALE/Pong-ram-v5                   ALE/Pong-v5
ALE/Pooyan-ram-v5                 ALE/Pooyan-v5                     ALE/PrivateEye-ram-v5
ALE/PrivateEye-v5                 ALE/Qbert-ram-v5                  ALE/Qbert-v5
ALE/Riverraid-ram-v5              ALE/Riverraid-v5                  ALE/RoadRunner-ram-v5
ALE/RoadRunner-v5                 ALE/Robotank-ram-v5               ALE/Robotank-v5
ALE/Seaquest-ram-v5               ALE/Seaquest-v5                   ALE/SirLancelot-ram-v5
ALE/SirLancelot-v5                ALE/Skiing-ram-v5                 ALE/Skiing-v5
ALE/Solaris-ram-v5                ALE/Solaris-v5                    ALE/SpaceInvaders-ram-v5
ALE/SpaceInvaders-v5              ALE/SpaceWar-ram-v5               ALE/SpaceWar-v5
ALE/StarGunner-ram-v5             ALE/StarGunner-v5                 ALE/Superman-ram-v5
ALE/Superman-v5                   ALE/Surround-ram-v5               ALE/Surround-v5
ALE/Tennis-ram-v5                 ALE/Tennis-v5                     ALE/Tetris-ram-v5
ALE/Tetris-v5                     ALE/TicTacToe3D-ram-v5            ALE/TicTacToe3D-v5
ALE/TimePilot-ram-v5              ALE/TimePilot-v5                  ALE/Trondead-ram-v5
ALE/Trondead-v5                   ALE/Turmoil-ram-v5                ALE/Turmoil-v5
ALE/Tutankham-ram-v5              ALE/Tutankham-v5                  ALE/UpNDown-ram-v5
ALE/UpNDown-v5                    ALE/Venture-ram-v5                ALE/Venture-v5
ALE/VideoCheckers-ram-v5          ALE/VideoCheckers-v5              ALE/VideoChess-ram-v5
ALE/VideoChess-v5                 ALE/VideoCube-ram-v5              ALE/VideoCube-v5
ALE/VideoPinball-ram-v5           ALE/VideoPinball-v5               ALE/Warlords-ram-v5
ALE/Warlords-v5                   ALE/WizardOfWor-ram-v5            ALE/WizardOfWor-v5
ALE/WordZapper-ram-v5             ALE/WordZapper-v5                 ALE/YarsRevenge-ram-v5
ALE/YarsRevenge-v5                ALE/Zaxxon-ram-v5                 ALE/Zaxxon-v5
===== rldurham =====
rldurham/Walker

Total running time of the script: (0 minutes 7.535 seconds)

Gallery generated by Sphinx-Gallery