Any tutorial on how to create RL C++ environments?

This page summarizes the projects mentioned and recommended in the original post on /r/reinforcementlearning

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • open_spiel

    OpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games.

    It's not exactly a tutorial, but OpenSpiel has C++ environments ported to Python that are relatively simple and easy to understand. Procgen would be a more complicated reference to check out as well.

  • procgen

    Procgen Benchmark: Procedurally-Generated Game-Like Gym-Environments

    It's not exactly a tutorial, but OpenSpiel has C++ environments ported to Python that are relatively simple and easy to understand. Procgen would be a more complicated reference to check out as well.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

  • ReinforcementLearning.jl

    A reinforcement learning package for Julia

    And I know it's another language, but Julia has made significant strides in their RL packages and are pretty easy to integrate with Python

  • Numba

    NumPy aware dynamic Python compiler using LLVM

    If you are more familiar with Python, I highly recommend trying out Numba, before going down the rabit hole of making c++ bindings.

  • RustyNEAT

    Discontinued Rust implementation of NEAT algorithm (HyperNEAT + ES-HyperNEAT + NoveltySearch + CTRNN + L-systems)

    If you want to really speed up your environment several orders of magnitude, you can implement it in cuda/vulkan /opencl. Here is an example of what I did in vulkan https://mobile.twitter.com/MendozaDrosik It allows me to stimulate thousands of agents in parallel. Works wonders especially if you want to use genetic algorithms. If you're interested, I might make python bindings to my minecraft environment. If you write in rust (like I do), then you can add python bindings very easily with PyO3. This is what I did here https://github.com/aleksander-mendoza/RustyNEAT/blob/main/rusty_neat_quick_guide.py (it's GPU accelerated implementation of NEAT algorithm)

  • brax

    Massively parallel rigidbody physics simulation on accelerator hardware.

    If you want raw speed, parallel execution on GPU or TPU is best. Checkout out our Brax simulator, which uses the XLA compiler and JAX Python frontend: https://github.com/google/brax

  • tiny-differentiable-simulator

    Tiny Differentiable Simulator is a header-only C++ and CUDA physics library for reinforcement learning and robotics with zero dependencies.

    Or our C++ and CUDA Tiny Differentiable Simulator: https://github.com/google-research/tiny-differentiable-simulator

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts