Interoperate among reinforcement learning libraries with jax, pytorch, gym and dm_env
Project description
HELX: The RL experiments framework
Quickstart | Installation | Examples | Cite
What is HELX?
HELX is a JAX-based ecosystem that provides a standardised and ready to use framework to run Reinforcement Learning experiments.
The ecosystem is made of three main nodes:
- HELX-base, containing the base objects of the framework
- HELX-agents, containing the most common RL baselines
- HELX-envs, which provides a single API to the most common RL environments (gym, gymnax, dm_env, atari, ...)
- Finally, HELX, which packs the other three nodes into a framework to run and manage experiments
Installation
-
Stable
Install the stable version of helx
and its dependencies with:
pip install helx
-
Nightly
Or, if you prefer to install the latest version from source:
pip install git+https://github.com/epignatelli/helx
Examples
A typical use case is to design an agent, and toy-test it on catch
before evaluating it on more complex environments, such as atari, procgen or mujoco.
import bsuite
import gym
import helx.environment
import helx.experiment
import helx.agents
# create the enviornment in you favourite way
env = bsuite.load_from_id("catch/0")
# convert it to an helx environment
env = helx.environment.to_helx(env)
# create the agent
hparams = helx.agents.Hparams(env.obs_space(), env.action_space())
agent = helx.agents.Random(hparams)
# run the experiment
helx.experiment.run(env, agent, episodes=100)
Switching to a different environment is as simple as changing the env
variable.
import bsuite
import gym
import helx.environment
import helx.experiment
import helx.agents
# create the enviornment in you favourite way
-env = bsuite.load_from_id("catch/0")
+env = gym.make("procgen:procgen-coinrun-v0")
# convert it to an helx environment
env = helx.environment.to_helx(env)
# create the agent
hparams = helx.agents.Hparams(env.obs_space(), env.action_space())
agent = helx.agents.Random(hparams)
# run the experiment
helx.experiment.run(env, agent, episodes=100)
Supported libraries
We currently support these external environment models:
On the road:
Adding a new agent (helx.agents.Agent
)
An helx
agent interface is designed as the minimal set of functions necessary to (i) interact with an environment and (ii) reinforcement learn.
class Agent(ABC):
"""A minimal RL agent interface."""
@abstractmethod
def sample_action(self, timestep: Timestep) -> Array:
"""Applies the agent's policy to the current timestep to sample an action."""
@abstractmethod
def update(self, timestep: Timestep) -> Any:
"""Updates the agent's internal state (knowledge), such as a table,
or some function parameters, e.g., the parameters of a neural network."""
Adding a new environment library (helx.environment.Environment
)
To add a new library requires three steps:
- Implement the
helx.environment.Environment
interface for the new library. See the dm_env implementation for an example. - Implement serialisation (to
helx
) of the following objects:helx.environment.Timestep
helx.spaces.Discrete
helx.spaces.Continuous
- Add the new library to the
helx.environment.to_helx
function to tellhelx
about the new protocol.
Cite
If you use helx
please consider citing it as:
@misc{helx,
author = {Pignatelli, Eduardo},
title = {Helx: Interoperating between Reinforcement Learning Experimental Protocols},
year = {2021},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/epignatelli/helx}}
}
A note on maintainance
This repository was born as the recipient of personal research code that was developed over the years. Its maintainance is limited by the time and the resources of a research project resourced with a single person. Even if I would like to automate many actions, I do not have the time to maintain the whole body of automation that a well maintained package deserves. This is the reason of the WIP badge, which I do not plan to remove soon. Maintainance will prioritise the code functionality over documentation and automation.
Any help is very welcome. A quick guide to interacting with this repository:
- If you find a bug, please open an issue, and I will fix it as soon as I can.
- If you want to request a new feature, please open an issue, and I will consider it as soon as I can.
- If you want to contribute yourself, please open an issue first, let's discuss objective, plan a proposal, and open a pull request to act on it.
If you would like to be involved further in the development of this repository, please contact me directly at: edu dot pignatelli at gmail dot com
.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file HELX-base-1.0.0.tar.gz
.
File metadata
- Download URL: HELX-base-1.0.0.tar.gz
- Upload date:
- Size: 23.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a132fdee9d9341f3a568dae43b30622d00049dd6e57da7cd09e9c0d732e46f0b |
|
MD5 | 7b794e5cfe42b518c54f1dcf2f479b35 |
|
BLAKE2b-256 | ed7a46ded7b4d78db6eba33721964f512f8b6e8fa041e2781a838ab8cee229b5 |
File details
Details for the file HELX_base-1.0.0-py2.py3-none-any.whl
.
File metadata
- Download URL: HELX_base-1.0.0-py2.py3-none-any.whl
- Upload date:
- Size: 20.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0e50acb0ec9e1d972d71ee595a166f3537106b74042e9b809e3bf7b28b1c010 |
|
MD5 | 0b3cfc0cbc1439e00764b091ade60b4e |
|
BLAKE2b-256 | 955d23b2c227c71bd0188c3c0ed48350a58a4516fa4acee1c3afe3d4456c43a6 |