Wrapper for OpenAI Retro envs for parallel execution
Wrapper for OpenAI Retro envs for parallel execution
OpenAI’s Retro exposes an OpenAI gym interface for Deep Reinforcement Learning, but
unfortunately, their back-end only allows one emulator instance per process. To get around this, I wrote this class.
To use it, just instantiate it like you would a normal retro environment, and then treat it exactly the same, but now you can have multiples in a single python process. Magic!
import retrowrapper
if __name__ == "__main__":
game = "SonicTheHedgehog-Genesis"
state = "GreenHillZone.Act1"
env1 = retrowrapper.RetroWrapper(game, state=state)
env2 = retrowrapper.RetroWrapper(game, state=state)
_obs = env1.reset()
_obs = env2.reset()
done = False
while not done:
action = env1.action_space.sample()
_obs, _rew, done, _info = env1.step(action)
env1.render()
action = env2.action_space.sample()
_obs, _rew, done, _info = env2.step(action)
env2.render()
Sometimes you will need a custom make function, for example the retro_contest
repository requires you to use their make function rather than retro.make
.
In these cases you can use the retrowrapper.set_retro_make()
to set a new
make function.
Example usage:
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'
)