ARIEL is a research framework, developed by the Computational Intelligence Group at the Vrije Universiteit Amsterdam, for the joint evolution and learning of modular robots in simulation.
ARIEL is a research framework for the evolution and learning of modular robots. It couples an evolutionary computation (EC) engine with a MuJoCo-based simulation stack, allowing robot bodies (morphologies) and brains (controllers) to be co-evolved and optimised within a single, consistent pipeline.
The framework is organised around a few core ideas:
- Genotypes: encodings that generate robot bodies and/or brains (tree genomes, CPPN/NEAT, and a Neural Developmental Encoding "NDE").
- Phenotypes: the RoboGen-lite modular body construction system that turns a genotype into a buildable robot made of cores, bricks and hinges.
- Controllers: neural and central-pattern-generator (CPG) controllers that drive the robot's joints.
- Simulation: terrains/environments, tasks (locomotion, gait learning, turning) and a MuJoCo worker that evaluates an individual and reports its fitness.
- EC engine: reusable building blocks (populations, individuals, selection/crossover, archive) for assembling evolutionary algorithms.
- Visualisation: dashboards and analysis tools for inspecting results.
- π§ Bodyβbrain co-optimisation:
- evolve / learn a controller for a fixed body
- evolve bodies and brains simultaneously
- evolve robot bodies and brains simultaneously augmented with lifetime learning.
- π€ Modular bodies: Robot construction from cores, bricks and hinges, plus a library of prebuilt robots (gecko, spider, β¦).
- 𧬠Multiple genotypes: tree genomes, CPPN/NEAT, and a Neural Developmental Encoding (NDE).
- π MuJoCo simulation: ready-made terrains (flat, rugged, crater, tilted, Olympic arena) and tasks (targeted locomotion, gait learning, turning in place).
- π Reusable EC engine: composable populations, individuals, operators, and an archive, decoupled from the simulation layer.
- πΎ Built-in logging: runs are persisted to a SQLite database for later analysis and replay.
- π Visualisation: dashboards and plotting utilities for results.
After installing, build a prebuilt robot, drop it into a world, and launch the MuJoCo viewer:
import mujoco
from mujoco import viewer
from ariel.simulation.environments import SimpleFlatWorld
from ariel.body_phenotypes.robogen_lite.prebuilt_robots.gecko import gecko
# 1. Create a world (a flat terrain)
world = SimpleFlatWorld()
# 2. Build a modular robot body and spawn it into the world
robot = gecko() # returns a CoreModule
world.spawn(robot.spec, position=[0, 0, 0.1])
# 3. Compile to a MuJoCo model + data
model = world.spec.compile()
data = mujoco.MjData(model)
# 4. Watch it in the interactive viewer
viewer.launch(model, data)From here, see examples/ for adding controllers, defining fitness, and running full evolutionary loops.
- Python β₯ 3.12
- MuJoCo β₯ 3.3.6
- uv for environment and dependency management
All Python dependencies are declared in pyproject.toml and are installed automatically by uv sync.
This project uses uv.
To run the code examples, please do:
- Clone the repository
git clone https://github.com/ci-group/ariel.git
cd ariel- Create a uv virtual environment inside the repository folder
uv venv- Sync the virtual environment with the requirements
uv sync- Run an example, in this case, brain evolution (aka learning) using:
uv run examples/re_book/1_brain_evolution.pyariel/
βββ src/ariel/ # Main package
β βββ body_phenotypes/ # Genotype β robot body construction
β β βββ robogen_lite/ # RoboGen-lite modular body system
β β β βββ modules/ # Body parts: core, brick, hinge
β β β βββ decoders/ # Genotype-to-body decoders (hi-prob, CPPN, vector)
β β β βββ cppn_neat/ # CPPN/NEAT genome implementation
β β β βββ prebuilt_robots/ # Ready-made bodies (gecko, spider, ...)
β β β βββ constructor.py # Assembles modules into a MuJoCo spec
β β β βββ config.py
β β βββ lynx_mjspec/ # Lynx robot arm body + evolve/replay pipeline
β βββ ec/ # Evolutionary computation engine
β β βββ genotypes/ # Encodings: tree, cppn, nde (neural dev. encoding)
β β βββ population.py # Population container
β β βββ individual.py # Individual (genotype + fitness + state)
β β βββ archive.py # Archive of historical individuals
β β βββ crossover.py # Variation operators
β β βββ generators.py # Genotype generators + mutators
β β βββ ea.py # EA orchestration
β βββ simulation/ # MuJoCo simulation stack
β β βββ environments/ # Terrains/worlds (flat, rugged, crater, arena, ...)
β β βββ tasks/ # Tasks (targeted locomotion, gait, turning)
β β βββ controllers/ # Controllers (CPG variants, neural)
β β βββ mujoco_worker.py # Evaluates an individual, returns fitness
β βββ parameters/ # Shared types, module defs, MuJoCo params
β βββ utils/ # Renderers, trackers, video, optimizers, descriptors
β βββ visualisation/ # Dashboards and analysis tooling
βββ examples/ # Runnable examples
β βββ a_mujoco/ # MuJoCo basics (launcher, rendering, cameras)
β βββ b_robots/ # Building robots from graphs/decoders
β βββ c_genotypes/ # Body/brain evolution with genotypes
β βββ re_book/ # "Robot Evolution" book walkthrough examples
β βββ z_ec_course/ # EC course assignment templates
βββ tests/ # Unit and functional tests
βββ docs/ # Sphinx documentation sources
βββ wiki/ # Project wiki (Obsidian vault)
βββ pyproject.toml # Project metadata and dependencies (uv)
βββ noxfile.py # Automation sessions (tests, docs, compiled build)
Simulation runs write output to a local __data__/ directory (created on first run).
The examples/ folder is the best entry point for learning the framework. A good reading order is:
examples/a_mujoco/: MuJoCo fundamentals: launching a simulation, rendering frames, recording video, and cameras.examples/b_robots/: turning genotypes/graphs into robot bodies and placing them on terrains.examples/re_book/: end-to-end brain evolution, then body-brain evolution, learning, and waypoint-following tasks.examples/c_genotypes/: body/brain joint evolution, multiprocessing, and replaying results from a database.
Papers about ARIEL have been accepted for publication at ALIFE 2026 and PPSN 2026. Citation entries for those papers will be added here once they are published.
In the meantime, if you use ARIEL in your research, please cite the repository:
@unpublished{ariel,
author = {Di Matteo, Jacopo Michele and Grigoriadis, Ioannis and Aron Richard Ferencz and Lilly Schwarzenbach and Agoston Eiben},
title = {ARIEL: Autonomous Robots through Integrated Evolution and Learning},
year = {2026},
note = {https://github.com/ci-group/ariel}
}Contributions are welcome! Please see the Contributor Guide and our Code of Conduct before opening an issue or pull request.
Distributed under the terms of the GPL-3.0 license. ARIEL is free and open source software.