Fancy Gym

Built upon the foundation of Gymnasium (a maintained fork of OpenAI’s renowned Gym library) fancy_gym offers a comprehensive collection of reinforcement learning environments.

Key Features

  • New Challenging Environments: fancy_gym includes several new environments (Panda Box Pushing, Table Tennis, etc.) that present a higher degree of difficulty, pushing the boundaries of reinforcement learning research.

  • Support for Movement Primitives: fancy_gym supports a range of movement primitives (MPs), including Dynamic Movement Primitives (DMPs), Probabilistic Movement Primitives (ProMP), and Probabilistic Dynamic Movement Primitives (ProDMP).

  • Upgrade to Movement Primitives: With our framework, it’s straightforward to transform standard Gymnasium environments into environments that support movement primitives.

  • Benchmark Suite Compatibility: fancy_gym makes it easy to access renowned benchmark suites such as DeepMind Control and Metaworld, whether you want to use them in the regular step-based setting or using MPs.

  • Contribute Your Own Environments: If you’re inspired to create custom gym environments, both step-based and with movement primitives, this guide will assist you. We encourage and highly appreciate submissions via PRs to integrate these environments into fancy_gym.

Quickstart Guide

Install via pip (or use an alternative installation method)

pip install 'fancy_gym[all]'

Try out one of our step-based environments (or explore our other envs)

import gymnasium as gym
import fancy_gym
import time

env = gym.make('fancy/BoxPushingDense-v0', render_mode='human')
observation = env.reset()
env.render()

for i in range(1000):
   action = env.action_space.sample() # Randomly sample an action
   observation, reward, terminated, truncated, info = env.step(action)
   time.sleep(1/env.metadata['render_fps'])

   if terminated or truncated:
         observation, info = env.reset()

Explore the MP-based variant (or learn more about Movement Primitives (MPs))

import gymnasium as gym
import fancy_gym

env = gym.make('fancy_ProMP/BoxPushingDense-v0', render_mode='human')
env.reset()
env.render()

for i in range(10):
   action = env.action_space.sample() # Randomly sample MP parameters
   observation, reward, terminated, truncated, info = env.step(action) # Will execute full trajectory, based on MP
   observation = env.reset()

Citing the Project

To cite fancy_gym in publications:

@software{fancy_gym,
    title = {Fancy Gym},
    author = {Otto, Fabian and Celik, Onur and Roth, Dominik and Zhou, Hongyi},
    abstract = {Fancy Gym: Unifying interface for various RL benchmarks with support for Black Box approaches.},
    url = {https://github.com/ALRhub/fancy_gym},
    organization = {Autonomous Learning Robots Lab (ALR) at KIT},
}

Icon Attribution

The icon is based on the Gymnasium icon as can be found here.