Shimmy Compatibility Wrappers

The Shimmy package (pip install shimmy) allows commonly used external reinforcement learning environments to be used with PettingZoo and Gymnasium.

Supported multi-agent environments:

OpenSpiel

  • 70+ implementations of various board games

DeepMind Control Soccer

  • Multi-agent robotics environment where teams of agents compete in soccer.

DeepMind Melting Pot

  • Suite of test scenarios for multi-agent reinforcement learning

  • Assesses generalization to novel social situations:

    • familiar and unfamiliar individuals

    • social interactions: cooperation, competition, deception, reciprocation, trust, stubbornness

  • 50+ substrates and 250+ test scenarios

Usage

To load a DeepMind Control multi-agent soccer game:

from shimmy import DmControlMultiAgentCompatibilityV0
from dm_control.locomotion import soccer as dm_soccer

env = dm_soccer.load(team_size=2)
env = DmControlMultiAgentCompatibilityV0(env, render_mode="human")

observations, infos = env.reset()
while env.agents:
    actions = {agent: env.action_space(agent).sample() for agent in env.agents}  # this is where you would insert your policy
    observations, rewards, terminations, truncations, infos = env.step(actions)

To load an OpenSpiel game of backgammon, wrapped with TerminateIllegalWrapper:

from shimmy import OpenSpielCompatibilityV0
from pettingzoo.utils import TerminateIllegalWrapper

env = OpenSpielCompatibilityV0(game_name="chess", render_mode=None)
env = TerminateIllegalWrapper(env, illegal_reward=-1)

env.reset()
for agent in env.agent_iter():
    observation, reward, termination, truncation, info = env.last()
    if termination or truncation:
        action = None
    else:
        action = env.action_space(agent).sample(info["action_mask"])  # this is where you would insert your policy
    env.step(action)
    env.render()

To load a Melting Pot prisoner’s dilemma in the matrix substrate:

from shimmy import MeltingPotCompatibilityV0
env = MeltingPotCompatibilityV0(substrate_name="prisoners_dilemma_in_the_matrix__arena", render_mode="human")
observations, infos = env.reset()
while env.agents:
    actions = {agent: env.action_space(agent).sample() for agent in env.agents}
    observations, rewards, terminations, truncations, infos = env.step(actions)
    env.step(actions)
env.close()

For more information, see Shimmy documentation.

Multi-Agent Compatibility Wrappers:

Citation

If you use this in your research, please cite:

@software{shimmy2022github,
  author = {{Jun Jet Tai, Mark Towers, Elliot Tower} and Jordan Terry},
  title = {Shimmy: Gymnasium and PettingZoo Wrappers for Commonly Used Environments},
  url = {https://github.com/Farama-Foundation/Shimmy},
  version = {1.0.0},
  year = {2022},
}