From e56a41477b814a51d1bc8831a699c01315f04c94 Mon Sep 17 00:00:00 2001
From: kengz
Date: Wed, 18 Feb 2026 21:59:29 -0500
Subject: [PATCH] feat: TorchArc YAML network architectures with full benchmark
validation
Replace hardcoded PyTorch network modules with TorchArc YAML-defined
architectures across all algorithms. Add YAML spec support, benchmark
specs, and validate on Classic Control, Box2D, MuJoCo (11 envs), and
Atari (54 games). Includes SAC Atari benchmarks (48 games), pre-commit
hooks, and version bump to 5.1.0.
Co-Authored-By: Claude Opus 4.6
---
.claude/skills/benchmark/SKILL.md | 85 +-
.dstack/run-gpu-train.yml | 10 +-
.githooks/commit-msg | 22 +
CLAUDE.md | 21 +-
README.md | 5 +-
docs/BENCHMARKS.md | 798 ++++----
CHANGELOG.md => docs/CHANGELOG.md | 11 +
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 144942 -> 148615 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 102008 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 104995 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 106904 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 96988 -> 94378 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 101123 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 115811 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 94419 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 108608 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 111613 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 94788 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 111367 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 95783 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 88024 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 93999 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 110307 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 104342 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 192900 -> 188093 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 101904 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 99382 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 115438 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 104879 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 92908 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 114429 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 101859 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 104369 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 94696 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 93378 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 106771 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 98714 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 95373 -> 89152 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 102969 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 92580 -> 97487 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 97548 -> 97496 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 82919 -> 91152 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 92227 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 99377 -> 111482 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 98243 -> 98475 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 108689 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 96474 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 90216 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 119957 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 113230 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 111178 -> 108684 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 136653 -> 136979 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 108637 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 103038 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 116723 -> 117841 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 93692 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 111563 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 109222 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 83923 -> 84605 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 109757 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 79737 -> 85167 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 105109 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 113549 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 95393 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 103945 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 93292 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 109610 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 107527 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 96391 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 76599 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 90116 -> 91720 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 95613 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 95122 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 106126 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 93322 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 106208 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 92915 -> 94297 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 110428 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 102414 bytes
..._trial_graph_mean_returns_ma_vs_frames.png | Bin 0 -> 95769 bytes
pyproject.toml | 9 +-
slm_lab/agent/memory/replay.py | 4 +-
slm_lab/agent/net/__init__.py | 6 +
slm_lab/agent/net/torcharc_net.py | 145 ++
slm_lab/cli/plot.py | 5 +-
slm_lab/cli/remote.py | 2 +-
slm_lab/env/__init__.py | 125 +-
slm_lab/lib/util.py | 228 ++-
slm_lab/spec/benchmark/ppo/ppo_cartpole.yaml | 58 +
slm_lab/spec/benchmark/sac/sac_cartpole.yaml | 40 +
.../spec/benchmark_arc/a2c/a2c_atari_arc.yaml | 77 +
.../benchmark_arc/a2c/a2c_classic_arc.yaml | 311 +++
.../spec/benchmark_arc/dqn/dqn_box2d_arc.yaml | 180 ++
.../benchmark_arc/dqn/dqn_classic_arc.yaml | 428 ++++
.../spec/benchmark_arc/ppo/ppo_atari_arc.yaml | 155 ++
.../spec/benchmark_arc/ppo/ppo_box2d_arc.yaml | 248 +++
.../benchmark_arc/ppo/ppo_classic_arc.yaml | 192 ++
.../benchmark_arc/ppo/ppo_mujoco_arc.yaml | 393 ++++
.../reinforce/reinforce_arc.yaml | 265 +++
.../spec/benchmark_arc/sac/sac_atari_arc.yaml | 79 +
.../spec/benchmark_arc/sac/sac_box2d_arc.yaml | 142 ++
.../benchmark_arc/sac/sac_classic_arc.yaml | 111 ++
.../benchmark_arc/sac/sac_mujoco_arc.yaml | 339 ++++
.../benchmark_arc/sac/sac_mujoco_exp_arc.yaml | 180 ++
.../spec/benchmark_arc/sarsa/sarsa_arc.yaml | 127 ++
slm_lab/spec/benchmark_arc/sil/sil_arc.yaml | 142 ++
.../experimental/torcharc/ppo_atari_arc.yaml | 92 +
.../torcharc/ppo_cartpole_arc.yaml | 73 +
.../experimental/torcharc/ppo_mujoco_arc.yaml | 78 +
.../experimental/torcharc/sac_atari_arc.yaml | 79 +
.../torcharc/sac_cartpole_arc.yaml | 56 +
.../torcharc/sac_classic_arc.yaml | 95 +
slm_lab/spec/spec_util.py | 237 ++-
test/agent/net/test_torcharc_net.py | 299 +++
test/cli/test_remote.py | 7 +-
test/spec/test_yaml_spec.py | 41 +
uv.lock | 1740 ++++-------------
117 files changed, 5652 insertions(+), 2088 deletions(-)
create mode 100755 .githooks/commit-msg
rename CHANGELOG.md => docs/CHANGELOG.md (94%)
create mode 100644 docs/plots/AirRaid-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Alien-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Amidar-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Assault-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Asterix-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Asteroids-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Atlantis-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/BankHeist-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/BattleZone-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/BeamRider-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Berzerk-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Bowling-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Boxing-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Breakout-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Carnival-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Centipede-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/ChopperCommand-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/CrazyClimber-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Defender-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/DemonAttack-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/DoubleDunk-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Enduro-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/FishingDerby-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Freeway-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Frostbite-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Gopher-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Gravitar-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Hero-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/IceHockey-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Jamesbond-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/JourneyEscape-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Kangaroo-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Krull-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/KungFuMaster-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/MsPacman-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/NameThisGame-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Phoenix-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Pong-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Pooyan-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Qbert-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Riverraid-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/RoadRunner-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Robotank-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Seaquest-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Skiing-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Solaris-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/SpaceInvaders-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/StarGunner-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Surround-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Tennis-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/TimePilot-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Tutankham-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/UpNDown-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/VideoPinball-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/WizardOfWor-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/YarsRevenge-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 docs/plots/Zaxxon-v5_multi_trial_graph_mean_returns_ma_vs_frames.png
create mode 100644 slm_lab/agent/net/torcharc_net.py
create mode 100644 slm_lab/spec/benchmark/ppo/ppo_cartpole.yaml
create mode 100644 slm_lab/spec/benchmark/sac/sac_cartpole.yaml
create mode 100644 slm_lab/spec/benchmark_arc/a2c/a2c_atari_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/a2c/a2c_classic_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/dqn/dqn_box2d_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/dqn/dqn_classic_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/ppo/ppo_atari_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/ppo/ppo_box2d_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/ppo/ppo_classic_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/reinforce/reinforce_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/sac/sac_atari_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/sac/sac_box2d_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/sac/sac_classic_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/sac/sac_mujoco_exp_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/sarsa/sarsa_arc.yaml
create mode 100644 slm_lab/spec/benchmark_arc/sil/sil_arc.yaml
create mode 100644 slm_lab/spec/experimental/torcharc/ppo_atari_arc.yaml
create mode 100644 slm_lab/spec/experimental/torcharc/ppo_cartpole_arc.yaml
create mode 100644 slm_lab/spec/experimental/torcharc/ppo_mujoco_arc.yaml
create mode 100644 slm_lab/spec/experimental/torcharc/sac_atari_arc.yaml
create mode 100644 slm_lab/spec/experimental/torcharc/sac_cartpole_arc.yaml
create mode 100644 slm_lab/spec/experimental/torcharc/sac_classic_arc.yaml
create mode 100644 test/agent/net/test_torcharc_net.py
create mode 100644 test/spec/test_yaml_spec.py
diff --git a/.claude/skills/benchmark/SKILL.md b/.claude/skills/benchmark/SKILL.md
index 431225313..30b66ef90 100644
--- a/.claude/skills/benchmark/SKILL.md
+++ b/.claude/skills/benchmark/SKILL.md
@@ -12,11 +12,29 @@ description: Run SLM-Lab deep RL benchmarks, monitor dstack jobs, extract result
3. **Respect Settings line** for each env (max_frame, num_envs, etc.)
4. **Use `${max_frame}` variable** in specs — never hardcode
5. **Runs must complete in <6h** (dstack max_duration)
+6. **Max 10 concurrent dstack runs** — launch in batches of 10, wait for capacity/completion before launching more. Never submit all runs at once; dstack capacity is limited and mass submissions cause "no offers" failures
-## Run → Score → Record
+## Per-Run Intake Checklist
+
+**Every completed run MUST go through ALL of these steps. No exceptions. Do not skip any step.**
+
+When a run completes (`dstack ps` shows `exited (0)`):
+
+1. **Extract score**: `dstack logs NAME | grep "trial_metrics"` → get `total_reward_ma`
+2. **Find HF folder name**: `dstack logs NAME 2>&1 | grep "Uploading data/"` → extract folder name from the upload log line
+3. **Update table score** in BENCHMARKS.md
+4. **Update table HF link**: `[FOLDER](https://huggingface.co/datasets/SLM-Lab/benchmark-dev/tree/main/data/FOLDER)`
+5. **Pull HF data locally**: `source .env && hf download SLM-Lab/benchmark-dev --local-dir data/benchmark-dev --repo-type dataset --include "data/FOLDER/*"`
+6. **Generate plot**: `uv run slm-lab plot -t "EnvName" -f data/benchmark-dev/data/FOLDER1,data/benchmark-dev/data/FOLDER2`
+7. **Verify plot exists** in `docs/plots/`
+8. **Commit** score + link + plot together
+
+A row in BENCHMARKS.md is NOT complete until it has: score, HF link, and plot.
+
+## Launch
```bash
-# Launch
+# Launch a run
source .env && uv run slm-lab run-remote --gpu \
-s env=ALE/Pong-v5 SPEC_FILE SPEC_NAME train -n NAME
@@ -30,67 +48,53 @@ dstack logs NAME | grep "trial_metrics" # extract score at completion
## Data Lifecycle
-Data flows through three stages: **pull → plot → graduate**. Keep local data until graduation is complete.
-
```
Remote GPU run → auto-uploads to benchmark-dev (HF)
- ↓
- Pull to local data/
- ↓
- Generate plots (docs/plots/)
- ↓
- Update BENCHMARKS.md (scores, links)
- ↓
- Graduate to public benchmark (HF)
- ↓
- Update links: benchmark-dev → benchmark
- ↓
- Upload docs/ to public benchmark (HF)
+ ↓ Pull to local data/
+ ↓ Generate plots (docs/plots/)
+ ↓ Update BENCHMARKS.md (scores, links, plots)
+ ↓ Graduate to public benchmark (HF)
+ ↓ Update links: benchmark-dev → benchmark
+ ↓ Upload docs/ to public benchmark (HF)
```
### Pull Data
```bash
# Pull full dataset (fast, single request — avoids rate limits)
-source .env && uv run hf download SLM-Lab/benchmark-dev \
+source .env && hf download SLM-Lab/benchmark-dev \
--local-dir data/benchmark-dev --repo-type dataset
+# Or pull specific folder
+source .env && hf download SLM-Lab/benchmark-dev \
+ --local-dir data/benchmark-dev --repo-type dataset --include "data/FOLDER/*"
+
# KEEP this data — needed for plots AND graduation upload later
-# Never rm -rf data/benchmark-dev/ until graduation is complete
```
### Generate Plots
```bash
-# Find folders for a game (need a2c + ppo + sac for comparison)
+# Find folders for a game
ls data/benchmark-dev/data/ | grep -i pong
-# Generate comparison plot
+# Generate comparison plot (include all algorithms available)
uv run slm-lab plot -t "Pong" \
- -f data/benchmark-dev/data/a2c_folder,data/benchmark-dev/data/ppo_folder,data/benchmark-dev/data/sac_folder
+ -f data/benchmark-dev/data/ppo_folder,data/benchmark-dev/data/sac_folder
```
-### Update BENCHMARKS.md
-
-- Add score in results table
-- Add HF link: `[FOLDER](https://huggingface.co/datasets/SLM-Lab/benchmark-dev/tree/main/data/FOLDER)`
-- Status: ✅ Solved | ⚠️ Close (>80%) | ❌ Failed
-
### Graduate to Public HF
When benchmarks are finalized, publish from `benchmark-dev` → `benchmark`:
```bash
-# Upload data (from local copy — already pulled above)
-source .env && uv run hf upload SLM-Lab/benchmark \
+source .env && hf upload SLM-Lab/benchmark \
data/benchmark-dev/data data --repo-type dataset
# Update BENCHMARKS.md links: benchmark-dev → benchmark
-# (find-replace in docs/BENCHMARKS.md)
-
-# Upload docs (with updated links) and README
-source .env && uv run hf upload SLM-Lab/benchmark docs docs --repo-type dataset
-source .env && uv run hf upload SLM-Lab/benchmark README.md README.md --repo-type dataset
+# Upload docs and README
+source .env && hf upload SLM-Lab/benchmark docs docs --repo-type dataset
+source .env && hf upload SLM-Lab/benchmark README.md README.md --repo-type dataset
```
| Repo | Purpose |
@@ -108,6 +112,19 @@ source .env && uv run slm-lab run-remote --gpu SPEC_FILE SPEC_NAME search -n NAM
Budget: ~3-4 trials per dimension. After search: update spec with best params, run `train`, use that result.
+## Autonomous Execution
+
+Work continuously when benchmarking. Use `sleep 300 && dstack ps` to actively wait (5 min intervals) — never delegate monitoring to background processes or scripts. Stay engaged in the conversation.
+
+**Workflow loop** (repeat every 5-10 minutes):
+1. **Check status**: `dstack ps` — identify completed/failed/running
+2. **Intake completed runs**: For EACH completed run, do the full intake checklist above (score → HF link → pull → plot → table update)
+3. **Launch next batch**: Up to 10 concurrent. Check capacity before launching more
+4. **Iterate on failures**: Relaunch or adjust config immediately
+5. **Commit progress**: Regular commits of score + link + plot updates
+
+**Key principle**: Work continuously, check in regularly, iterate immediately on failures. Never idle. Keep reminding yourself to continue without pausing — check on tasks, update, plan, and pick up the next task immediately until all tasks are completed.
+
## Troubleshooting
- **Run interrupted**: Relaunch, increment name suffix (e.g., pong3 → pong4)
diff --git a/.dstack/run-gpu-train.yml b/.dstack/run-gpu-train.yml
index 2b7654701..a6dc20e3f 100644
--- a/.dstack/run-gpu-train.yml
+++ b/.dstack/run-gpu-train.yml
@@ -20,12 +20,14 @@ commands:
- cd /workflow && uv run slm-lab run ${SPEC_VARS} ${SPEC_FILE} ${SPEC_NAME} ${LAB_MODE} --upload-hf
resources:
- gpu: 1..
- memory: 48GB..
+ gpu:
+ name: [RTX3090]
+ count: 1
+ memory: 32GB..
-spot_policy: on-demand
+spot_policy: auto
max_duration: 6h
-max_price: 0.25
+max_price: 0.50
retry:
on_events: [no-capacity]
duration: 1h
diff --git a/.githooks/commit-msg b/.githooks/commit-msg
new file mode 100755
index 000000000..bdbccfec0
--- /dev/null
+++ b/.githooks/commit-msg
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+# Validate conventional commit format: type: message | type(scope): message
+
+commit_msg_file="$1"
+commit_msg=$(head -1 "$commit_msg_file")
+
+# Skip merge commits and fixup/squash
+if echo "$commit_msg" | grep -qE '^(Merge |fixup! |squash! )'; then
+ exit 0
+fi
+
+# Validate format
+if ! echo "$commit_msg" | grep -qE '^(feat|fix|docs|chore|refactor|test|perf|ci|style|build)(\(.+\))?: .+'; then
+ echo "ERROR: Invalid commit message format."
+ echo ""
+ echo " Expected: type: message"
+ echo " Example: feat: add user authentication"
+ echo " Example: fix(parser): handle empty input"
+ echo ""
+ echo " Allowed types: feat fix docs chore refactor test perf ci style build"
+ exit 1
+fi
diff --git a/CLAUDE.md b/CLAUDE.md
index ef0291ee2..dc17f441f 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -66,7 +66,9 @@ Apply these six principles to every decision.
1. **Give enough context in spawn prompts** - teammates don't inherit conversation history, only CLAUDE.md and project context
2. **Size tasks appropriately** - self-contained units with clear deliverables, ~5-6 per teammate
3. **Avoid file conflicts** - each teammate owns different files
-4. **Use sonnet for volume work** - reserve opus for strategic decisions
+
+> Work autonomously: run things in parallel, continue without pausing, pick up the next task immediately. For long-running tasks, use `sleep N` to actively wait and check in — do NOT delegate to background processes. Stay engaged in the conversation.
+
## Documentation
@@ -192,7 +194,8 @@ uv run ruff format
For a small box that only dispatches dstack runs and syncs results (no local ML training):
```bash
-uv sync --no-default-groups
+uv sync --no-default-groups # skip ML deps (torch, gymnasium, etc.)
+uv tool install dstack
uv run --no-default-groups slm-lab run-remote spec.json spec_name train
uv run --no-default-groups slm-lab pull spec_name
uv run --no-default-groups slm-lab plot -f folder1,folder2
@@ -236,11 +239,17 @@ dstack stop -y # terminate
**`docs/BENCHMARKS.md`** is the single source of truth. See the `/benchmark` skill for operational details (commands, data lifecycle, graduation).
-**Pattern**: Launch → Monitor → Extract score → Pull data → Plot → Update table → Commit
+**Per-run intake (MANDATORY — every completed run must go through ALL steps):**
+1. Extract score (`dstack logs NAME | grep trial_metrics`)
+2. Find HF folder name (query HuggingFace API)
+3. Update table with score AND HF link
+4. Pull HF data locally (`hf download`)
+5. Generate plot (`uv run slm-lab plot`)
+6. Commit score + link + plot together
-**Autonomous execution**: Fill GPU capacity (~30 concurrent runs), check status regularly, extract immediately on completion, iterate on failures. Never idle.
+A table row is NOT complete until it has: **score, HF link, and plot**. See `/benchmark` skill for commands.
-**Data lifecycle**: Pull full HF dataset to `data/benchmark-dev/` once — keep it for plots AND graduation. Never delete until graduation to public repo is complete.
+**Autonomous execution**: Max 10 concurrent runs. Use `sleep 300 && dstack ps` to actively wait. Never delegate monitoring to background scripts. Never idle.
### Hyperparameter Search
@@ -261,6 +270,6 @@ Prefer continuous distributions (`__uniform`, `__loguniform`) over `__choice`. S
## SLM-Lab Documentation
-- **Changelog**: Document major changes in `CHANGELOG.md`
+- **Changelog**: Document major changes in `docs/CHANGELOG.md`
- **Benchmarks**: `docs/BENCHMARKS.md` — results tables, targets, reproducibility
- **Specs**: Document rationale in commit messages when updating specs
diff --git a/README.md b/README.md
index 8e295b9ee..d6bf5bdd7 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
Documentation · Benchmark Results
->**NOTE:** v5.0 updates to Gymnasium, `uv` tooling, and modern dependencies with ARM support - see [CHANGELOG.md](CHANGELOG.md).
+>**NOTE:** v5.0 updates to Gymnasium, `uv` tooling, and modern dependencies with ARM support - see [CHANGELOG.md](docs/CHANGELOG.md).
>
>Book readers: `git checkout v4.1.1` for *Foundations of Deep Reinforcement Learning* code.
@@ -111,7 +111,8 @@ Config options in `.dstack/`: `run-gpu-train.yml`, `run-gpu-search.yml`, `run-cp
For a lightweight box that only dispatches dstack runs, syncs results, and generates plots (no local ML training):
```bash
-uv sync --no-default-groups
+uv sync --no-default-groups # skip ML deps (torch, gymnasium, etc.)
+uv tool install dstack
uv run --no-default-groups slm-lab run-remote spec.json spec_name train
uv run --no-default-groups slm-lab pull spec_name
uv run --no-default-groups slm-lab plot -f folder1,folder2
diff --git a/docs/BENCHMARKS.md b/docs/BENCHMARKS.md
index 0ec9d0e33..f1024d086 100644
--- a/docs/BENCHMARKS.md
+++ b/docs/BENCHMARKS.md
@@ -24,10 +24,10 @@ Remote setup: `cp .env.example .env` then set `HF_TOKEN`. See [README](../README
### Atari
-All games share one spec file (54 tested, 5 hard exploration skipped). Use `-s env=ENV` to substitute. Runs take ~2-3 hours on GPU.
+All games share one spec file (57 tested, 6 hard exploration skipped). Use `-s env=ENV` to substitute. Runs take ~2-3 hours on GPU.
```bash
-source .env && slm-lab run-remote --gpu -s env=ALE/Pong-v5 slm_lab/spec/benchmark/ppo/ppo_atari.json ppo_atari train -n pong
+source .env && slm-lab run-remote --gpu -s env=ALE/Pong-v5 slm_lab/spec/benchmark_arc/ppo/ppo_atari_arc.yaml ppo_atari_arc train -n pong
```
### Download Results
@@ -42,13 +42,13 @@ slm-lab list # see available experiments
To ensure benchmark integrity, follow these steps when adding or updating results:
#### 1. Audit Spec Settings
-* **Before Running**: Ensure `spec.json` matches the **Settings** line defined in each benchmark table.
+* **Before Running**: Ensure `spec.yaml` matches the **Settings** line defined in each benchmark table.
* **Example**: `max_frame 3e5 | num_envs 4 | max_session 4 | log_frequency 500`
-* **After Pulling**: Verify the downloaded `spec.json` matches these rules before using the data.
+* **After Pulling**: Verify the downloaded `spec.yaml` matches these rules before using the data.
#### 2. Run Benchmark & Commit Specs
* **Run**: Execute the benchmark locally or remotely using the commands in [Usage](#usage).
-* **Commit Specs**: Always commit the `spec.json` file used for the run to the repo.
+* **Commit Specs**: Always commit the `spec.yaml` file used for the run to the repo.
* **Table Entry**: Ensure `BENCHMARKS.md` has an entry with the correct `SPEC_FILE` and `SPEC_NAME`.
#### 3. Record Scores & Plots
@@ -105,16 +105,14 @@ Search budget: ~3-4 trials per dimension (8 trials = 2-3 dims, 16 = 3-4 dims, 20
}
```
-
-
## Progress
| Phase | Category | Envs | REINFORCE | SARSA | DQN | DDQN+PER | A2C | PPO | SAC | Overall |
|-------|----------|------|-----------|-------|-----|----------|-----|-----|-----|---------|
-| 1 | Classic Control | 3 | 🔄 | 🔄 | 🔄 | 🔄 | 🔄 | 🔄 | 🔄 | Rerun pending |
-| 2 | Box2D | 2 | N/A | N/A | 🔄 | 🔄 | 🔄 | 🔄 | 🔄 | Rerun pending |
-| 3 | MuJoCo | 11 | N/A | N/A | N/A | N/A | 🔄 | 🔄 | 🔄 | Rerun pending |
-| 4 | Atari | 59 | N/A | N/A | N/A | Skip | 🔄 | ✅ | N/A | **54 games** |
+| 1 | Classic Control | 3 | ✅ | ✅ | ⚠️ | ✅ | ✅ | ✅ | ✅ | Done |
+| 2 | Box2D | 2 | N/A | N/A | ⚠️ | ✅ | ❌ | ⚠️ | ⚠️ | Done |
+| 3 | MuJoCo | 11 | N/A | N/A | N/A | N/A | N/A | ⚠️ | ⚠️ | Done |
+| 4 | Atari | 57 | N/A | N/A | N/A | Skip | Done | Done | Done | Done |
**Legend**: ✅ Solved | ⚠️ Close (>80%) | 📊 Acceptable | ❌ Failed | 🔄 In progress/Pending | Skip Not started | N/A Not applicable
@@ -130,17 +128,17 @@ Search budget: ~3-4 trials per dimension (8 trials = 2-3 dims, 16 = 3-4 dims, 20
**Settings**: max_frame 2e5 | num_envs 4 | max_session 4 | log_frequency 500
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| REINFORCE | ✅ | 469.68 | [slm_lab/spec/benchmark/reinforce/reinforce_cartpole.json](../slm_lab/spec/benchmark/reinforce/reinforce_cartpole.json) | reinforce_cartpole | [reinforce_cartpole_2026_01_30_215510](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/reinforce_cartpole_2026_01_30_215510) |
-| SARSA | ✅ | 421.58 | [slm_lab/spec/benchmark/sarsa/sarsa_cartpole.json](../slm_lab/spec/benchmark/sarsa/sarsa_cartpole.json) | sarsa_boltzmann_cartpole | [sarsa_boltzmann_cartpole_2026_01_30_215508](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sarsa_boltzmann_cartpole_2026_01_30_215508) |
-| DQN | ⚠️ | 188.07 | [slm_lab/spec/benchmark/dqn/dqn_cartpole.json](../slm_lab/spec/benchmark/dqn/dqn_cartpole.json) | dqn_boltzmann_cartpole | [dqn_boltzmann_cartpole_2026_01_30_215213](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/dqn_boltzmann_cartpole_2026_01_30_215213) |
-| DDQN+PER | ✅ | 432.88 | [slm_lab/spec/benchmark/dqn/dqn_cartpole.json](../slm_lab/spec/benchmark/dqn/dqn_cartpole.json) | ddqn_per_boltzmann_cartpole | [ddqn_per_boltzmann_cartpole_2026_01_30_215454](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ddqn_per_boltzmann_cartpole_2026_01_30_215454) |
-| A2C | ✅ | 499.73 | [slm_lab/spec/benchmark/a2c/a2c_gae_cartpole.json](../slm_lab/spec/benchmark/a2c/a2c_gae_cartpole.json) | a2c_gae_cartpole | [a2c_gae_cartpole_2026_01_30_215337](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_cartpole_2026_01_30_215337) |
-| PPO | ✅ | 495.62 | [slm_lab/spec/benchmark/ppo/ppo_cartpole.json](../slm_lab/spec/benchmark/ppo/ppo_cartpole.json) | ppo_cartpole | [ppo_cartpole_2026_02_08_230219](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_cartpole_2026_02_08_230219) |
-| SAC | ✅ | 414.97 | [slm_lab/spec/benchmark/sac/sac_cartpole.json](../slm_lab/spec/benchmark/sac/sac_cartpole.json) | sac_cartpole | [sac_cartpole_2026_02_08_141601](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_cartpole_2026_02_08_141601) |
+| REINFORCE | ✅ | 483.31 | [slm_lab/spec/benchmark_arc/reinforce/reinforce_arc.yaml](../slm_lab/spec/benchmark_arc/reinforce/reinforce_arc.yaml) | reinforce_cartpole_arc | [reinforce_cartpole_arc_2026_02_11_135616](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/reinforce_cartpole_arc_2026_02_11_135616) |
+| SARSA | ✅ | 430.95 | [slm_lab/spec/benchmark_arc/sarsa/sarsa_arc.yaml](../slm_lab/spec/benchmark_arc/sarsa/sarsa_arc.yaml) | sarsa_boltzmann_cartpole_arc | [sarsa_boltzmann_cartpole_arc_2026_02_11_135616](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sarsa_boltzmann_cartpole_arc_2026_02_11_135616) |
+| DQN | ⚠️ | 239.94 | [slm_lab/spec/benchmark_arc/dqn/dqn_classic_arc.yaml](../slm_lab/spec/benchmark_arc/dqn/dqn_classic_arc.yaml) | dqn_boltzmann_cartpole_arc | [dqn_boltzmann_cartpole_arc_2026_02_11_135648](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/dqn_boltzmann_cartpole_arc_2026_02_11_135648) |
+| DDQN+PER | ✅ | 451.51 | [slm_lab/spec/benchmark_arc/dqn/dqn_classic_arc.yaml](../slm_lab/spec/benchmark_arc/dqn/dqn_classic_arc.yaml) | ddqn_per_boltzmann_cartpole_arc | [ddqn_per_boltzmann_cartpole_arc_2026_02_11_140518](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ddqn_per_boltzmann_cartpole_arc_2026_02_11_140518) |
+| A2C | ✅ | 496.68 | [slm_lab/spec/benchmark_arc/a2c/a2c_classic_arc.yaml](../slm_lab/spec/benchmark_arc/a2c/a2c_classic_arc.yaml) | a2c_gae_cartpole_arc | [a2c_gae_cartpole_arc_2026_02_11_142531](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_cartpole_arc_2026_02_11_142531) |
+| PPO | ✅ | 498.94 | [slm_lab/spec/benchmark_arc/ppo/ppo_classic_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_classic_arc.yaml) | ppo_cartpole_arc | [ppo_cartpole_arc_2026_02_11_144029](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_cartpole_arc_2026_02_11_144029) |
+| SAC | ✅ | 406.09 | [slm_lab/spec/benchmark_arc/sac/sac_classic_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_classic_arc.yaml) | sac_cartpole_arc | [sac_cartpole_arc_2026_02_11_144155](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_cartpole_arc_2026_02_11_144155) |
-
+
#### 1.2 Acrobot-v1
@@ -148,15 +146,15 @@ Search budget: ~3-4 trials per dimension (8 trials = 2-3 dims, 16 = 3-4 dims, 20
**Settings**: max_frame 3e5 | num_envs 4 | max_session 4 | log_frequency 500
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| DQN | ✅ | -94.81 | [slm_lab/spec/benchmark/dqn/dqn_acrobot.json](../slm_lab/spec/benchmark/dqn/dqn_acrobot.json) | dqn_boltzmann_acrobot | [dqn_boltzmann_acrobot_2026_01_30_215429](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/dqn_boltzmann_acrobot_2026_01_30_215429) |
-| DDQN+PER | ✅ | -85.17 | [slm_lab/spec/benchmark/dqn/ddqn_per_acrobot.json](../slm_lab/spec/benchmark/dqn/ddqn_per_acrobot.json) | ddqn_per_acrobot | [ddqn_per_acrobot_2026_01_30_215436](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ddqn_per_acrobot_2026_01_30_215436) |
-| A2C | ✅ | -83.75 | [slm_lab/spec/benchmark/a2c/a2c_gae_acrobot.json](../slm_lab/spec/benchmark/a2c/a2c_gae_acrobot.json) | a2c_gae_acrobot | [a2c_gae_acrobot_2026_01_30_215413](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_acrobot_2026_01_30_215413) |
-| PPO | ✅ | -81.43 | [slm_lab/spec/benchmark/ppo/ppo_acrobot.json](../slm_lab/spec/benchmark/ppo/ppo_acrobot.json) | ppo_acrobot | [ppo_acrobot_2026_01_30_215352](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_acrobot_2026_01_30_215352) |
-| SAC | ✅ | -90.30 | [slm_lab/spec/benchmark/sac/sac_acrobot.json](../slm_lab/spec/benchmark/sac/sac_acrobot.json) | sac_acrobot | [sac_acrobot_2026_02_08_142215](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_acrobot_2026_02_08_142215) |
+| DQN | ✅ | -94.17 | [slm_lab/spec/benchmark_arc/dqn/dqn_classic_arc.yaml](../slm_lab/spec/benchmark_arc/dqn/dqn_classic_arc.yaml) | dqn_boltzmann_acrobot_arc | [dqn_boltzmann_acrobot_arc_2026_02_11_144342](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/dqn_boltzmann_acrobot_arc_2026_02_11_144342) |
+| DDQN+PER | ✅ | -83.92 | [slm_lab/spec/benchmark_arc/dqn/dqn_classic_arc.yaml](../slm_lab/spec/benchmark_arc/dqn/dqn_classic_arc.yaml) | ddqn_per_acrobot_arc | [ddqn_per_acrobot_arc_2026_02_11_153725](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ddqn_per_acrobot_arc_2026_02_11_153725) |
+| A2C | ✅ | -83.99 | [slm_lab/spec/benchmark_arc/a2c/a2c_classic_arc.yaml](../slm_lab/spec/benchmark_arc/a2c/a2c_classic_arc.yaml) | a2c_gae_acrobot_arc | [a2c_gae_acrobot_arc_2026_02_11_153806](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_acrobot_arc_2026_02_11_153806) |
+| PPO | ✅ | -81.28 | [slm_lab/spec/benchmark_arc/ppo/ppo_classic_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_classic_arc.yaml) | ppo_acrobot_arc | [ppo_acrobot_arc_2026_02_11_153758](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_acrobot_arc_2026_02_11_153758) |
+| SAC | ✅ | -92.60 | [slm_lab/spec/benchmark_arc/sac/sac_classic_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_classic_arc.yaml) | sac_acrobot_arc | [sac_acrobot_arc_2026_02_11_162211](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_acrobot_arc_2026_02_11_162211) |
-
+
#### 1.3 Pendulum-v1
@@ -164,13 +162,13 @@ Search budget: ~3-4 trials per dimension (8 trials = 2-3 dims, 16 = 3-4 dims, 20
**Settings**: max_frame 3e5 | num_envs 4 | max_session 4 | log_frequency 500
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| A2C | ❌ | -553.00 | [slm_lab/spec/benchmark/a2c/a2c_gae_pendulum.json](../slm_lab/spec/benchmark/a2c/a2c_gae_pendulum.json) | a2c_gae_pendulum | [a2c_gae_pendulum_2026_01_30_215421](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_pendulum_2026_01_30_215421) |
-| PPO | ✅ | -168.26 | [slm_lab/spec/benchmark/ppo/ppo_pendulum.json](../slm_lab/spec/benchmark/ppo/ppo_pendulum.json) | ppo_pendulum | [ppo_pendulum_2026_01_30_215944](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_pendulum_2026_01_30_215944) |
-| SAC | ✅ | -148.67 | [slm_lab/spec/benchmark/sac/sac_pendulum.json](../slm_lab/spec/benchmark/sac/sac_pendulum.json) | sac_pendulum | [sac_pendulum_2026_02_08_141615](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_pendulum_2026_02_08_141615) |
+| A2C | ❌ | -820.74 | [slm_lab/spec/benchmark_arc/a2c/a2c_classic_arc.yaml](../slm_lab/spec/benchmark_arc/a2c/a2c_classic_arc.yaml) | a2c_gae_pendulum_arc | [a2c_gae_pendulum_arc_2026_02_11_162217](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_pendulum_arc_2026_02_11_162217) |
+| PPO | ✅ | -174.87 | [slm_lab/spec/benchmark_arc/ppo/ppo_classic_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_classic_arc.yaml) | ppo_pendulum_arc | [ppo_pendulum_arc_2026_02_11_162156](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_pendulum_arc_2026_02_11_162156) |
+| SAC | ✅ | -150.97 | [slm_lab/spec/benchmark_arc/sac/sac_classic_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_classic_arc.yaml) | sac_pendulum_arc | [sac_pendulum_arc_2026_02_11_162240](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_pendulum_arc_2026_02_11_162240) |
-
+
### Phase 2: Box2D
@@ -180,15 +178,15 @@ Search budget: ~3-4 trials per dimension (8 trials = 2-3 dims, 16 = 3-4 dims, 20
**Settings**: max_frame 3e5 | num_envs 8 | max_session 4 | log_frequency 1000
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| DQN | ⚠️ | 183.64 | [slm_lab/spec/benchmark/dqn/dqn_lunar.json](../slm_lab/spec/benchmark/dqn/dqn_lunar.json) | dqn_concat_lunar | [dqn_concat_lunar_2026_01_30_215529](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/dqn_concat_lunar_2026_01_30_215529) |
-| DDQN+PER | ✅ | 261.49 | [slm_lab/spec/benchmark/dqn/ddqn_per_lunar.json](../slm_lab/spec/benchmark/dqn/ddqn_per_lunar.json) | ddqn_per_concat_lunar | [ddqn_per_concat_lunar_2026_01_30_215532](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ddqn_per_concat_lunar_2026_01_30_215532) |
-| A2C | ❌ | 9.53 | [slm_lab/spec/benchmark/a2c/a2c_gae_lunar.json](../slm_lab/spec/benchmark/a2c/a2c_gae_lunar.json) | a2c_gae_lunar | [a2c_gae_lunar_2026_01_30_215529](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_lunar_2026_01_30_215529) |
-| PPO | ⚠️ | 159.02 | [slm_lab/spec/benchmark/ppo/ppo_lunar.json](../slm_lab/spec/benchmark/ppo/ppo_lunar.json) | ppo_lunar | [ppo_lunar_2026_01_30_215550](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_lunar_2026_01_30_215550) |
-| SAC | ⚠️ | 134.53 | [slm_lab/spec/benchmark/sac/sac_lunar.json](../slm_lab/spec/benchmark/sac/sac_lunar.json) | sac_lunar | [sac_lunar_2026_02_08_141654](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_lunar_2026_02_08_141654) |
+| DQN | ⚠️ | 195.21 | [slm_lab/spec/benchmark_arc/dqn/dqn_box2d_arc.yaml](../slm_lab/spec/benchmark_arc/dqn/dqn_box2d_arc.yaml) | dqn_concat_lunar_arc | [dqn_concat_lunar_arc_2026_02_11_201407](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/dqn_concat_lunar_arc_2026_02_11_201407) |
+| DDQN+PER | ✅ | 265.90 | [slm_lab/spec/benchmark_arc/dqn/dqn_box2d_arc.yaml](../slm_lab/spec/benchmark_arc/dqn/dqn_box2d_arc.yaml) | ddqn_per_concat_lunar_arc | [ddqn_per_concat_lunar_arc_2026_02_13_105115](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ddqn_per_concat_lunar_arc_2026_02_13_105115) |
+| A2C | ❌ | 27.38 | [slm_lab/spec/benchmark_arc/a2c/a2c_classic_arc.yaml](../slm_lab/spec/benchmark_arc/a2c/a2c_classic_arc.yaml) | a2c_gae_lunar_arc | [a2c_gae_lunar_arc_2026_02_11_224304](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_lunar_arc_2026_02_11_224304) |
+| PPO | ⚠️ | 183.30 | [slm_lab/spec/benchmark_arc/ppo/ppo_box2d_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_box2d_arc.yaml) | ppo_lunar_arc | [ppo_lunar_arc_2026_02_11_201303](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_lunar_arc_2026_02_11_201303) |
+| SAC | ⚠️ | 106.17 | [slm_lab/spec/benchmark_arc/sac/sac_box2d_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_box2d_arc.yaml) | sac_lunar_arc | [sac_lunar_arc_2026_02_11_201417](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_lunar_arc_2026_02_11_201417) |
-
+
#### 2.2 LunarLander-v3 (Continuous)
@@ -196,13 +194,13 @@ Search budget: ~3-4 trials per dimension (8 trials = 2-3 dims, 16 = 3-4 dims, 20
**Settings**: max_frame 3e5 | num_envs 8 | max_session 4 | log_frequency 1000
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| A2C | ❌ | -38.18 | [slm_lab/spec/benchmark/a2c/a2c_gae_lunar.json](../slm_lab/spec/benchmark/a2c/a2c_gae_lunar.json) | a2c_gae_lunar_continuous | [a2c_gae_lunar_continuous_2026_01_30_215630](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_lunar_continuous_2026_01_30_215630) |
-| PPO | ⚠️ | 165.48 | [slm_lab/spec/benchmark/ppo/ppo_lunar.json](../slm_lab/spec/benchmark/ppo/ppo_lunar.json) | ppo_lunar_continuous | [ppo_lunar_continuous_2026_01_31_104549](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_lunar_continuous_2026_01_31_104549) |
-| SAC | ⚠️ | 179.40 | [slm_lab/spec/benchmark/sac/sac_lunar.json](../slm_lab/spec/benchmark/sac/sac_lunar.json) | sac_lunar_continuous | [sac_lunar_continuous_2026_02_08_141813](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_lunar_continuous_2026_02_08_141813) |
+| A2C | ❌ | -76.81 | [slm_lab/spec/benchmark_arc/a2c/a2c_classic_arc.yaml](../slm_lab/spec/benchmark_arc/a2c/a2c_classic_arc.yaml) | a2c_gae_lunar_continuous_arc | [a2c_gae_lunar_continuous_arc_2026_02_11_224301](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_lunar_continuous_arc_2026_02_11_224301) |
+| PPO | ⚠️ | 132.58 | [slm_lab/spec/benchmark_arc/ppo/ppo_box2d_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_box2d_arc.yaml) | ppo_lunar_continuous_arc | [ppo_lunar_continuous_arc_2026_02_11_224229](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_lunar_continuous_arc_2026_02_11_224229) |
+| SAC | ⚠️ | 125.00 | [slm_lab/spec/benchmark_arc/sac/sac_box2d_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_box2d_arc.yaml) | sac_lunar_continuous_arc | [sac_lunar_continuous_arc_2026_02_12_222203](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_lunar_continuous_arc_2026_02_12_222203) |
-
+
### Phase 3: MuJoCo
@@ -212,65 +210,58 @@ Search budget: ~3-4 trials per dimension (8 trials = 2-3 dims, 16 = 3-4 dims, 20
**Algorithms**: PPO and SAC. Network: MLP [256,256], orthogonal init. PPO uses tanh activation; SAC uses relu.
-**Note on SAC frame budgets**: SAC uses higher update-to-data ratios (more gradient updates per step), making it more sample-efficient but slower per frame than PPO. SAC benchmarks use 1-2M frames (vs PPO's 4-10M) to fit within practical GPU wall-time limits (~6h). Scores may still be improving at cutoff.
+**Note on SAC frame budgets**: SAC uses higher update-to-data ratios (more gradient updates per step), making it more sample-efficient but slower per frame than PPO. SAC benchmarks use 1-4M frames (vs PPO's 4-10M) to fit within practical GPU wall-time limits (~6h). Scores may still be improving at cutoff.
+
+**Spec Files** (one file per algorithm, all envs via YAML anchors):
+- **PPO**: [ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml)
+- **SAC**: [sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml)
-**Spec Variants**: Two unified specs in [ppo_mujoco.json](../slm_lab/spec/benchmark/ppo/ppo_mujoco.json), plus individual specs for edge cases.
+**Spec Variants**: Each file has a base config (shared via YAML anchors) with per-env overrides:
| SPEC_NAME | Envs | Key Config |
|-----------|------|------------|
-| ppo_mujoco | HalfCheetah, Walker, Humanoid, HumanoidStandup | gamma=0.99, lam=0.95 |
-| ppo_mujoco_longhorizon | Reacher, Pusher | gamma=0.997, lam=0.97 |
-| Individual specs | Hopper, Swimmer, Ant, IP, IDP | See spec files for tuned hyperparams |
+| ppo_mujoco_arc | HalfCheetah, Walker, Humanoid, HumanoidStandup | Base: gamma=0.99, lam=0.95, lr=3e-4 |
+| ppo_mujoco_longhorizon_arc | Reacher, Pusher | gamma=0.997, lam=0.97, lr=2e-4, entropy=0.001 |
+| ppo_{env}_arc | Ant, Hopper, Swimmer, IP, IDP | Per-env tuned (gamma, lam, lr) |
+| sac_mujoco_arc | (generic, use with -s flags) | Base: gamma=0.99, iter=4, lr=3e-4, [256,256] |
+| sac_{env}_arc | All 11 envs | Per-env tuned (iter, gamma, lr, net size) |
-**Reproduce**: Copy `ENV`, `SPEC_FILE`, `SPEC_NAME` from table. Use `-s max_frame=` for all specs, add `-s env=` for unified specs:
-```bash
-# Unified specs (ppo_mujoco.json)
-source .env && slm-lab run-remote --gpu -s env=ENV -s max_frame=MAX_FRAME \
- slm_lab/spec/benchmark/ppo/ppo_mujoco.json SPEC_NAME train -n NAME
+**Reproduce**: Copy `SPEC_NAME` and `MAX_FRAME` from the table below.
-# Individual specs (env hardcoded)
-source .env && slm-lab run-remote --gpu -s max_frame=MAX_FRAME \
- slm_lab/spec/benchmark/ppo/SPEC_FILE SPEC_NAME train -n NAME
-```
-
-| ENV | MAX_FRAME | SPEC_FILE | SPEC_NAME |
-|-----|-----------|-----------|-----------|
-| Ant-v5 | 10e6 | ppo_ant.json | ppo_ant |
-| HalfCheetah-v5 | 10e6 | ppo_mujoco.json | ppo_mujoco |
-| Hopper-v5 | 4e6 | ppo_hopper.json | ppo_hopper |
-| Humanoid-v5 | 10e6 | ppo_mujoco.json | ppo_mujoco |
-| HumanoidStandup-v5 | 4e6 | ppo_mujoco.json | ppo_mujoco |
-| InvertedDoublePendulum-v5 | 10e6 | ppo_inverted_double_pendulum.json | ppo_inverted_double_pendulum |
-| InvertedPendulum-v5 | 4e6 | ppo_inverted_pendulum.json | ppo_inverted_pendulum |
-| Pusher-v5 | 4e6 | ppo_mujoco.json | ppo_mujoco_longhorizon |
-| Reacher-v5 | 4e6 | ppo_mujoco.json | ppo_mujoco_longhorizon |
-| Swimmer-v5 | 4e6 | ppo_swimmer.json | ppo_swimmer |
-| Walker2d-v5 | 10e6 | ppo_mujoco.json | ppo_mujoco |
-
-**SAC Reproduce**: Use individual specs (recommended — all hyperparams pre-configured):
```bash
-# Individual specs: env, max_frame, and all hyperparams are hardcoded in the spec
-source .env && slm-lab run-remote --gpu \
- slm_lab/spec/benchmark/sac/SPEC_FILE SPEC_NAME train -n NAME
+# PPO: env and max_frame are parameterized via -s flags
+source .env && slm-lab run-remote --gpu -s env=ENV -s max_frame=MAX_FRAME \
+ slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml SPEC_NAME train -n NAME
-# Example: reproduce Hopper SAC
+# SAC: env and max_frame are hardcoded per spec — no -s flags needed
source .env && slm-lab run-remote --gpu \
- slm_lab/spec/benchmark/sac/sac_hopper.json sac_hopper train -n sac-hopper
+ slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml SPEC_NAME train -n NAME
```
-| ENV | MAX_FRAME | SPEC_FILE | SPEC_NAME |
-|-----|-----------|-----------|-----------|
-| Ant-v5 | 2e6 | sac_ant.json | sac_ant |
-| HalfCheetah-v5 | 2e6 | sac_halfcheetah.json | sac_halfcheetah |
-| Hopper-v5 | 2e6 | sac_hopper.json | sac_hopper |
-| Humanoid-v5 | 1e6 | sac_humanoid.json | sac_humanoid |
-| HumanoidStandup-v5 | 1e6 | sac_humanoid_standup.json | sac_humanoid_standup |
-| InvertedDoublePendulum-v5 | 2e6 | sac_inverted_double_pendulum.json | sac_inverted_double_pendulum |
-| InvertedPendulum-v5 | 2e6 | sac_inverted_pendulum.json | sac_inverted_pendulum |
-| Pusher-v5 | 1e6 | sac_pusher.json | sac_pusher |
-| Reacher-v5 | 1e6 | sac_reacher.json | sac_reacher |
-| Swimmer-v5 | 2e6 | sac_swimmer.json | sac_swimmer |
-| Walker2d-v5 | 2e6 | sac_walker2d.json | sac_walker2d |
+| ENV | SPEC_NAME | MAX_FRAME |
+|-----|-----------|-----------|
+| Ant-v5 | ppo_ant_arc | 10e6 |
+| | sac_ant_arc | 2e6 |
+| HalfCheetah-v5 | ppo_mujoco_arc | 10e6 |
+| | sac_halfcheetah_arc | 4e6 |
+| Hopper-v5 | ppo_hopper_arc | 4e6 |
+| | sac_hopper_arc | 3e6 |
+| Humanoid-v5 | ppo_mujoco_arc | 10e6 |
+| | sac_humanoid_arc | 1e6 |
+| HumanoidStandup-v5 | ppo_mujoco_arc | 4e6 |
+| | sac_humanoid_standup_arc | 1e6 |
+| InvertedDoublePendulum-v5 | ppo_inverted_double_pendulum_arc | 10e6 |
+| | sac_inverted_double_pendulum_arc | 2e6 |
+| InvertedPendulum-v5 | ppo_inverted_pendulum_arc | 4e6 |
+| | sac_inverted_pendulum_arc | 2e6 |
+| Pusher-v5 | ppo_mujoco_longhorizon_arc | 4e6 |
+| | sac_pusher_arc | 1e6 |
+| Reacher-v5 | ppo_mujoco_longhorizon_arc | 4e6 |
+| | sac_reacher_arc | 1e6 |
+| Swimmer-v5 | ppo_swimmer_arc | 4e6 |
+| | sac_swimmer_arc | 2e6 |
+| Walker2d-v5 | ppo_mujoco_arc | 10e6 |
+| | sac_walker2d_arc | 3e6 |
#### 3.1 Ant-v5
@@ -278,12 +269,12 @@ source .env && slm-lab run-remote --gpu \
**Settings**: max_frame 10e6 | num_envs 16 | max_session 4 | log_frequency 1e4
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| PPO | ✅ | 2514.64 | [slm_lab/spec/benchmark/ppo/ppo_ant.json](../slm_lab/spec/benchmark/ppo/ppo_ant.json) | ppo_ant | [ppo_ant_2026_01_31_042006](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_ant_2026_01_31_042006) |
-| SAC | ✅ | 4844.20 | [slm_lab/spec/benchmark/sac/sac_ant.json](../slm_lab/spec/benchmark/sac/sac_ant.json) | sac_ant | [sac_ant_2026_02_09_093821](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_ant_2026_02_09_093821) |
+| PPO | ✅ | 2138.28 | [slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml) | ppo_ant_arc | [ppo_ant_arc_ant_2026_02_12_190644](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_ant_arc_ant_2026_02_12_190644) |
+| SAC | ✅ | 4942.91 | [slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml) | sac_ant_arc | [sac_ant_arc_2026_02_11_225529](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_ant_arc_2026_02_11_225529) |
-
+
#### 3.2 HalfCheetah-v5
@@ -291,12 +282,12 @@ source .env && slm-lab run-remote --gpu \
**Settings**: max_frame 10e6 | num_envs 16 | max_session 4 | log_frequency 1e4
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| PPO | ✅ | 5851.70 | [slm_lab/spec/benchmark/ppo/ppo_mujoco.json](../slm_lab/spec/benchmark/ppo/ppo_mujoco.json) | ppo_mujoco | [ppo_mujoco_halfcheetah_2026_01_30_230302](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_halfcheetah_2026_01_30_230302) |
-| SAC | ✅ | 7255.37 | [slm_lab/spec/benchmark/sac/sac_halfcheetah.json](../slm_lab/spec/benchmark/sac/sac_halfcheetah.json) | sac_halfcheetah | [sac_halfcheetah_2026_02_08_115456](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_halfcheetah_2026_02_08_115456) |
+| PPO | ✅ | 6240.68 | [slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml) | ppo_mujoco_arc | [ppo_mujoco_arc_halfcheetah_2026_02_12_195553](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_arc_halfcheetah_2026_02_12_195553) |
+| SAC | ✅ | 9815.16 | [slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml) | sac_halfcheetah_arc | [sac_halfcheetah_4m_i2_arc_2026_02_14_185522](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_halfcheetah_4m_i2_arc_2026_02_14_185522) |
-
+
#### 3.3 Hopper-v5
@@ -304,12 +295,12 @@ source .env && slm-lab run-remote --gpu \
**Settings**: max_frame 4e6 | num_envs 16 | max_session 4 | log_frequency 1e4
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| PPO | ✅ | 1972.38 | [slm_lab/spec/benchmark/ppo/ppo_hopper.json](../slm_lab/spec/benchmark/ppo/ppo_hopper.json) | ppo_hopper | [ppo_hopper_2026_01_31_105438](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_hopper_2026_01_31_105438) |
-| SAC | ⚠️ | 1511.00 | [slm_lab/spec/benchmark/sac/sac_hopper.json](../slm_lab/spec/benchmark/sac/sac_hopper.json) | sac_hopper | [sac_hopper_2026_02_10_031009](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_hopper_2026_02_10_031009) |
+| PPO | ⚠️ | 1653.74 | [slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml) | ppo_hopper_arc | [ppo_hopper_arc_hopper_2026_02_12_222206](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_hopper_arc_hopper_2026_02_12_222206) |
+| SAC | ⚠️ | 1416.52 | [slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml) | sac_hopper_arc | [sac_hopper_3m_i4_arc_2026_02_14_185434](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_hopper_3m_i4_arc_2026_02_14_185434) |
-
+
#### 3.4 Humanoid-v5
@@ -317,12 +308,12 @@ source .env && slm-lab run-remote --gpu \
**Settings**: max_frame 10e6 | num_envs 16 | max_session 4 | log_frequency 1e4
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| PPO | ✅ | 3774.08 | [slm_lab/spec/benchmark/ppo/ppo_mujoco.json](../slm_lab/spec/benchmark/ppo/ppo_mujoco.json) | ppo_mujoco | [ppo_mujoco_humanoid_2026_01_30_222339](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_humanoid_2026_01_30_222339) |
-| SAC | ✅ | 2601.03 | [slm_lab/spec/benchmark/sac/sac_humanoid.json](../slm_lab/spec/benchmark/sac/sac_humanoid.json) | sac_humanoid | [sac_humanoid_2026_02_09_223653](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_humanoid_2026_02_09_223653) |
+| PPO | ✅ | 2661.26 | [slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml) | ppo_mujoco_arc | [ppo_mujoco_arc_humanoid_2026_02_12_185439](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_arc_humanoid_2026_02_12_185439) |
+| SAC | ✅ | 1989.65 | [slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml) | sac_humanoid_arc | [sac_humanoid_arc_2026_02_12_020016](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_humanoid_arc_2026_02_12_020016) |
-
+
#### 3.5 HumanoidStandup-v5
@@ -330,12 +321,12 @@ source .env && slm-lab run-remote --gpu \
**Settings**: max_frame 4e6 | num_envs 16 | max_session 4 | log_frequency 1e4
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| PPO | ✅ | 165841.17 | [slm_lab/spec/benchmark/ppo/ppo_mujoco.json](../slm_lab/spec/benchmark/ppo/ppo_mujoco.json) | ppo_mujoco | [ppo_mujoco_humanoidstandup_2026_01_30_215802](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_humanoidstandup_2026_01_30_215802) |
-| SAC | ✅ | 138221.92 | [slm_lab/spec/benchmark/sac/sac_humanoid_standup.json](../slm_lab/spec/benchmark/sac/sac_humanoid_standup.json) | sac_humanoid_standup | [sac_humanoid_standup_2026_02_09_213409](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_humanoid_standup_2026_02_09_213409) |
+| PPO | ✅ | 150104.59 | [slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml) | ppo_mujoco_arc | [ppo_mujoco_arc_humanoidstandup_2026_02_12_115050](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_arc_humanoidstandup_2026_02_12_115050) |
+| SAC | ✅ | 137357.00 | [slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml) | sac_humanoid_standup_arc | [sac_humanoid_standup_arc_2026_02_12_225150](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_humanoid_standup_arc_2026_02_12_225150) |
-
+
#### 3.6 InvertedDoublePendulum-v5
@@ -343,12 +334,12 @@ source .env && slm-lab run-remote --gpu \
**Settings**: max_frame 10e6 | num_envs 16 | max_session 4 | log_frequency 1e4
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| PPO | ✅ | 7622.00 | [slm_lab/spec/benchmark/ppo/ppo_inverted_double_pendulum.json](../slm_lab/spec/benchmark/ppo/ppo_inverted_double_pendulum.json) | ppo_inverted_double_pendulum | [ppo_inverted_double_pendulum_2026_01_30_220651](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_inverted_double_pendulum_2026_01_30_220651) |
-| SAC | ✅ | 9000.39 | [slm_lab/spec/benchmark/sac/sac_inverted_double_pendulum.json](../slm_lab/spec/benchmark/sac/sac_inverted_double_pendulum.json) | sac_inverted_double_pendulum | [sac_inverted_double_pendulum_2026_02_08_115548](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_inverted_double_pendulum_2026_02_08_115548) |
+| PPO | ✅ | 8383.76 | [slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml) | ppo_inverted_double_pendulum_arc | [ppo_inverted_double_pendulum_arc_inverteddoublependulum_2026_02_12_225231](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_inverted_double_pendulum_arc_inverteddoublependulum_2026_02_12_225231) |
+| SAC | ✅ | 9032.67 | [slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml) | sac_inverted_double_pendulum_arc | [sac_inverted_double_pendulum_arc_2026_02_12_025206](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_inverted_double_pendulum_arc_2026_02_12_025206) |
-
+
#### 3.7 InvertedPendulum-v5
@@ -356,12 +347,12 @@ source .env && slm-lab run-remote --gpu \
**Settings**: max_frame 4e6 | num_envs 16 | max_session 4 | log_frequency 1e4
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| PPO | ✅ | 944.87 | [slm_lab/spec/benchmark/ppo/ppo_inverted_pendulum.json](../slm_lab/spec/benchmark/ppo/ppo_inverted_pendulum.json) | ppo_inverted_pendulum | [ppo_inverted_pendulum_2026_01_30_230211](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_inverted_pendulum_2026_01_30_230211) |
-| SAC | ✅ | 927.58 | [slm_lab/spec/benchmark/sac/sac_inverted_pendulum.json](../slm_lab/spec/benchmark/sac/sac_inverted_pendulum.json) | sac_inverted_pendulum | [sac_inverted_pendulum_2026_02_08_132433](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_inverted_pendulum_2026_02_08_132433) |
+| PPO | ✅ | 949.94 | [slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml) | ppo_inverted_pendulum_arc | [ppo_inverted_pendulum_arc_invertedpendulum_2026_02_12_062037](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_inverted_pendulum_arc_invertedpendulum_2026_02_12_062037) |
+| SAC | ✅ | 928.43 | [slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml) | sac_inverted_pendulum_arc | [sac_inverted_pendulum_arc_2026_02_12_225503](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_inverted_pendulum_arc_2026_02_12_225503) |
-
+
#### 3.8 Pusher-v5
@@ -369,12 +360,12 @@ source .env && slm-lab run-remote --gpu \
**Settings**: max_frame 4e6 | num_envs 16 | max_session 4 | log_frequency 1e4
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| PPO | ✅ | -49.09 | [slm_lab/spec/benchmark/ppo/ppo_mujoco.json](../slm_lab/spec/benchmark/ppo/ppo_mujoco.json) | ppo_mujoco_longhorizon | [ppo_mujoco_longhorizon_pusher_2026_01_30_215824](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_longhorizon_pusher_2026_01_30_215824) |
-| SAC | ✅ | -42.61 | [slm_lab/spec/benchmark/sac/sac_pusher.json](../slm_lab/spec/benchmark/sac/sac_pusher.json) | sac_pusher | [sac_pusher_2026_02_08_115643](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_pusher_2026_02_08_115643) |
+| PPO | ✅ | -49.59 | [slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml) | ppo_mujoco_longhorizon_arc | [ppo_mujoco_longhorizon_arc_pusher_2026_02_12_222228](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_longhorizon_arc_pusher_2026_02_12_222228) |
+| SAC | ✅ | -43.00 | [slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml) | sac_pusher_arc | [sac_pusher_arc_2026_02_12_053603](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_pusher_arc_2026_02_12_053603) |
-
+
#### 3.9 Reacher-v5
@@ -382,12 +373,12 @@ source .env && slm-lab run-remote --gpu \
**Settings**: max_frame 4e6 | num_envs 16 | max_session 4 | log_frequency 1e4
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| PPO | ✅ | -5.08 | [slm_lab/spec/benchmark/ppo/ppo_mujoco.json](../slm_lab/spec/benchmark/ppo/ppo_mujoco.json) | ppo_mujoco_longhorizon | [ppo_mujoco_longhorizon_reacher_2026_01_30_215805](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_longhorizon_reacher_2026_01_30_215805) |
-| SAC | ✅ | -6.36 | [slm_lab/spec/benchmark/sac/sac_reacher.json](../slm_lab/spec/benchmark/sac/sac_reacher.json) | sac_reacher | [sac_reacher_2026_02_08_115637](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_reacher_2026_02_08_115637) |
+| PPO | ✅ | -5.03 | [slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml) | ppo_mujoco_longhorizon_arc | [ppo_mujoco_longhorizon_arc_reacher_2026_02_12_115033](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_longhorizon_arc_reacher_2026_02_12_115033) |
+| SAC | ✅ | -6.31 | [slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml) | sac_reacher_arc | [sac_reacher_arc_2026_02_12_055200](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_reacher_arc_2026_02_12_055200) |
-
+
#### 3.10 Swimmer-v5
@@ -395,12 +386,12 @@ source .env && slm-lab run-remote --gpu \
**Settings**: max_frame 4e6 | num_envs 16 | max_session 4 | log_frequency 1e4
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| PPO | ✅ | 229.31 | [slm_lab/spec/benchmark/ppo/ppo_swimmer.json](../slm_lab/spec/benchmark/ppo/ppo_swimmer.json) | ppo_swimmer | [ppo_swimmer_2026_01_30_215922](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_swimmer_2026_01_30_215922) |
-| SAC | ✅ | 264.98 | [slm_lab/spec/benchmark/sac/sac_swimmer.json](../slm_lab/spec/benchmark/sac/sac_swimmer.json) | sac_swimmer | [sac_swimmer_2026_02_08_115455](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_swimmer_2026_02_08_115455) |
+| PPO | ✅ | 282.44 | [slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml) | ppo_swimmer_arc | [ppo_swimmer_arc_swimmer_2026_02_12_100445](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_swimmer_arc_swimmer_2026_02_12_100445) |
+| SAC | ✅ | 301.34 | [slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml) | sac_swimmer_arc | [sac_swimmer_arc_2026_02_12_054349](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_swimmer_arc_2026_02_12_054349) |
-
+
#### 3.11 Walker2d-v5
@@ -408,12 +399,12 @@ source .env && slm-lab run-remote --gpu \
**Settings**: max_frame 10e6 | num_envs 16 | max_session 4 | log_frequency 1e4
-| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Repo |
+| Algorithm | Status | MA | SPEC_FILE | SPEC_NAME | HF Data |
|-----------|--------|-----|-----------|-----------|---------|
-| PPO | ✅ | 4042.07 | [slm_lab/spec/benchmark/ppo/ppo_mujoco.json](../slm_lab/spec/benchmark/ppo/ppo_mujoco.json) | ppo_mujoco | [ppo_mujoco_walker2d_2026_01_30_222124](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_walker2d_2026_01_30_222124) |
-| SAC | ⚠️ | 2288.03 | [slm_lab/spec/benchmark/sac/sac_walker2d.json](../slm_lab/spec/benchmark/sac/sac_walker2d.json) | sac_walker2d | [sac_walker2d_2026_02_08_221549](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_walker2d_2026_02_08_221549) |
+| PPO | ✅ | 4378.62 | [slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_mujoco_arc.yaml) | ppo_mujoco_arc | [ppo_mujoco_arc_walker2d_2026_02_12_190312](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_mujoco_arc_walker2d_2026_02_12_190312) |
+| SAC | ⚠️ | 3123.66 | [slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_mujoco_arc.yaml) | sac_walker2d_arc | [sac_walker2d_3m_i4_arc_2026_02_14_185550](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_walker2d_3m_i4_arc_2026_02_14_185550) |
-
+
### Phase 4: Atari
@@ -427,303 +418,300 @@ source .env && slm-lab run-remote --gpu \
**Algorithm Specs** (all use Nature CNN [32,64,64] + 512fc):
- **DDQN+PER**: Skipped - off-policy variants ~6x slower (~230 fps vs ~1500 fps), not cost effective at 10M frames
-- **A2C**: [a2c_gae_atari.json](../slm_lab/spec/benchmark/a2c/a2c_gae_atari.json) - RMSprop (lr=7e-4), training_frequency=32
-- **PPO**: [ppo_atari.json](../slm_lab/spec/benchmark/ppo/ppo_atari.json) - AdamW (lr=2.5e-4), minibatch=256, horizon=128, epochs=4
-- **SAC**: [sac_atari.json](../slm_lab/spec/benchmark/sac/sac_atari.json) - Discrete SAC (Categorical), AdamW (lr=3e-4), batch=256, buffer=200K, max_frame=2e6
+- **A2C**: [a2c_atari_arc.yaml](../slm_lab/spec/benchmark_arc/a2c/a2c_atari_arc.yaml) - RMSprop (lr=7e-4), training_frequency=32
+- **PPO**: [ppo_atari_arc.yaml](../slm_lab/spec/benchmark_arc/ppo/ppo_atari_arc.yaml) - AdamW (lr=2.5e-4), minibatch=256, horizon=128, epochs=4, max_frame=10e6
+- **SAC**: [sac_atari_arc.yaml](../slm_lab/spec/benchmark_arc/sac/sac_atari_arc.yaml) - Categorical SAC, AdamW (lr=3e-4), training_iter=3, training_frequency=4, max_frame=2e6
**PPO Lambda Variants** (table shows best result per game):
| SPEC_NAME | Lambda | Best for |
|-----------|--------|----------|
-| ppo_atari | 0.95 | Strategic games (default) |
-| ppo_atari_lam85 | 0.85 | Mixed games |
-| ppo_atari_lam70 | 0.70 | Action games |
+| ppo_atari_arc | 0.95 | Strategic games (default) |
+| ppo_atari_lam85_arc | 0.85 | Mixed games |
+| ppo_atari_lam70_arc | 0.70 | Action games |
**Reproduce**:
```bash
-# A2C
+# A2C (10M frames)
source .env && slm-lab run-remote --gpu -s env=ENV -s max_frame=1e7 \
- slm_lab/spec/benchmark/a2c/a2c_gae_atari.json a2c_gae_atari train -n NAME
+ slm_lab/spec/benchmark_arc/a2c/a2c_atari_arc.yaml a2c_gae_atari_arc train -n NAME
-# PPO
+# PPO (10M frames)
source .env && slm-lab run-remote --gpu -s env=ENV -s max_frame=1e7 \
- slm_lab/spec/benchmark/ppo/ppo_atari.json SPEC_NAME train -n NAME
+ slm_lab/spec/benchmark_arc/ppo/ppo_atari_arc.yaml SPEC_NAME train -n NAME
# SAC (2M frames - off-policy, more sample-efficient but slower per frame)
source .env && slm-lab run-remote --gpu -s env=ENV \
- slm_lab/spec/benchmark/sac/sac_atari.json sac_atari train -n NAME
+ slm_lab/spec/benchmark_arc/sac/sac_atari_arc.yaml sac_atari_arc train -n NAME
```
-| ENV | Score | SPEC_NAME | HF Repo |
+> **Note**: HF Data links marked "-" indicate runs completed but not yet uploaded to HuggingFace. Scores are extracted from local trial_metrics.
+
+| ENV | Score | SPEC_NAME | HF Data |
|-----|-------|-----------|---------|
-| ALE/AirRaid-v5 | 5067 | a2c_gae_atari | [a2c_gae_atari_airraid_2026_02_01_082446](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_airraid_2026_02_01_082446) |
-| | 8245 | ppo_atari | [ppo_atari_airraid_2026_01_06_113119](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_airraid_2026_01_06_113119) |
-| | 2061 | sac_atari | [sac_atari_airraid_2026_02_11_203802](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_airraid_2026_02_11_203802) |
-| ALE/Alien-v5 | 1488 | a2c_gae_atari | [a2c_gae_atari_alien_2026_02_01_000858](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_alien_2026_02_01_000858) |
-| | 1453 | ppo_atari | [ppo_atari_alien_2026_01_06_112514](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_alien_2026_01_06_112514) |
-| | 960 | sac_atari | [sac_atari_alien_2026_02_11_201443](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_alien_2026_02_11_201443) |
-| ALE/Amidar-v5 | 330 | a2c_gae_atari | [a2c_gae_atari_amidar_2026_02_01_082251](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_amidar_2026_02_01_082251) |
-| | 580 | ppo_atari_lam85 | [ppo_atari_lam85_amidar_2026_01_07_223416](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_amidar_2026_01_07_223416) |
-| | 187 | sac_atari | [sac_atari_amidar_2026_02_11_202456](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_amidar_2026_02_11_202456) |
-| ALE/Assault-v5 | 1646 | a2c_gae_atari | [a2c_gae_atari_assault_2026_02_01_082252](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_assault_2026_02_01_082252) |
-| | 4293 | ppo_atari_lam85 | [ppo_atari_lam85_assault_2026_01_08_130044](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_assault_2026_01_08_130044) |
-| | 1037 | sac_atari | [sac_atari_assault_2026_02_11_201441](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_assault_2026_02_11_201441) |
-| ALE/Asterix-v5 | 2712 | a2c_gae_atari | [a2c_gae_atari_asterix_2026_02_01_082315](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_asterix_2026_02_01_082315) |
-| | 3482 | ppo_atari_lam85 | [ppo_atari_lam85_asterix_2026_01_07_223445](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_asterix_2026_01_07_223445) |
-| | 1450 | sac_atari | [sac_atari_asterix_2026_02_11_203629](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_asterix_2026_02_11_203629) |
-| ALE/Asteroids-v5 | 2106 | a2c_gae_atari | [a2c_gae_atari_asteroids_2026_02_01_082328](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_asteroids_2026_02_01_082328) |
-| | 1554 | ppo_atari_lam85 | [ppo_atari_lam85_asteroids_2026_01_07_224245](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_asteroids_2026_01_07_224245) |
-| | 1216 | sac_atari | [sac_atari_asteroids_2026_02_11_201524](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_asteroids_2026_02_11_201524) |
-| ALE/Atlantis-v5 | 873365 | a2c_gae_atari | [a2c_gae_atari_atlantis_2026_02_01_082330](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_atlantis_2026_02_01_082330) |
-| | 792886 | ppo_atari | [ppo_atari_atlantis_2026_01_06_120440](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_atlantis_2026_01_06_120440) |
-| | 64097 | sac_atari | [sac_atari_atlantis_2026_02_11_204715](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_atlantis_2026_02_11_204715) |
-| ALE/BankHeist-v5 | 1099 | a2c_gae_atari | [a2c_gae_atari_bankheist_2026_02_01_082403](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_bankheist_2026_02_01_082403) |
-| | 1045 | ppo_atari | [ppo_atari_bankheist_2026_01_06_121042](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_bankheist_2026_01_06_121042) |
-| | 132 | sac_atari | [sac_atari_bankheist_2026_02_11_201643](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_bankheist_2026_02_11_201643) |
-| ALE/BattleZone-v5 | 2437 | a2c_gae_atari | [a2c_gae_atari_battlezone_2026_02_01_082425](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_battlezone_2026_02_01_082425) |
-| | 26383 | ppo_atari_lam85 | [ppo_atari_lam85_battlezone_2026_01_08_094729](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_battlezone_2026_01_08_094729) |
-| | 6951 | sac_atari | [sac_atari_battlezone_2026_02_12_003638](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_battlezone_2026_02_12_003638) |
-| ALE/BeamRider-v5 | 2767 | a2c_gae_atari | [a2c_gae_atari_beamrider_2026_02_01_000921](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_beamrider_2026_02_01_000921) |
-| | 2765 | ppo_atari | [ppo_atari_beamrider_2026_01_06_112533](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_beamrider_2026_01_06_112533) |
-| | 4048 | sac_atari | [sac_atari_beamrider_2026_02_12_003619](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_beamrider_2026_02_12_003619) |
-| ALE/Berzerk-v5 | 439 | a2c_gae_atari | [a2c_gae_atari_berzerk_2026_02_01_082540](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_berzerk_2026_02_01_082540) |
-| | 1072 | ppo_atari | [ppo_atari_berzerk_2026_01_06_112515](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_berzerk_2026_01_06_112515) |
-| | 314 | sac_atari | [sac_atari_berzerk_2026_02_12_004654](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_berzerk_2026_02_12_004654) |
-| ALE/Bowling-v5 | 23.96 | a2c_gae_atari | [a2c_gae_atari_bowling_2026_02_01_082529](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_bowling_2026_02_01_082529) |
-| | 46.45 | ppo_atari | [ppo_atari_bowling_2026_01_06_113148](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_bowling_2026_01_06_113148) |
-| | 27.95 | sac_atari | [sac_atari_bowling_2026_02_12_004809](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_bowling_2026_02_12_004809) |
-| ALE/Boxing-v5 | 1.80 | a2c_gae_atari | [a2c_gae_atari_boxing_2026_02_01_082539](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_boxing_2026_02_01_082539) |
-| | 91.17 | ppo_atari | [ppo_atari_boxing_2026_01_06_112531](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_boxing_2026_01_06_112531) |
-| | 40.15 | sac_atari | [sac_atari_boxing_2026_02_12_004826](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_boxing_2026_02_12_004826) |
-| ALE/Breakout-v5 | 273 | a2c_gae_atari | [a2c_gae_atari_breakout_2026_01_31_213610](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_breakout_2026_01_31_213610) |
-| | 327 | ppo_atari_lam70 | [ppo_atari_lam70_breakout_2026_01_07_110559](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_breakout_2026_01_07_110559) |
-| | 16.45 | sac_atari | [sac_atari_breakout_2026_02_12_005931](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_breakout_2026_02_12_005931) |
-| ALE/Carnival-v5 | 2170 | a2c_gae_atari | [a2c_gae_atari_carnival_2026_02_01_082726](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_carnival_2026_02_01_082726) |
-| | 3967 | ppo_atari_lam70 | [ppo_atari_lam70_carnival_2026_01_07_144738](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_carnival_2026_01_07_144738) |
-| | 4025 | sac_atari | [sac_atari_carnival_2026_02_12_013737](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_carnival_2026_02_12_013737) |
-| ALE/Centipede-v5 | 1382 | a2c_gae_atari | [a2c_gae_atari_centipede_2026_02_01_082643](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_centipede_2026_02_01_082643) |
-| | 4915 | ppo_atari_lam70 | [ppo_atari_lam70_centipede_2026_01_07_223557](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_centipede_2026_01_07_223557) |
-| | 2286 | sac_atari | [sac_atari_centipede_2026_02_12_013445](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_centipede_2026_02_12_013445) |
-| ALE/ChopperCommand-v5 | 2446 | a2c_gae_atari | [a2c_gae_atari_choppercommand_2026_02_01_082626](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_choppercommand_2026_02_01_082626) |
-| | 5355 | ppo_atari | [ppo_atari_choppercommand_2026_01_07_110539](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_choppercommand_2026_01_07_110539) |
-| | 1068 | sac_atari | [sac_atari_choppercommand_2026_02_12_060732](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_choppercommand_2026_02_12_060732) |
-| ALE/CrazyClimber-v5 | 96943 | a2c_gae_atari | [a2c_gae_atari_crazyclimber_2026_02_01_082625](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_crazyclimber_2026_02_01_082625) |
-| | 107370 | ppo_atari_lam85 | [ppo_atari_lam85_crazyclimber_2026_01_07_223609](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_crazyclimber_2026_01_07_223609) |
-| | 81839 | sac_atari | [sac_atari_crazyclimber_2026_02_12_053919](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_crazyclimber_2026_02_12_053919) |
-| ALE/Defender-v5 | 33149 | a2c_gae_atari | [a2c_gae_atari_defender_2026_02_01_082658](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_defender_2026_02_01_082658) |
-| | 51439 | ppo_atari_lam70 | [ppo_atari_lam70_defender_2026_01_07_205238](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_defender_2026_01_07_205238) |
-| | 3832 | sac_atari | [sac_atari_defender_2026_02_12_054055](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_defender_2026_02_12_054055) |
-| ALE/DemonAttack-v5 | 2962 | a2c_gae_atari | [a2c_gae_atari_demonattack_2026_02_01_082717](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_demonattack_2026_02_01_082717) |
-| | 16558 | ppo_atari_lam70 | [ppo_atari_lam70_demonattack_2026_01_07_111315](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_demonattack_2026_01_07_111315) |
-| | 4330 | sac_atari | [sac_atari_demonattack_2026_02_12_054035](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_demonattack_2026_02_12_054035) |
-| ALE/DoubleDunk-v5 | -1.69 | a2c_gae_atari | [a2c_gae_atari_doubledunk_2026_02_01_082901](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_doubledunk_2026_02_01_082901) |
-| | -2.38 | ppo_atari | [ppo_atari_doubledunk_2026_01_07_110802](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_doubledunk_2026_01_07_110802) |
-| | -43.51 | sac_atari | [sac_atari_doubledunk_2026_02_12_054050](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_doubledunk_2026_02_12_054050) |
-| ALE/ElevatorAction-v5 | 731 | a2c_gae_atari | [a2c_gae_atari_elevatoraction_2026_02_01_082908](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_elevatoraction_2026_02_01_082908) |
-| | 5446 | ppo_atari | [ppo_atari_elevatoraction_2026_01_06_113129](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_elevatoraction_2026_01_06_113129) |
-| | 4374 | sac_atari | [sac_atari_elevatoraction_2026_02_12_061339](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_elevatoraction_2026_02_12_061339) |
-| ALE/Enduro-v5 | 681 | a2c_gae_atari | [a2c_gae_atari_enduro_2026_02_01_001123](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_enduro_2026_02_01_001123) |
-| | 898 | ppo_atari_lam85 | [ppo_atari_lam85_enduro_2026_01_08_095448](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_enduro_2026_01_08_095448) |
-| | 0 | sac_atari | [sac_atari_enduro_2026_02_12_190545](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_enduro_2026_02_12_190545) |
-| ALE/FishingDerby-v5 | -16.38 | a2c_gae_atari | [a2c_gae_atari_fishingderby_2026_02_01_082906](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_fishingderby_2026_02_01_082906) |
-| | 27.10 | ppo_atari_lam85 | [ppo_atari_lam85_fishingderby_2026_01_08_094158](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_fishingderby_2026_01_08_094158) |
-| | -76.88 | sac_atari | [sac_atari_fishingderby_2026_02_12_061350](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_fishingderby_2026_02_12_061350) |
-| ALE/Freeway-v5 | 23.13 | a2c_gae_atari | [a2c_gae_atari_freeway_2026_02_01_082931](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_freeway_2026_02_01_082931) |
-| | 31.30 | ppo_atari | [ppo_atari_freeway_2026_01_06_182318](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_freeway_2026_01_06_182318) |
-| | 0 | sac_atari | [sac_atari_freeway_2026_02_12_101448](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_freeway_2026_02_12_101448) |
-| ALE/Frostbite-v5 | 266 | a2c_gae_atari | [a2c_gae_atari_frostbite_2026_02_01_082915](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_frostbite_2026_02_01_082915) |
-| | 301 | ppo_atari | [ppo_atari_frostbite_2026_01_06_112556](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_frostbite_2026_01_06_112556) |
-| | 400 | sac_atari | [sac_atari_frostbite_2026_02_12_183946](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_frostbite_2026_02_12_183946) |
-| ALE/Gopher-v5 | 984 | a2c_gae_atari | [a2c_gae_atari_gopher_2026_02_01_133323](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_gopher_2026_02_01_133323) |
-| | 6508 | ppo_atari_lam70 | [ppo_atari_lam70_gopher_2026_01_07_170451](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_gopher_2026_01_07_170451) |
-| | 1895 | sac_atari | [sac_atari_gopher_2026_02_12_121106](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_gopher_2026_02_12_121106) |
-| ALE/Gravitar-v5 | 270 | a2c_gae_atari | [a2c_gae_atari_gravitar_2026_02_01_133244](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_gravitar_2026_02_01_133244) |
-| | 599 | ppo_atari | [ppo_atari_gravitar_2026_01_06_112548](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_gravitar_2026_01_06_112548) |
-| | 234 | sac_atari | [sac_atari_gravitar_2026_02_12_131258](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_gravitar_2026_02_12_131258) |
-| ALE/Hero-v5 | 18680 | a2c_gae_atari | [a2c_gae_atari_hero_2026_02_01_175903](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_hero_2026_02_01_175903) |
-| | 28238 | ppo_atari_lam85 | [ppo_atari_lam85_hero_2026_01_07_223619](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_hero_2026_01_07_223619) |
-| | 4526 | sac_atari | [sac_atari_hero_2026_02_12_115556](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_hero_2026_02_12_115556) |
-| ALE/IceHockey-v5 | -5.92 | a2c_gae_atari | [a2c_gae_atari_icehockey_2026_02_01_175745](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_icehockey_2026_02_01_175745) |
-| | -3.93 | ppo_atari | [ppo_atari_icehockey_2026_01_06_183721](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_icehockey_2026_01_06_183721) |
-| | -19.52 | sac_atari | [sac_atari_icehockey_2026_02_12_183953](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_icehockey_2026_02_12_183953) |
-| ALE/Jamesbond-v5 | 460 | a2c_gae_atari | [a2c_gae_atari_jamesbond_2026_02_01_175945](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_jamesbond_2026_02_01_175945) |
-| | 662 | ppo_atari | [ppo_atari_jamesbond_2026_01_06_183717](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_jamesbond_2026_01_06_183717) |
-| | 265 | sac_atari | [sac_atari_jamesbond_2026_02_12_115613](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_jamesbond_2026_02_12_115613) |
-| ALE/JourneyEscape-v5 | -965 | a2c_gae_atari | [a2c_gae_atari_journeyescape_2026_02_01_084415](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_journeyescape_2026_02_01_084415) |
-| | -1252 | ppo_atari_lam85 | [ppo_atari_lam85_journeyescape_2026_01_08_094842](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_journeyescape_2026_01_08_094842) |
-| | -3392 | sac_atari | [sac_atari_journeyescape_2026_02_12_183939](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_journeyescape_2026_02_12_183939) |
-| ALE/Kangaroo-v5 | 322 | a2c_gae_atari | [a2c_gae_atari_kangaroo_2026_02_01_084415](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_kangaroo_2026_02_01_084415) |
-| | 9912 | ppo_atari_lam85 | [ppo_atari_lam85_kangaroo_2026_01_07_110838](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_kangaroo_2026_01_07_110838) |
-| | 3317 | sac_atari | [sac_atari_kangaroo_2026_02_12_184007](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_kangaroo_2026_02_12_184007) |
-| ALE/Krull-v5 | 7519 | a2c_gae_atari | [a2c_gae_atari_krull_2026_02_01_084420](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_krull_2026_02_01_084420) |
-| | 7841 | ppo_atari | [ppo_atari_krull_2026_01_07_110747](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_krull_2026_01_07_110747) |
-| | 6824 | sac_atari | [sac_atari_krull_2026_02_12_184007](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_krull_2026_02_12_184007) |
-| ALE/KungFuMaster-v5 | 23006 | a2c_gae_atari | [a2c_gae_atari_kungfumaster_2026_02_01_085101](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_kungfumaster_2026_02_01_085101) |
-| | 29068 | ppo_atari_lam70 | [ppo_atari_lam70_kungfumaster_2026_01_07_111317](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_kungfumaster_2026_01_07_111317) |
-| | 8511 | sac_atari | [sac_atari_kungfumaster_2026_02_12_184021](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_kungfumaster_2026_02_12_184021) |
-| ALE/MsPacman-v5 | 2110 | a2c_gae_atari | [a2c_gae_atari_mspacman_2026_02_01_001100](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_mspacman_2026_02_01_001100) |
-| | 2372 | ppo_atari_lam85 | [ppo_atari_lam85_mspacman_2026_01_07_223522](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_mspacman_2026_01_07_223522) |
-| | 1396 | sac_atari | [sac_atari_mspacman_2026_02_12_184018](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_mspacman_2026_02_12_184018) |
-| ALE/NameThisGame-v5 | 5412 | a2c_gae_atari | [a2c_gae_atari_namethisgame_2026_02_01_132733](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_namethisgame_2026_02_01_132733) |
-| | 5993 | ppo_atari | [ppo_atari_namethisgame_2026_01_06_182952](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_namethisgame_2026_01_06_182952) |
-| | 4034 | sac_atari | [sac_atari_namethisgame_2026_02_12_230011](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_namethisgame_2026_02_12_230011) |
-| ALE/Phoenix-v5 | 5635 | a2c_gae_atari | [a2c_gae_atari_phoenix_2026_02_01_085101](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_phoenix_2026_02_01_085101) |
-| | 15659 | ppo_atari_lam70 | [ppo_atari_lam70_phoenix_2026_01_07_110832](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_phoenix_2026_01_07_110832) |
-| | 3909 | sac_atari | [sac_atari_phoenix_2026_02_12_231134](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_phoenix_2026_02_12_231134) |
-| ALE/Pong-v5 | 10.17 | a2c_gae_atari | [a2c_gae_atari_pong_2026_01_31_213635](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_pong_2026_01_31_213635) |
-| | 16.91 | ppo_atari_lam85 | [ppo_atari_lam85_pong_2026_01_08_094454](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_pong_2026_01_08_094454) |
-| | 12.14 | sac_atari | [sac_atari_pong_2026_02_12_231240](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_pong_2026_02_12_231240) |
-| ALE/Pooyan-v5 | 2997 | a2c_gae_atari | [a2c_gae_atari_pooyan_2026_02_01_132748](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_pooyan_2026_02_01_132748) |
-| | 5716 | ppo_atari_lam70 | [ppo_atari_lam70_pooyan_2026_01_07_224346](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_pooyan_2026_01_07_224346) |
-| | 2625 | sac_atari | [sac_atari_pooyan_2026_02_12_233303](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_pooyan_2026_02_12_233303) |
-| ALE/Qbert-v5 | 12619 | a2c_gae_atari | [a2c_gae_atari_qbert_2026_01_31_213720](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_qbert_2026_01_31_213720) |
-| | 15094 | ppo_atari | [ppo_atari_qbert_2026_01_06_111801](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_qbert_2026_01_06_111801) |
-| | 3610 | sac_atari | [sac_atari_qbert_2026_02_12_233409](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_qbert_2026_02_12_233409) |
-| ALE/Riverraid-v5 | 6558 | a2c_gae_atari | [a2c_gae_atari_riverraid_2026_02_01_132507](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_riverraid_2026_02_01_132507) |
-| | 9428 | ppo_atari_lam85 | [ppo_atari_lam85_riverraid_2026_01_07_204356](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_riverraid_2026_01_07_204356) |
-| | 5125 | sac_atari | [sac_atari_riverraid_2026_02_12_233410](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_riverraid_2026_02_12_233410) |
-| ALE/RoadRunner-v5 | 29810 | a2c_gae_atari | [a2c_gae_atari_roadrunner_2026_02_01_132509](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_roadrunner_2026_02_01_132509) |
-| | 37015 | ppo_atari_lam85 | [ppo_atari_lam85_roadrunner_2026_01_07_145913](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_roadrunner_2026_01_07_145913) |
-| | 23899 | sac_atari | [sac_atari_roadrunner_2026_02_12_233449](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_roadrunner_2026_02_12_233449) |
-| ALE/Robotank-v5 | 2.80 | a2c_gae_atari | [a2c_gae_atari_robotank_2026_02_01_132434](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_robotank_2026_02_01_132434) |
-| | 20.07 | ppo_atari | [ppo_atari_robotank_2026_01_06_183413](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_robotank_2026_01_06_183413) |
-| | 9.06 | sac_atari | [sac_atari_robotank_2026_02_12_233446](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_robotank_2026_02_12_233446) |
-| ALE/Seaquest-v5 | 850 | a2c_gae_atari | [a2c_gae_atari_seaquest_2026_02_01_001001](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_seaquest_2026_02_01_001001) |
-| | 1796 | ppo_atari | [ppo_atari_seaquest_2026_01_06_183440](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_seaquest_2026_01_06_183440) |
-| | 2010 | sac_atari | [sac_atari_seaquest_2026_02_13_111005](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_seaquest_2026_02_13_111005) |
-| ALE/Skiing-v5 | -14235 | a2c_gae_atari | [a2c_gae_atari_skiing_2026_02_01_132451](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_skiing_2026_02_01_132451) |
-| | -19340 | ppo_atari | [ppo_atari_skiing_2026_01_06_183424](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_skiing_2026_01_06_183424) |
-| | -16710 | sac_atari | [sac_atari_skiing_2026_02_13_034039](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_skiing_2026_02_13_034039) |
-| ALE/Solaris-v5 | 2224 | a2c_gae_atari | [a2c_gae_atari_solaris_2026_02_01_212137](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_solaris_2026_02_01_212137) |
-| | 2094 | ppo_atari | [ppo_atari_solaris_2026_01_06_192643](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_solaris_2026_01_06_192643) |
-| | 1803 | sac_atari | [sac_atari_solaris_2026_02_13_105520](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_solaris_2026_02_13_105520) |
-| ALE/SpaceInvaders-v5 | 784 | a2c_gae_atari | [a2c_gae_atari_spaceinvaders_2026_02_01_000950](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_spaceinvaders_2026_02_01_000950) |
-| | 726 | ppo_atari | [ppo_atari_spaceinvaders_2026_01_07_102346](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_spaceinvaders_2026_01_07_102346) |
-| | 517 | sac_atari | [sac_atari_spaceinvaders_2026_02_11_080424](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_spaceinvaders_2026_02_11_080424) |
-| ALE/StarGunner-v5 | 8665 | a2c_gae_atari | [a2c_gae_atari_stargunner_2026_02_01_132406](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_stargunner_2026_02_01_132406) |
-| | 47495 | ppo_atari_lam70 | [ppo_atari_lam70_stargunner_2026_01_07_111404](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_stargunner_2026_01_07_111404) |
-| | 3809 | sac_atari | [sac_atari_stargunner_2026_02_13_040158](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_stargunner_2026_02_13_040158) |
-| ALE/Surround-v5 | -9.72 | a2c_gae_atari | [a2c_gae_atari_surround_2026_02_01_132215](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_surround_2026_02_01_132215) |
-| | -2.52 | ppo_atari | [ppo_atari_surround_2026_01_07_102404](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_surround_2026_01_07_102404) |
-| | -9.86 | sac_atari | [sac_atari_surround_2026_02_13_042319](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_surround_2026_02_13_042319) |
-| ALE/Tennis-v5 | -2873 | a2c_gae_atari | [a2c_gae_atari_tennis_2026_02_01_175829](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_tennis_2026_02_01_175829) |
-| | -4.41 | ppo_atari_lam85 | [ppo_atari_lam85_tennis_2026_01_07_223532](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_tennis_2026_01_07_223532) |
-| | -374 | sac_atari | [sac_atari_tennis_2026_02_13_105531](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_tennis_2026_02_13_105531) |
-| ALE/TimePilot-v5 | 3376 | a2c_gae_atari | [a2c_gae_atari_timepilot_2026_02_01_175930](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_timepilot_2026_02_01_175930) |
-| | 4668 | ppo_atari | [ppo_atari_timepilot_2026_01_07_101010](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_timepilot_2026_01_07_101010) |
-| | 3003 | sac_atari | [sac_atari_timepilot_2026_02_13_110656](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_timepilot_2026_02_13_110656) |
-| ALE/Tutankham-v5 | 167 | a2c_gae_atari | [a2c_gae_atari_tutankham_2026_02_01_132347](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_tutankham_2026_02_01_132347) |
-| | 217 | ppo_atari_lam85 | [ppo_atari_lam85_tutankham_2026_01_08_095251](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_tutankham_2026_01_08_095251) |
-| | 126 | sac_atari | [sac_atari_tutankham_2026_02_13_105535](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_tutankham_2026_02_13_105535) |
-| ALE/UpNDown-v5 | 57099 | a2c_gae_atari | [a2c_gae_atari_upndown_2026_02_01_132435](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_upndown_2026_02_01_132435) |
-| | 182472 | ppo_atari | [ppo_atari_upndown_2026_01_07_105708](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_upndown_2026_01_07_105708) |
-| | 3450 | sac_atari | [sac_atari_upndown_2026_02_13_104624](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_upndown_2026_02_13_104624) |
-| ALE/VideoPinball-v5 | 25310 | a2c_gae_atari | [a2c_gae_atari_videopinball_2026_02_01_083457](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_videopinball_2026_02_01_083457) |
-| | 56746 | ppo_atari_lam70 | [ppo_atari_lam70_videopinball_2026_01_07_224359](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_videopinball_2026_01_07_224359) |
-| | 22541 | sac_atari | [sac_atari_videopinball_2026_02_13_222427](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_videopinball_2026_02_13_222427) |
-| ALE/WizardOfWor-v5 | 2682 | a2c_gae_atari | [a2c_gae_atari_wizardofwor_2026_02_01_132449](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_wizardofwor_2026_02_01_132449) |
-| | 5814 | ppo_atari | [ppo_atari_wizardofwor_2026_01_06_221154](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_wizardofwor_2026_01_06_221154) |
-| | 1160 | sac_atari | [sac_atari_wizardofwor_2026_02_13_111635](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_wizardofwor_2026_02_13_111635) |
-| ALE/YarsRevenge-v5 | 24371 | a2c_gae_atari | [a2c_gae_atari_yarsrevenge_2026_02_01_132224](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_yarsrevenge_2026_02_01_132224) |
-| | 17120 | ppo_atari | [ppo_atari_yarsrevenge_2026_01_06_221154](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_yarsrevenge_2026_01_06_221154) |
-| | 13429 | sac_atari | [sac_atari_yarsrevenge_2026_02_13_223033](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_yarsrevenge_2026_02_13_223033) |
-| ALE/Zaxxon-v5 | 29.46 | a2c_gae_atari | [a2c_gae_atari_zaxxon_2026_02_01_131758](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_zaxxon_2026_02_01_131758) |
-| | 10756 | ppo_atari | [ppo_atari_zaxxon_2026_01_06_221154](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_zaxxon_2026_01_06_221154) |
-| | 3453 | sac_atari | [sac_atari_zaxxon_2026_02_13_221310](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_zaxxon_2026_02_13_221310) |
+| ALE/AirRaid-v5 | 7042.84 | ppo_atari_arc | [ppo_atari_arc_airraid_2026_02_13_124015](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_airraid_2026_02_13_124015) |
+| | 1832.54 | sac_atari_arc | [sac_atari_arc_airraid_2026_02_17_104002](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_airraid_2026_02_17_104002) |
+| | 5067 | a2c_gae_atari_arc | [a2c_gae_atari_airraid_2026_02_01_082446](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_airraid_2026_02_01_082446) |
+| ALE/Alien-v5 | 1789.26 | ppo_atari_arc | [ppo_atari_arc_alien_2026_02_13_124017](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_alien_2026_02_13_124017) |
+| | 833.53 | sac_atari_arc | [sac_atari_arc_alien_2026_02_15_200940](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_alien_2026_02_15_200940) |
+| | 1488 | a2c_gae_atari_arc | [a2c_gae_atari_alien_2026_02_01_000858](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_alien_2026_02_01_000858) |
+| ALE/Amidar-v5 | 584.28 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_amidar_2026_02_13_124155](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_amidar_2026_02_13_124155) |
+| | 185.45 | sac_atari_arc | [sac_atari_arc_amidar_2026_02_16_042529](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_amidar_2026_02_16_042529) |
+| | 330 | a2c_gae_atari_arc | [a2c_gae_atari_amidar_2026_02_01_082251](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_amidar_2026_02_01_082251) |
+| ALE/Assault-v5 | 4448.16 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_assault_2026_02_13_124219](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_assault_2026_02_13_124219) |
+| | 1009.42 | sac_atari_arc | [sac_atari_arc_assault_2026_02_16_042532](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_assault_2026_02_16_042532) |
+| | 1646 | a2c_gae_atari_arc | [a2c_gae_atari_assault_2026_02_01_082252](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_assault_2026_02_01_082252) |
+| ALE/Asterix-v5 | 3235.46 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_asterix_2026_02_13_124329](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_asterix_2026_02_13_124329) |
+| | 1504.44 | sac_atari_arc | [sac_atari_arc_asterix_2026_02_16_064430](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_asterix_2026_02_16_064430) |
+| | 2712 | a2c_gae_atari_arc | [a2c_gae_atari_asterix_2026_02_01_082315](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_asterix_2026_02_01_082315) |
+| ALE/Asteroids-v5 | 1577.92 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_asteroids_2026_02_13_171445](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_asteroids_2026_02_13_171445) |
+| | 1203.52 | sac_atari_arc | [sac_atari_arc_asteroids_2026_02_16_051747](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_asteroids_2026_02_16_051747) |
+| | 2106 | a2c_gae_atari_arc | [a2c_gae_atari_asteroids_2026_02_01_082328](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_asteroids_2026_02_01_082328) |
+| ALE/Atlantis-v5 | 848087.19 | ppo_atari_arc | [ppo_atari_arc_atlantis_2026_02_13_171349](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_atlantis_2026_02_13_171349) |
+| | 56787.32 | sac_atari_arc | [sac_atari_arc_atlantis_2026_02_17_105837](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_atlantis_2026_02_17_105837) |
+| | 873365 | a2c_gae_atari_arc | [a2c_gae_atari_atlantis_2026_02_01_082330](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_atlantis_2026_02_01_082330) |
+| ALE/BankHeist-v5 | 1058.25 | ppo_atari_arc | [ppo_atari_arc_bankheist_2026_02_13_230416](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_bankheist_2026_02_13_230416) |
+| | 138.43 | sac_atari_arc | [sac_atari_arc_bankheist_2026_02_17_105306](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_bankheist_2026_02_17_105306) |
+| | 1099 | a2c_gae_atari_arc | [a2c_gae_atari_bankheist_2026_02_01_082403](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_bankheist_2026_02_01_082403) |
+| ALE/BattleZone-v5 | 27176.78 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_battlezone_2026_02_13_171436](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_battlezone_2026_02_13_171436) |
+| | 6906.47 | sac_atari_arc | [sac_atari_arc_battlezone_2026_02_17_112313](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_battlezone_2026_02_17_112313) |
+| | 2437 | a2c_gae_atari_arc | [a2c_gae_atari_battlezone_2026_02_01_082425](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_battlezone_2026_02_01_082425) |
+| ALE/BeamRider-v5 | 2761.75 | ppo_atari_arc | [ppo_atari_arc_beamrider_2026_02_13_171450](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_beamrider_2026_02_13_171450) |
+| | 4061.05 | sac_atari_arc | [sac_atari_arc_beamrider_2026_02_17_110505](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_beamrider_2026_02_17_110505) |
+| | 2767 | a2c_gae_atari_arc | [a2c_gae_atari_beamrider_2026_02_01_000921](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_beamrider_2026_02_01_000921) |
+| ALE/Berzerk-v5 | 835.46 | ppo_atari_arc | [ppo_atari_arc_berzerk_2026_02_13_171449](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_berzerk_2026_02_13_171449) |
+| | 313.87 | sac_atari_arc | [sac_atari_arc_berzerk_2026_02_17_105608](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_berzerk_2026_02_17_105608) |
+| | 439 | a2c_gae_atari_arc | [a2c_gae_atari_berzerk_2026_02_01_082540](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_berzerk_2026_02_01_082540) |
+| ALE/Bowling-v5 | 45.02 | ppo_atari_arc | [ppo_atari_arc_bowling_2026_02_13_230507](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_bowling_2026_02_13_230507) |
+| | 26.55 | sac_atari_arc | [sac_atari_arc_bowling_2026_02_18_101223](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_bowling_2026_02_18_101223) |
+| | 23.96 | a2c_gae_atari_arc | [a2c_gae_atari_bowling_2026_02_01_082529](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_bowling_2026_02_01_082529) |
+| ALE/Boxing-v5 | 92.18 | ppo_atari_arc | [ppo_atari_arc_boxing_2026_02_13_230504](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_boxing_2026_02_13_230504) |
+| | 44.03 | sac_atari_arc | [sac_atari_arc_boxing_2026_02_15_201228](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_boxing_2026_02_15_201228) |
+| | 1.80 | a2c_gae_atari_arc | [a2c_gae_atari_boxing_2026_02_01_082539](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_boxing_2026_02_01_082539) |
+| ALE/Breakout-v5 | 326.47 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_breakout_2026_02_13_230455](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_breakout_2026_02_13_230455) |
+| | 20.23 | sac_atari_arc | [sac_atari_arc_breakout_2026_02_15_201235](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_breakout_2026_02_15_201235) |
+| | 273 | a2c_gae_atari_arc | [a2c_gae_atari_breakout_2026_01_31_213610](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_breakout_2026_01_31_213610) |
+| ALE/Carnival-v5 | 3912.59 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_carnival_2026_02_13_230438](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_carnival_2026_02_13_230438) |
+| | 3501.37 | sac_atari_arc | [sac_atari_arc_carnival_2026_02_17_105834](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_carnival_2026_02_17_105834) |
+| | 2170 | a2c_gae_atari_arc | [a2c_gae_atari_carnival_2026_02_01_082726](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_carnival_2026_02_01_082726) |
+| ALE/Centipede-v5 | 4780.75 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_centipede_2026_02_13_230434](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_centipede_2026_02_13_230434) |
+| | 2255.45 | sac_atari_arc | [sac_atari_arc_centipede_2026_02_18_101425](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_centipede_2026_02_18_101425) |
+| | 1382 | a2c_gae_atari_arc | [a2c_gae_atari_centipede_2026_02_01_082643](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_centipede_2026_02_01_082643) |
+| ALE/ChopperCommand-v5 | 5391.30 | ppo_atari_arc | [ppo_atari_arc_choppercommand_2026_02_13_230448](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_choppercommand_2026_02_13_230448) |
+| | 1036.91 | sac_atari_arc | [sac_atari_arc_choppercommand_2026_02_17_110523](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_choppercommand_2026_02_17_110523) |
+| | 2446 | a2c_gae_atari_arc | [a2c_gae_atari_choppercommand_2026_02_01_082626](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_choppercommand_2026_02_01_082626) |
+| ALE/CrazyClimber-v5 | 112094.03 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_crazyclimber_2026_02_13_230445](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_crazyclimber_2026_02_13_230445) |
+| | 75712.12 | sac_atari_arc | [sac_atari_arc_crazyclimber_2026_02_15_201349](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_crazyclimber_2026_02_15_201349) |
+| | 96943 | a2c_gae_atari_arc | [a2c_gae_atari_crazyclimber_2026_02_01_082625](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_crazyclimber_2026_02_01_082625) |
+| ALE/Defender-v5 | 47894.69 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_defender_2026_02_14_023317](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_defender_2026_02_14_023317) |
+| | 4386.79 | sac_atari_arc | [sac_atari_arc_defender_2026_02_18_101518](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_defender_2026_02_18_101518) |
+| | 33149 | a2c_gae_atari_arc | [a2c_gae_atari_defender_2026_02_01_082658](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_defender_2026_02_01_082658) |
+| ALE/DemonAttack-v5 | 19370.38 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_demonattack_2026_02_14_023650](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_demonattack_2026_02_14_023650) |
+| | 4555.58 | sac_atari_arc | [sac_atari_arc_demonattack_2026_02_18_101610](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_demonattack_2026_02_18_101610) |
+| | 2962 | a2c_gae_atari_arc | [a2c_gae_atari_demonattack_2026_02_01_082717](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_demonattack_2026_02_01_082717) |
+| ALE/DoubleDunk-v5 | -3.03 | ppo_atari_arc | [ppo_atari_arc_doubledunk_2026_02_14_043639](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_doubledunk_2026_02_14_043639) |
+| | -18.65 | sac_atari_arc | [sac_atari_arc_doubledunk_2026_02_17_160707](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_doubledunk_2026_02_17_160707) |
+| | -1.69 | a2c_gae_atari_arc | [a2c_gae_atari_doubledunk_2026_02_01_082901](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_doubledunk_2026_02_01_082901) |
+| ALE/Enduro-v5 | 986.46 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_enduro_2026_02_11_101739](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_enduro_2026_02_11_101739) |
+| | 45.80 | sac_atari_arc | [sac_atari_arc_enduro_2026_02_17_160716](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_enduro_2026_02_17_160716) |
+| | 681 | a2c_gae_atari_arc | [a2c_gae_atari_enduro_2026_02_01_001123](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_enduro_2026_02_01_001123) |
+| ALE/FishingDerby-v5 | 25.71 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_fishingderby_2026_02_14_024158](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_fishingderby_2026_02_14_024158) |
+| | -75.82 | sac_atari_arc | [sac_atari_arc_fishingderby_2026_02_17_160848](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_fishingderby_2026_02_17_160848) |
+| | -16.38 | a2c_gae_atari_arc | [a2c_gae_atari_fishingderby_2026_02_01_082906](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_fishingderby_2026_02_01_082906) |
+| ALE/Freeway-v5 | 32.42 | ppo_atari_arc | [ppo_atari_arc_freeway_2026_02_14_023359](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_freeway_2026_02_14_023359) |
+| | 0.00 | sac_atari_arc | [sac_atari_arc_freeway_2026_02_17_161324](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_freeway_2026_02_17_161324) |
+| | 23.13 | a2c_gae_atari_arc | [a2c_gae_atari_freeway_2026_02_01_082931](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_freeway_2026_02_01_082931) |
+| ALE/Frostbite-v5 | 284.07 | ppo_atari_arc | [ppo_atari_arc_frostbite_2026_02_14_024247](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_frostbite_2026_02_14_024247) |
+| | 355.80 | sac_atari_arc | [sac_atari_arc_frostbite_2026_02_17_160759](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_frostbite_2026_02_17_160759) |
+| | 266 | a2c_gae_atari_arc | [a2c_gae_atari_frostbite_2026_02_01_082915](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_frostbite_2026_02_01_082915) |
+| ALE/Gopher-v5 | 6500.38 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_gopher_2026_02_14_024237](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_gopher_2026_02_14_024237) |
+| | 1608.59 | sac_atari_arc | [sac_atari_arc_gopher_2026_02_17_161047](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_gopher_2026_02_17_161047) |
+| | 984 | a2c_gae_atari_arc | [a2c_gae_atari_gopher_2026_02_01_133323](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_gopher_2026_02_01_133323) |
+| ALE/Gravitar-v5 | 602.58 | ppo_atari_arc | [ppo_atari_arc_gravitar_2026_02_14_075743](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_gravitar_2026_02_14_075743) |
+| | 233.02 | sac_atari_arc | [sac_atari_arc_gravitar_2026_02_17_160858](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_gravitar_2026_02_17_160858) |
+| | 270 | a2c_gae_atari_arc | [a2c_gae_atari_gravitar_2026_02_01_133244](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_gravitar_2026_02_01_133244) |
+| ALE/Hero-v5 | 22477.89 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_hero_2026_02_15_232615](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_hero_2026_02_15_232615) |
+| | 4873.09 | sac_atari_arc | [sac_atari_arc_hero_2026_02_17_161420](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_hero_2026_02_17_161420) |
+| | 18680 | a2c_gae_atari_arc | [a2c_gae_atari_hero_2026_02_01_175903](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_hero_2026_02_01_175903) |
+| ALE/IceHockey-v5 | -4.05 | ppo_atari_arc | [ppo_atari_arc_icehockey_2026_02_14_231829](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_icehockey_2026_02_14_231829) |
+| | -19.78 | sac_atari_arc | [sac_atari_arc_icehockey_2026_02_18_101834](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_icehockey_2026_02_18_101834) |
+| | -5.92 | a2c_gae_atari_arc | [a2c_gae_atari_icehockey_2026_02_01_175745](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_icehockey_2026_02_01_175745) |
+| ALE/Jamesbond-v5 | 710.98 | ppo_atari_arc | [ppo_atari_arc_jamesbond_2026_02_14_080649](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_jamesbond_2026_02_14_080649) |
+| | 328.27 | sac_atari_arc | [sac_atari_arc_jamesbond_2026_02_17_220305](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_jamesbond_2026_02_17_220305) |
+| | 460 | a2c_gae_atari_arc | [a2c_gae_atari_jamesbond_2026_02_01_175945](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_jamesbond_2026_02_01_175945) |
+| ALE/JourneyEscape-v5 | -1248.98 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_journeyescape_2026_02_14_080656](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_journeyescape_2026_02_14_080656) |
+| | -3268.80 | sac_atari_arc | [sac_atari_arc_journeyescape_2026_02_17_215843](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_journeyescape_2026_02_17_215843) |
+| | -965 | a2c_gae_atari_arc | [a2c_gae_atari_journeyescape_2026_02_01_084415](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_journeyescape_2026_02_01_084415) |
+| ALE/Kangaroo-v5 | 10660.35 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_kangaroo_2026_02_16_030656](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_kangaroo_2026_02_16_030656) |
+| | 2990.74 | sac_atari_arc | [sac_atari_arc_kangaroo_2026_02_17_220652](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_kangaroo_2026_02_17_220652) |
+| | 322 | a2c_gae_atari_arc | [a2c_gae_atari_kangaroo_2026_02_01_084415](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_kangaroo_2026_02_01_084415) |
+| ALE/Krull-v5 | 7874.33 | ppo_atari_arc | [ppo_atari_arc_krull_2026_02_14_080657](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_krull_2026_02_14_080657) |
+| | 6630.02 | sac_atari_arc | [sac_atari_arc_krull_2026_02_17_221656](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_krull_2026_02_17_221656) |
+| | 7519 | a2c_gae_atari_arc | [a2c_gae_atari_krull_2026_02_01_084420](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_krull_2026_02_01_084420) |
+| ALE/KungFuMaster-v5 | 28128.04 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_kungfumaster_2026_02_14_080730](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_kungfumaster_2026_02_14_080730) |
+| | 9932.72 | sac_atari_arc | [sac_atari_arc_kungfumaster_2026_02_17_221024](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_kungfumaster_2026_02_17_221024) |
+| | 23006 | a2c_gae_atari_arc | [a2c_gae_atari_kungfumaster_2026_02_01_085101](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_kungfumaster_2026_02_01_085101) |
+| ALE/MsPacman-v5 | 2330.74 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_mspacman_2026_02_14_102435](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_mspacman_2026_02_14_102435) |
+| | 1336.96 | sac_atari_arc | [sac_atari_arc_mspacman_2026_02_17_221523](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_mspacman_2026_02_17_221523) |
+| | 2110 | a2c_gae_atari_arc | [a2c_gae_atari_mspacman_2026_02_01_001100](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_mspacman_2026_02_01_001100) |
+| ALE/NameThisGame-v5 | 6879.23 | ppo_atari_arc | [ppo_atari_arc_namethisgame_2026_02_14_103319](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_namethisgame_2026_02_14_103319) |
+| | 3992.71 | sac_atari_arc | [sac_atari_arc_namethisgame_2026_02_17_220905](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_namethisgame_2026_02_17_220905) |
+| | 5412 | a2c_gae_atari_arc | [a2c_gae_atari_namethisgame_2026_02_01_132733](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_namethisgame_2026_02_01_132733) |
+| ALE/Phoenix-v5 | 13923.26 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_phoenix_2026_02_14_102636](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_phoenix_2026_02_14_102636) |
+| | 3958.46 | sac_atari_arc | [sac_atari_arc_phoenix_2026_02_17_222102](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_phoenix_2026_02_17_222102) |
+| | 5635 | a2c_gae_atari_arc | [a2c_gae_atari_phoenix_2026_02_01_085101](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_phoenix_2026_02_01_085101) |
+| ALE/Pong-v5 | 16.69 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_pong_2026_02_14_103722](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_pong_2026_02_14_103722) |
+| | 10.89 | sac_atari_arc | [sac_atari_arc_pong_2026_02_17_160429](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_pong_2026_02_17_160429) |
+| | 10.17 | a2c_gae_atari_arc | [a2c_gae_atari_pong_2026_01_31_213635](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_pong_2026_01_31_213635) |
+| ALE/Pooyan-v5 | 5308.66 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_pooyan_2026_02_14_114730](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_pooyan_2026_02_14_114730) |
+| | 2530.78 | sac_atari_arc | [sac_atari_arc_pooyan_2026_02_17_220346](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_pooyan_2026_02_17_220346) |
+| | 2997 | a2c_gae_atari_arc | [a2c_gae_atari_pooyan_2026_02_01_132748](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_pooyan_2026_02_01_132748) |
+| ALE/Qbert-v5 | 15460.48 | ppo_atari_arc | [ppo_atari_arc_qbert_2026_02_14_120409](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_qbert_2026_02_14_120409) |
+| | 3331.98 | sac_atari_arc | [sac_atari_arc_qbert_2026_02_17_223117](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_qbert_2026_02_17_223117) |
+| | 12619 | a2c_gae_atari_arc | [a2c_gae_atari_qbert_2026_01_31_213720](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_qbert_2026_01_31_213720) |
+| ALE/Riverraid-v5 | 9599.75 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_riverraid_2026_02_14_124700](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_riverraid_2026_02_14_124700) |
+| | 4744.95 | sac_atari_arc | [sac_atari_arc_riverraid_2026_02_18_014310](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_riverraid_2026_02_18_014310) |
+| | 6558 | a2c_gae_atari_arc | [a2c_gae_atari_riverraid_2026_02_01_132507](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_riverraid_2026_02_01_132507) |
+| ALE/RoadRunner-v5 | 37980.95 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_roadrunner_2026_02_14_124844](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_roadrunner_2026_02_14_124844) |
+| | 25975.39 | sac_atari_arc | [sac_atari_arc_roadrunner_2026_02_18_015052](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_roadrunner_2026_02_18_015052) |
+| | 29810 | a2c_gae_atari_arc | [a2c_gae_atari_roadrunner_2026_02_01_132509](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_roadrunner_2026_02_01_132509) |
+| ALE/Robotank-v5 | 21.04 | ppo_atari_arc | [ppo_atari_arc_robotank_2026_02_14_124751](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_robotank_2026_02_14_124751) |
+| | 9.01 | sac_atari_arc | [sac_atari_arc_robotank_2026_02_18_032313](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_robotank_2026_02_18_032313) |
+| | 2.80 | a2c_gae_atari_arc | [a2c_gae_atari_robotank_2026_02_01_132434](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_robotank_2026_02_01_132434) |
+| ALE/Seaquest-v5 | 1775.14 | ppo_atari_arc | [ppo_atari_arc_seaquest_2026_02_11_095444](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_seaquest_2026_02_11_095444) |
+| | 1565.44 | sac_atari_arc | [sac_atari_arc_seaquest_2026_02_18_020822](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_seaquest_2026_02_18_020822) |
+| | 850 | a2c_gae_atari_arc | [a2c_gae_atari_seaquest_2026_02_01_001001](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_seaquest_2026_02_01_001001) |
+| ALE/Skiing-v5 | -28217.28 | ppo_atari_arc | [ppo_atari_arc_skiing_2026_02_14_174807](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_skiing_2026_02_14_174807) |
+| | -17464.22 | sac_atari_arc | [sac_atari_arc_skiing_2026_02_18_024444](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_skiing_2026_02_18_024444) |
+| | -14235 | a2c_gae_atari_arc | [a2c_gae_atari_skiing_2026_02_01_132451](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_skiing_2026_02_01_132451) |
+| ALE/Solaris-v5 | 2212.78 | ppo_atari_arc | [ppo_atari_arc_solaris_2026_02_14_124751](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_solaris_2026_02_14_124751) |
+| | 1803.74 | sac_atari_arc | [sac_atari_arc_solaris_2026_02_18_031943](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_solaris_2026_02_18_031943) |
+| | 2224 | a2c_gae_atari_arc | [a2c_gae_atari_solaris_2026_02_01_212137](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_solaris_2026_02_01_212137) |
+| ALE/SpaceInvaders-v5 | 892.49 | ppo_atari_arc | [ppo_atari_arc_spaceinvaders_2026_02_14_131114](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_spaceinvaders_2026_02_14_131114) |
+| | 507.33 | sac_atari_arc | [sac_atari_arc_spaceinvaders_2026_02_18_033139](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_spaceinvaders_2026_02_18_033139) |
+| | 784 | a2c_gae_atari_arc | [a2c_gae_atari_spaceinvaders_2026_02_01_000950](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_spaceinvaders_2026_02_01_000950) |
+| ALE/StarGunner-v5 | 49328.73 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_stargunner_2026_02_14_131149](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_stargunner_2026_02_14_131149) |
+| | 4295.97 | sac_atari_arc | [sac_atari_arc_stargunner_2026_02_18_033151](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_stargunner_2026_02_18_033151) |
+| | 8665 | a2c_gae_atari_arc | [a2c_gae_atari_stargunner_2026_02_01_132406](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_stargunner_2026_02_01_132406) |
+| ALE/Surround-v5 | -4.47 | ppo_atari_arc | [ppo_atari_arc_surround_2026_02_14_132941](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_surround_2026_02_14_132941) |
+| | -9.87 | sac_atari_arc | [sac_atari_arc_surround_2026_02_18_034423](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_surround_2026_02_18_034423) |
+| | -9.72 | a2c_gae_atari_arc | [a2c_gae_atari_surround_2026_02_01_132215](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_surround_2026_02_01_132215) |
+| ALE/Tennis-v5 | -12.27 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_tennis_2026_02_14_173639](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_tennis_2026_02_14_173639) |
+| | -397.44 | sac_atari_arc | [sac_atari_arc_tennis_2026_02_18_032540](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_tennis_2026_02_18_032540) |
+| | -2873 | a2c_gae_atari_arc | [a2c_gae_atari_tennis_2026_02_01_175829](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_tennis_2026_02_01_175829) |
+| ALE/TimePilot-v5 | 4432.73 | ppo_atari_arc | [ppo_atari_arc_timepilot_2026_02_14_173642](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_timepilot_2026_02_14_173642) |
+| | 3164.97 | sac_atari_arc | [sac_atari_arc_timepilot_2026_02_18_102038](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_timepilot_2026_02_18_102038) |
+| | 3376 | a2c_gae_atari_arc | [a2c_gae_atari_timepilot_2026_02_01_175930](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_timepilot_2026_02_01_175930) |
+| ALE/Tutankham-v5 | 210.87 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_tutankham_2026_02_14_173722](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_tutankham_2026_02_14_173722) |
+| | 147.25 | sac_atari_arc | [sac_atari_arc_tutankham_2026_02_18_102729](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_tutankham_2026_02_18_102729) |
+| | 167 | a2c_gae_atari_arc | [a2c_gae_atari_tutankham_2026_02_01_132347](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_tutankham_2026_02_01_132347) |
+| ALE/UpNDown-v5 | 147168.80 | ppo_atari_lam85_arc | [ppo_atari_lam85_arc_upndown_2026_02_15_232448](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam85_arc_upndown_2026_02_15_232448) |
+| | 3351.89 | sac_atari_arc | [sac_atari_arc_upndown_2026_02_18_135442](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_upndown_2026_02_18_135442) |
+| | 57099 | a2c_gae_atari_arc | [a2c_gae_atari_upndown_2026_02_01_132435](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_upndown_2026_02_01_132435) |
+| ALE/VideoPinball-v5 | 38370.30 | ppo_atari_lam70_arc | [ppo_atari_lam70_arc_videopinball_2026_02_14_173728](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_lam70_arc_videopinball_2026_02_14_173728) |
+| | 21088.68 | sac_atari_arc | [sac_atari_arc_videopinball_2026_02_18_141245](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_videopinball_2026_02_18_141245) |
+| | 25310 | a2c_gae_atari_arc | [a2c_gae_atari_videopinball_2026_02_01_083457](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_videopinball_2026_02_01_083457) |
+| ALE/WizardOfWor-v5 | 6100.42 | ppo_atari_arc | [ppo_atari_arc_wizardofwor_2026_02_14_173945](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_wizardofwor_2026_02_14_173945) |
+| | 1241.92 | sac_atari_arc | [sac_atari_arc_wizardofwor_2026_02_18_140750](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_wizardofwor_2026_02_18_140750) |
+| | 2682 | a2c_gae_atari_arc | [a2c_gae_atari_wizardofwor_2026_02_01_132449](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_wizardofwor_2026_02_01_132449) |
+| ALE/YarsRevenge-v5 | 12873.91 | ppo_atari_arc | [ppo_atari_arc_yarsrevenge_2026_02_14_174019](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_yarsrevenge_2026_02_14_174019) |
+| | 13710.18 | sac_atari_arc | [sac_atari_arc_yarsrevenge_2026_02_18_134921](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_yarsrevenge_2026_02_18_134921) |
+| | 24371 | a2c_gae_atari_arc | [a2c_gae_atari_yarsrevenge_2026_02_01_132224](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_yarsrevenge_2026_02_01_132224) |
+| ALE/Zaxxon-v5 | 9523.49 | ppo_atari_arc | [ppo_atari_arc_zaxxon_2026_02_14_174806](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/ppo_atari_arc_zaxxon_2026_02_14_174806) |
+| | 3205.98 | sac_atari_arc | [sac_atari_arc_zaxxon_2026_02_18_135502](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/sac_atari_arc_zaxxon_2026_02_18_135502) |
+| | 29.46 | a2c_gae_atari_arc | [a2c_gae_atari_zaxxon_2026_02_01_131758](https://huggingface.co/datasets/SLM-Lab/benchmark/tree/main/data/a2c_gae_atari_zaxxon_2026_02_01_131758) |
+
**Training Curves** (A2C vs PPO vs SAC):
| | | |
|:---:|:---:|:---:|
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  |  |  |
-|  | | |
-
-**Skipped** (hard exploration): Adventure, MontezumaRevenge, Pitfall, PrivateEye, Venture
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+|  |  |  |
+
+**Skipped**: Adventure, MontezumaRevenge, Pitfall, PrivateEye, Venture (hard exploration), ElevatorAction (deprecated env)
PPO Lambda Comparison (click to expand)
-| ENV | ppo_atari | ppo_atari_lam85 | ppo_atari_lam70 |
-|-----|-----------|-----------------|-----------------|
-| ALE/AirRaid-v5 | **8245** | - | - |
-| ALE/Alien-v5 | **1453** | 1353 | 1274 |
-| ALE/Amidar-v5 | 574 | **580** | - |
-| ALE/Assault-v5 | 4059 | **4293** | 3314 |
-| ALE/Asterix-v5 | 2967 | **3482** | - |
-| ALE/Asteroids-v5 | 1497 | **1554** | - |
-| ALE/Atlantis-v5 | **792886** | 754k | 710k |
-| ALE/BankHeist-v5 | **1045** | 1045 | - |
-| ALE/BattleZone-v5 | 21270 | **26383** | 13857 |
-| ALE/BeamRider-v5 | **2765** | - | - |
-| ALE/Berzerk-v5 | **1072** | - | - |
-| ALE/Bowling-v5 | **46.45** | - | - |
-| ALE/Boxing-v5 | **91.17** | - | - |
-| ALE/Breakout-v5 | 191 | 292 | **327** |
-| ALE/Carnival-v5 | 3071 | 3013 | **3967** |
-| ALE/Centipede-v5 | 3917 | - | **4915** |
-| ALE/ChopperCommand-v5 | **5355** | - | - |
-| ALE/CrazyClimber-v5 | 107183 | **107370** | - |
-| ALE/Defender-v5 | 37162 | - | **51439** |
-| ALE/DemonAttack-v5 | 7755 | - | **16558** |
-| ALE/DoubleDunk-v5 | **-2.38** | - | - |
-| ALE/ElevatorAction-v5 | **5446** | 363 | 3933 |
-| ALE/Enduro-v5 | 414 | **898** | 872 |
-| ALE/FishingDerby-v5 | 22.80 | **27.10** | - |
-| ALE/Freeway-v5 | **31.30** | - | - |
-| ALE/Frostbite-v5 | **301** | 275 | 267 |
-| ALE/Gopher-v5 | 4172 | - | **6508** |
-| ALE/Gravitar-v5 | **599** | 253 | 145 |
-| ALE/Hero-v5 | 21052 | **28238** | - |
-| ALE/IceHockey-v5 | **-3.93** | -5.58 | -7.36 |
-| ALE/Jamesbond-v5 | **662** | - | - |
-| ALE/JourneyEscape-v5 | -1582 | **-1252** | -1547 |
-| ALE/Kangaroo-v5 | 2623 | **9912** | - |
-| ALE/Krull-v5 | **7841** | - | - |
-| ALE/KungFuMaster-v5 | 18973 | 28334 | **29068** |
-| ALE/MsPacman-v5 | 2308 | **2372** | 2297 |
-| ALE/NameThisGame-v5 | **5993** | - | - |
-| ALE/Phoenix-v5 | 7940 | - | **15659** |
-| ALE/Pong-v5 | 15.01 | **16.91** | 12.85 |
-| ALE/Pooyan-v5 | 4704 | - | **5716** |
-| ALE/Qbert-v5 | **15094** | - | - |
-| ALE/Riverraid-v5 | 7319 | **9428** | - |
-| ALE/RoadRunner-v5 | 24204 | **37015** | - |
-| ALE/Robotank-v5 | **20.07** | 8.24 | 2.59 |
-| ALE/Seaquest-v5 | 1796 | - | **2010** |
-| ALE/Skiing-v5 | **-19340** | -22980 | -29975 |
-| ALE/Solaris-v5 | **2094** | 1803 | - |
-| ALE/SpaceInvaders-v5 | **726** | - | - |
-| ALE/StarGunner-v5 | 31862 | - | **47495** |
-| ALE/Surround-v5 | **-2.52** | - | -6.79 |
-| ALE/Tennis-v5 | -7.66 | **-4.41** | -374 |
-| ALE/TimePilot-v5 | **4668** | 3003 | - |
-| ALE/Tutankham-v5 | 203 | **217** | 126 |
-| ALE/UpNDown-v5 | **182472** | 3450 | - |
-| ALE/VideoPinball-v5 | 31385 | 22541 | **56746** |
-| ALE/WizardOfWor-v5 | **5814** | 1160 | 4740 |
-| ALE/YarsRevenge-v5 | **17120** | 13429 | - |
-| ALE/Zaxxon-v5 | **10756** | 3453 | - |
+| ENV | ppo_atari_arc | ppo_atari_lam85_arc | ppo_atari_lam70_arc |
+|-----|---------------|---------------------|---------------------|
+| ALE/AirRaid-v5 | **7042.84** | - | - |
+| ALE/Alien-v5 | **1789.26** | - | - |
+| ALE/Amidar-v5 | - | **584.28** | - |
+| ALE/Assault-v5 | - | **4448.16** | - |
+| ALE/Asterix-v5 | - | **3235.46** | - |
+| ALE/Asteroids-v5 | - | **1577.92** | - |
+| ALE/Atlantis-v5 | **848087.19** | - | - |
+| ALE/BankHeist-v5 | **1058.25** | - | - |
+| ALE/BattleZone-v5 | - | **27176.78** | - |
+| ALE/BeamRider-v5 | **2761.75** | - | - |
+| ALE/Berzerk-v5 | **835.46** | - | - |
+| ALE/Bowling-v5 | **45.02** | - | - |
+| ALE/Boxing-v5 | **92.18** | - | - |
+| ALE/Breakout-v5 | - | - | **326.47** |
+| ALE/Carnival-v5 | - | - | **3912.59** |
+| ALE/Centipede-v5 | - | - | **4780.75** |
+| ALE/ChopperCommand-v5 | **5391.30** | - | - |
+| ALE/CrazyClimber-v5 | - | **112094.03** | - |
+| ALE/Defender-v5 | - | - | **47894.69** |
+| ALE/DemonAttack-v5 | - | - | **19370.38** |
+| ALE/DoubleDunk-v5 | **-3.03** | - | - |
+| ALE/Enduro-v5 | - | **986.46** | - |
+| ALE/FishingDerby-v5 | - | **25.71** | - |
+| ALE/Freeway-v5 | **32.42** | - | - |
+| ALE/Frostbite-v5 | **284.07** | - | - |
+| ALE/Gopher-v5 | - | - | **6500.38** |
+| ALE/Gravitar-v5 | **602.58** | - | - |
+| ALE/Hero-v5 | - | **22477.89** | - |
+| ALE/IceHockey-v5 | **-4.05** | - | - |
+| ALE/Jamesbond-v5 | **710.98** | - | - |
+| ALE/JourneyEscape-v5 | - | **-1248.98** | - |
+| ALE/Kangaroo-v5 | - | - | **10660.35** |
+| ALE/Krull-v5 | **7874.33** | - | - |
+| ALE/KungFuMaster-v5 | - | - | **28128.04** |
+| ALE/MsPacman-v5 | - | **2330.74** | - |
+| ALE/NameThisGame-v5 | **6879.23** | - | - |
+| ALE/Phoenix-v5 | - | - | **13923.26** |
+| ALE/Pong-v5 | - | **16.69** | - |
+| ALE/Pooyan-v5 | - | - | **5308.66** |
+| ALE/Qbert-v5 | **15460.48** | - | - |
+| ALE/Riverraid-v5 | - | **9599.75** | - |
+| ALE/RoadRunner-v5 | - | **37980.95** | - |
+| ALE/Robotank-v5 | **21.04** | - | - |
+| ALE/Seaquest-v5 | **1775.14** | - | - |
+| ALE/Skiing-v5 | **-28217.28** | - | - |
+| ALE/Solaris-v5 | **2212.78** | - | - |
+| ALE/SpaceInvaders-v5 | **892.49** | - | - |
+| ALE/StarGunner-v5 | - | - | **49328.73** |
+| ALE/Surround-v5 | **-4.47** | - | - |
+| ALE/Tennis-v5 | - | **-12.27** | - |
+| ALE/TimePilot-v5 | **4432.73** | - | - |
+| ALE/Tutankham-v5 | - | **210.87** | - |
+| ALE/UpNDown-v5 | - | **147168.80** | - |
+| ALE/VideoPinball-v5 | - | - | **38370.30** |
+| ALE/WizardOfWor-v5 | **6100.42** | - | - |
+| ALE/YarsRevenge-v5 | **12873.91** | - | - |
+| ALE/Zaxxon-v5 | **9523.49** | - | - |
**Legend**: **Bold** = Best score | - = Not tested
----
\ No newline at end of file
diff --git a/CHANGELOG.md b/docs/CHANGELOG.md
similarity index 94%
rename from CHANGELOG.md
rename to docs/CHANGELOG.md
index a7c1a80de..3950639cc 100644
--- a/CHANGELOG.md
+++ b/docs/CHANGELOG.md
@@ -1,3 +1,14 @@
+# SLM-Lab v5.1.0
+
+TorchArc YAML benchmarks replace original hardcoded network architectures across all benchmark categories.
+
+- **TorchArc integration**: All algorithms (REINFORCE, SARSA, DQN, DDQN+PER, A2C, PPO, SAC) now use TorchArc YAML-defined networks instead of hardcoded PyTorch modules
+- **Full benchmark validation**: Classic Control, Box2D, MuJoCo (11 envs), and Atari (54 games) re-benchmarked with TorchArc — results match or exceed original scores
+- **SAC Atari**: New SAC Atari benchmarks (48 games) with discrete action support
+- **Pre-commit hooks**: Conventional commit message validation via `.githooks/commit-msg`
+
+---
+
# SLM-Lab v5.0.0
Modernization release for the current RL ecosystem. Updates SLM-Lab from OpenAI Gym to Gymnasium, adds correct handling of episode termination (the `terminated`/`truncated` fix), and migrates to modern Python tooling.
diff --git a/docs/plots/Acrobot-v1_multi_trial_graph_mean_returns_ma_vs_frames.png b/docs/plots/Acrobot-v1_multi_trial_graph_mean_returns_ma_vs_frames.png
index f8d2fc36215471228f9b5579f88ba37ff6e7986e..8321f1276218a3b08f3de6d21822dcb3ad4c047f 100644
GIT binary patch
literal 148615
zcmeEug-;{LbM&HcwkB;h$pEAFy
zt=k^UwM$WYQ{}|8Wvh
zVZb>s%`H@89zO9AO4BXs6+!18Q~s(``qk8F-h2gNT=n&>s(~=)iy`$@{0ST|--r0`cy`}&x9o_8qqu|3s;k*3Z
zLD6ui5pbwaQ{a$14*Oh0u}I;u0@%GrXdY+^Daz@CwY-YDz*XJkC^Xs%-ia1*HyDtRoisB_>Nr)}5IF^?NAc;{TR=<}q0
z(Av3`Xcf1}xgAa#=bN;`5c0wcX0OX$qwBN1UfuYIpI^fLE&6RhzY0x{)V&^rhL7RB
zwPohAC9Suuvv=5v9(P{9!GByD*U&dp)yq`Jj_Ot<+WK_XX~Cmv*7JHVO76Q6pzpDS
zAy(-d(n`yj%5GV%IZCHFhq&F!87tdnc;v4Ax`X-gY&9%<`{p%xBbW@>qd=t^S5U+^3VAWg{G=)4Aj?0Yucu|sB60Bb=g)*rK3r8FAe%W
z6Y+Rta?dZY;cjo?PL`>5lN@)zk%;oLdL=BHBAidLqqDPta?|!cSKg!N+Wqcw;|Vd=
z;)h?^ak_L~H!CC#7HqXbA{R$2OGWorMM+HXAMTFhnivFcmeAXootQ9#^6VnimyKvb~~OMwrAAjo@W>4(r5SJ!$4nh#rvea7(7r?X^EZrw?5yAr!h_x
zx3AYMFrTL3-;z8&3iqmCagjKjKW|jKJMxvKf?Z0W^fO0*2yYv6Vwpg0O
zX=tNrrPbU|RE*({W0gR#uqQCU-UO4Bt>lYec#ZGo&nl}NzF=K?z%ofrCkpoMvA|eR
zJFPq%uRVxf^!;V({c!iMX<0+$t(#_KfyLx-3D^Q4Ro7F^t*hwhXu81Oe&>13Si$=f
zL2KR_j~xz{8sauLs>{xi4~t{_@WK$!fEn6ZS~weCkg32kj;)0V8YIsHh4G`M9(@{B4@
zd)a7|u05cTnSp^}#?}+$b+P2nF+J=0Y}MQ96kXsVEjHbOcPGEBe8+8PLNiv^iUbB0
z3ioxK0USx1d#`*n_9a4Qe-al2??BZ?{MFs5-hG9chaK$Q+w0x3I;IIJqis%X7^(A7
zupUD|K;1KRG){}jV*MAJYaj1#&mn}f;?=1i^&H9+hU(JW*#AJnj_4Hh2QKnmHC>l%
z#{y;?v|4K_khLXSz!?bnRhCXRS*h2Vi5Iok371!9wWNdlgV~dAR#l)NlTh*Ry_wHzy}2u5-Twf+u)p<`nG{h7)}|{q0Zp
zlca^O*6u4rx>0i2sPneHjK>pIjpNb>Uif4EMU+SlL{c&$f3Q*)u-zTe*vqKj*!~(G
z3}U^T=_aA3Xmz%~Kg-j*l>(sr+H1a$BJ6F3jQyUwoX&jnn7m@`xP6hG-s@BUPeKFAbOWgpTap0Zb&kU-GFg4mR`0)it(yQl)m
zV?lXpNQr&jceEBXIoZQr%e2?tFWUV}G~w2cht(;nA*GwoayhM-q61ru*9im3MP~
z-E}u}b0s8^^FYj;*fF2W)nYULd@lZ_>F^6P18?O_I6kzc+Nr8SiZzQMx`vVFYM(D;
z
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