1
Fork 0

docs: proper newlines formatting

This commit is contained in:
Tibo De Peuter 2026-05-19 23:04:41 +02:00
parent e4869e0061
commit de6b038002
6 changed files with 20 additions and 3 deletions

View file

@ -2,7 +2,7 @@
This guide outlines how to set up the development environment for this project, prioritizing **reproducible builds**, **environment parity**, and **cross-hardware compatibility**. This guide outlines how to set up the development environment for this project, prioritizing **reproducible builds**, **environment parity**, and **cross-hardware compatibility**.
## Reproducibility &uv ## Reproducibility & uv
This project uses [uv](https://github.com/astral-sh/uv) to manage dependencies and virtual environments. The `uv.lock` file is the absolute source of truth for package versions and must always be committed. This project uses [uv](https://github.com/astral-sh/uv) to manage dependencies and virtual environments. The `uv.lock` file is the absolute source of truth for package versions and must always be committed.
@ -48,6 +48,7 @@ The devcontainer provides an identical experience to local development but with
## Local Development (Alternative) ## Local Development (Alternative)
If you prefer not to use Docker: If you prefer not to use Docker:
1. Install [uv](https://docs.astral.sh/uv/getting-started/installation/). 1. Install [uv](https://docs.astral.sh/uv/getting-started/installation/).
2. Run `uv sync --frozen` (CPU) or `uv sync --frozen --extra cuda` (GPU). 2. Run `uv sync --frozen` (CPU) or `uv sync --frozen --extra cuda` (GPU).
@ -58,6 +59,7 @@ Verify your setup by running the JAX initialization test:
```bash ```bash
uv run pytest tests/test_jax_init.py uv run pytest tests/test_jax_init.py
``` ```
In the devcontainer, this will succeed on both CPU and GPU. A `GpuDevice` is expected if a GPU is detected and the `cuda` extra was installed. In the devcontainer, this will succeed on both CPU and GPU. A `GpuDevice` is expected if a GPU is detected and the `cuda` extra was installed.
## Logging & Monitoring ## Logging & Monitoring

View file

@ -33,6 +33,7 @@ qsub -l gpus=1 scripts/hpc/install.sh
Our scripts are cluster-agnostic and do **not** have hardcoded GPU requirements. Instead, you must request GPUs at runtime using the `-l gpus=1` flag when submitting to a production GPU cluster. Our scripts are cluster-agnostic and do **not** have hardcoded GPU requirements. Instead, you must request GPUs at runtime using the `-l gpus=1` flag when submitting to a production GPU cluster.
### Debugging (Donphan) ### Debugging (Donphan)
The `donphan` cluster does not support GPUs. Simply run the scripts without extra resource flags: The `donphan` cluster does not support GPUs. Simply run the scripts without extra resource flags:
```bash ```bash
module swap cluster/donphan module swap cluster/donphan
@ -40,6 +41,7 @@ qsub scripts/hpc/train.pbs
``` ```
### Production (Joltik, Accelgor, Litleo) ### Production (Joltik, Accelgor, Litleo)
These clusters provide GPU acceleration and **require** a GPU request at runtime: These clusters provide GPU acceleration and **require** a GPU request at runtime:
```bash ```bash
module swap cluster/joltik # or accelgor/litleo module swap cluster/joltik # or accelgor/litleo
@ -64,11 +66,13 @@ After installation, run these commands to ensure your environment is set up corr
```bash ```bash
ls -d venvs 2>/dev/null && echo "FAIL" || echo ">>> PASS: Project root is clean." ls -d venvs 2>/dev/null && echo "FAIL" || echo ">>> PASS: Project root is clean."
``` ```
2. **Verify Library Versions (NumPy Fix)**: 2. **Verify Library Versions (NumPy Fix)**:
```bash ```bash
python -c "import numpy; print(f'NumPy: {numpy.__version__}')" python -c "import numpy; print(f'NumPy: {numpy.__version__}')"
# Expected: 2.x.x (Venv version), not 1.2x (System version) # Expected: 2.x.x (Venv version), not 1.2x (System version)
``` ```
3. **Verify GPU Access**: 3. **Verify GPU Access**:
```bash ```bash
python -c "import torch, jax; print(f'GPU: {torch.cuda.is_available()}'); print(f'JAX: {jax.devices()}')" python -c "import torch, jax; print(f'GPU: {torch.cuda.is_available()}'); print(f'JAX: {jax.devices()}')"

View file

@ -5,6 +5,7 @@ This guide outlines the tools available for analyzing experimental data and gene
## Shared Configuration ## Shared Configuration
All plotting scripts share a central configuration in `scripts/plots/plot_config.py`. This file defines: All plotting scripts share a central configuration in `scripts/plots/plot_config.py`. This file defines:
- **Color Palette:** A color-blind friendly, high-contrast palette for different architectures. - **Color Palette:** A color-blind friendly, high-contrast palette for different architectures.
- **Typography:** Consistent font sizes and styles tailored for A0 posters. - **Typography:** Consistent font sizes and styles tailored for A0 posters.
- **Markers:** Shared visual indicators, such as the ★ used for best performers. - **Markers:** Shared visual indicators, such as the ★ used for best performers.
@ -40,6 +41,7 @@ uv run python scripts/plots/analyze_comparisons.py path/to/results.csv \
### Outputs ### Outputs
The script generates four key plots, each saved as both `.png` and `.svg`: The script generates four key plots, each saved as both `.png` and `.svg`:
1. **Forward Velocity:** Grouped bar chart (cm/s). 1. **Forward Velocity:** Grouped bar chart (cm/s).
2. **Accumulated Reward:** Mean cumulative reward. 2. **Accumulated Reward:** Mean cumulative reward.
3. **Success Rate:** Target acquisition percentage. 3. **Success Rate:** Target acquisition percentage.
@ -65,6 +67,7 @@ uv run python scripts/plots/analyze_convergence.py --output_dir runs/convergence
### Outputs ### Outputs
Generates three plots (PNG & SVG): Generates three plots (PNG & SVG):
1. `convergence_comparison`: Grouped horizontal bar chart. 1. `convergence_comparison`: Grouped horizontal bar chart.
2. `progress_reward_curves`: Line plots of reward over time. 2. `progress_reward_curves`: Line plots of reward over time.
3. `progress_velocity_curves`: Line plots of velocity over time. 3. `progress_velocity_curves`: Line plots of velocity over time.
@ -74,7 +77,9 @@ Generates three plots (PNG & SVG):
## Poster Integration (Figma) ## Poster Integration (Figma)
### SVG & Scaling ### SVG & Scaling
We recommend using the **SVG** outputs for poster design in Figma: We recommend using the **SVG** outputs for poster design in Figma:
1. **No Resolution Loss:** SVGs are vector-based and will remain sharp at any size. 1. **No Resolution Loss:** SVGs are vector-based and will remain sharp at any size.
2. **Native Text:** Text in the SVG imports as native text layers in Figma. 2. **Native Text:** Text in the SVG imports as native text layers in Figma.
3. **Exact Font Matching:** To ensure a `28pt` font in the plot matches a `28pt` font in your poster, set the `--fig_width` and `--fig_height` to match the physical dimensions of the plot box in your Figma layout. 3. **Exact Font Matching:** To ensure a `28pt` font in the plot matches a `28pt` font in your poster, set the `--fig_width` and `--fig_height` to match the physical dimensions of the plot box in your Figma layout.

View file

@ -1,12 +1,15 @@
# Brittle star environment # Brittle star environment
## Creation ## Creation
The environment package contains a factory class `BrittleStarEnvFactory` The environment package contains a factory class `BrittleStarEnvFactory`
that creates instances of the environment/morphologies/... It uses the that creates instances of the environment/morphologies/... It uses the
configuration classes defined in `env_config.py` to create the instances. configuration classes defined in `env_config.py` to create the instances.
## Configuration ## Configuration
The data classes in `env_config` have default values as stated in the tutorials. The data classes in `env_config` have default values as stated in the tutorials.
* MorphologyConfig: configuration for the morphology of the brittle star. Contains * MorphologyConfig: configuration for the morphology of the brittle star. Contains
number of arms, number of segments per arm, and control mode. number of arms, number of segments per arm, and control mode.
* ArenaConfig: configuration for the arena. Sets the size of the arena, whether to * ArenaConfig: configuration for the arena. Sets the size of the arena, whether to
@ -15,10 +18,13 @@ set the ground floor to sand, attach a target and sizes of the walls.
such as camera locations, simulation time and the task. such as camera locations, simulation time and the task.
## Backend and Task enums ## Backend and Task enums
The Backend enum specifies either an MJC or MJX backend. The Backend enum specifies either an MJC or MJX backend.
* MJC: runs on CPU * MJC: runs on CPU
* MJX: uses jax on the gpu * MJX: uses jax on the gpu
The Task enum specifies which task to use. 2 items are present: The Task enum specifies which task to use. 2 items are present:
* DIRECTED_LOCOMOTION: move to a target location * DIRECTED_LOCOMOTION: move to a target location
* LIGHT_ESCAPE: situation where the robot must move to a darker location * LIGHT_ESCAPE: situation where the robot must move to a darker location

View file

@ -1,6 +1,7 @@
# Communication scheme (Message Passing) # Communication scheme (Message Passing)
Remember our research question: Remember our research question:
> "What is the impact of different levels of controller modularity on learning speed, coordination, and fault tolerance > "What is the impact of different levels of controller modularity on learning speed, coordination, and fault tolerance
> (e.g. amputations) in brittle-star-like robots trained with Reinforcement Learning?" > (e.g. amputations) in brittle-star-like robots trained with Reinforcement Learning?"

View file

@ -8,8 +8,7 @@ inputs must be distributed fairly to guarantee an objective comparison between d
- The reward function is centered around minimizing the distance to the goal or maximizing the movement towards the goal - The reward function is centered around minimizing the distance to the goal or maximizing the movement towards the goal
within a finite number of timesteps $T$. within a finite number of timesteps $T$.
- To motivate efficient movement, the amount of timesteps taken to reach the goal will be used as penalty. - To motivate efficient movement, the amount of timesteps taken to reach the goal will be used as penalty.
- An extra penalty based on movement relative to the current step and - An extra penalty based on movement relative to the current step and the previous is used to penalize a movement away from the target.
the previous is used to penalize a movement away from the target.
## From reward to PPO ## From reward to PPO