Click anywhere to close

Running Multiple Retro Environments

Due to constraints on Retro, it is not possible to run multiple retro environments in the same process. This restriction will will cause creating multiple environments this to raise the following error:

import retro

env1 = retro.make( game='SonicTheHedgehog2-Genesis', state='MetropolisZone.Act1' )
env2 = retro.make( game='SonicTheHedgehog2-Genesis', state='MetropolisZone.Act2' )
RuntimeError: Cannot create multiple emulator instances per process

Due to this restriction, it can be hard to do parallel joint training of agents. Thankfully the retrowrapper project makes it very easy to run environments as subprocess and interact with them as if they were a standard gym environment.

Using retrowrapper is easy. First install via pip:

pip install retrowrapper

Then simply import and create your environments.

import retrowrapper

env1 = retrowrapper.RetroWrapper(
    game='SonicTheHedgehog2-Genesis',
    state='MetropolisZone.Act1' 
)
env2 = retrowrapper.RetroWrapper( 
    game='SonicTheHedgehog2-Genesis', 
    state='MetropolisZone.Act2' 
)

Now you should no longer get the “Cannot create multiple emulator instances per process” error.

The retrowrapper library also allows you to specify a custom make function, this is useful when you want to apply custom wrappers to the environment. It is also useful during the retro-contest, allowing you to use the retro_contest.local make function that applies the contest wrappers.

To use retrowrapper with the retro_contest make function you simply need to set it before create your environments.

import retrowrapper
from retro_contest.local import make

retrowrapper.set_retro_make( make )

env1 = retrowrapper.RetroWrapper(
    game='SonicTheHedgehog2-Genesis',
    state='MetropolisZone.Act1' 
)
env2 = retrowrapper.RetroWrapper( 
    game='SonicTheHedgehog2-Genesis', 
    state='MetropolisZone.Act2' 
)

The environments are now created using the retro_contest.local make function.

Recent Posts

How to design a motherboard for your electronics project - Part 1 Designing a motherboard for your project is a great second step when developing an electronics project. This is the guide I wish existed when I got started doing this.
Categories:  Projects
Posted: February 21, 2021
Caffstat Beta Caffstat is the first Hackable Home Thermostat
Categories:  Projects
Posted: February 20, 2021
v2 Updates to my HomeKit Thermostat Making my thermostat project into something I can actually use every day
Categories:  Projects
Posted: December 31, 2020
Building my own HomeKit Thermostat Holiday 2020 project, building a custom HomeKit enabled thermostat
Categories:  Projects
Posted: December 27, 2020
Unwritten Coding Standards: Vertical Whitespace Simple vertical whitespace rules that will make any code easier to read
Categories:  Coding, mike8
Posted: May 27, 2020