OpenRA-Bench / SCENARIO_CATALOG.md
yxc20098's picture
Curate: remove the auto-generated cat-* corpus
e9d5097
|
Raw
History Blame Contribute Delete
8.35 kB
> **RETIRED (curation decision).** The auto-generated 200-level `cat-*`
> corpus described below has been removed from the repo. It scored low
> on discrimination/rigor (see `SCENARIO_QUALITY.md`) and added
> memorization surface without distinct capability. The benchmark is now
> a small **curated, hand-authored** set (Art-of-War, economy/building
> planning, strategy, rush-hour, adversarial, strict-spec, perception,
> reasoning), each designed deliberately one at a time with a
> non-gameable win+fail and a named external-benchmark analogue. This
> file is kept only as historical design notes.
# OpenRA-Bench Scenario Catalog (research-grounded, 200 levels)
Goal: a benchmark whose scenarios **generalize on reasoning** — we
empirically observed finetuning on the rush-hour scenario also lifted
**ERQA**. The literature explains why and how to make that systematic.
## Why this transfers (literature)
- **Game/spatial RL → planning transfer is real but axis-specific.**
lmgame-Bench (Hu et al., 2025, arXiv:2505.15146): RL on simplified
Sokoban lifted Blocksworld-1D 17.9→32.7%, Blocksworld-2D 9.0→29.5%,
WebShop 7.0→19.1% — but *not* GSM8K/SQL. Transfer targets are
spatial / planning / embodied, **not** math.
- **RL not SFT.** "Understanding Transferability of LLM Reasoning"
(arXiv:2507.00432): RL generalizes (minimal representation drift);
trajectory SFT catastrophically forgets. Use these scenarios with
verifiable-reward RL, not trajectory SFT.
- **ERQA is reasoning-sensitive.** ERQA (Gemini Robotics, DeepMind,
arXiv:2503.20020): 400 MCQ over spatial / trajectory / action /
state-estimation / multi-view / task reasoning; CoT alone moves it
+4–6.5pts → a reasoning-shaping finetune (rush-hour) plausibly moves
its spatial/trajectory/task subscores. Our suite is built to drive
exactly those axes.
- **Anti-memorization is mandatory.** SMAC→SMACv2 (arXiv:2212.07489):
a timestep/ID open-loop policy beat SMAC → memorization, not
reasoning. Procgen (arXiv:1912.01588), Crafter (arXiv:2109.06780),
ARC-AGI (arXiv:1911.01547): procedurally varied, held-out instances;
report the **generalization gap**. Distractor/decoy decorrelation of
"obvious cue" vs "correct action" (shortcut-learning, arXiv:2412.05152).
## Capability taxonomy → measurement
Consolidated from the general-reasoning, embodied/spatial, and
games-as-eval surveys. Metrics borrow canonical instruments: **SPL**
(Anderson et al., 2018, arXiv:1807.06757) for "reach/find under fog";
**coverage-under-budget / time-to-find / region-commitment regret**
(Active Neural SLAM, Chaplot et al., ICLR 2020, arXiv:2004.05155;
frontier exploration, Yamauchi 1997); **Goal-Condition Success +
path-length weighting** (ALFRED, arXiv:1912.01734); **predicate
satisfaction** (PlanBench, arXiv:2206.10498; BEHAVIOR-1K,
arXiv:2403.09227); **win/attrition under a difficulty ladder**
(TextStarCraft II, arXiv:2312.11865; SmartPlay, arXiv:2310.01557).
| Cap | Dimension | Primary literature |
|---|---|---|
| PERC | spatial/state-estimation under partial obs | ERQA; SpatialVLM (2401.12168); VSR (TACL'23) |
| FRONT | which-unexplored-region-to-commit | Active Neural SLAM; frontier exploration; exploration-aware EQA (2503.11117) |
| PLAN | sequential planning under constraints | PlanBench; ALFWorld (2010.03768) |
| TECH | precondition / tech-graph ordering | PlanBench (Mystery-Blocksworld); BEHAVIOR-1K BDDL |
| ECON | resource allocation / multi-objective | PlanBench cost-optimal; SmartPlay |
| COORD | multi-unit / multi-agent coordination | Watch-And-Help (2010.09890); SMAC |
| RISK | risk assessment / replanning under partial info | PlanBench replanning; StarCraft II Arena (ICLR'25) |
| TEMPO | timing / tempo windows | TextStarCraft II; SmartPlay |
## The 200-level catalog (12 categories, ~67 three-level packs)
From the engine-grounded end-to-end RA dissection (28 decision points,
phases opening→scouting→economy→tech→army→engagement→defense→assault→
endgame). Every win-condition uses ONLY predicates in
`win_conditions.py`; all on `rush-hour-arena` (only Rust-loadable map
until S10). Difficulty ladder = the *decision* gets harder (less info,
more decoys, tighter clock, committed-not-loose budget, attrition
cap) — never just bigger numbers (Procgen/SMACv2 rule).
| # | Category | Cap | Levels | Win pattern (real grammar) | Status |
|---|---|---|---|---|---|
| C1 | Frontier Scouting | FRONT | 18 | `all_of[explored_pct_gte:P,(units_lost_lte:0),within_ticks:T]` | now |
| C2 | Threat Enumeration | PERC | 18 | `all_of[enemies_discovered_gte:N / buildings_discovered_gte:K, units_lost_lte:0, within_ticks:T]` | now |
| C3 | Tech Critical Path | TECH | 18 | `all_of[has_building:X, building_total_gte:N, power_surplus_gte:0, within_ticks:T]` | now |
| C4 | Power-Budget Online | PLAN | 15 | `all_of[power_surplus_gte:0, building_total_gte:N, within_ticks:T]` | now |
| C5 | Budget Allocation (spend) | ECON | 18 | `all_of[building_count_gte{A,n}, building_count_gte{B,n}, within_ticks:T]` | now |
| C6 | Time-Boxed Capital Deploy | ECON | 18 | `all_of[own_units_gte:K, building_total_gte:M,(units_lost_lte:0),within_ticks:T]` | now |
| C7 | Defensive-Direction Commit | PERC | 18 | `all_of[building_in_region{type:pbox,...,count:k}, within_ticks:T]` | now |
| C8 | Base-Placement & Staging | PERC | 15 | `all_of[building_in_region{type:fact,...},(reach_region),within_ticks:T]` | now |
| C9 | Commit-vs-Retreat | RISK | 18 | `all_of[units_killed_gte:N, units_lost_lte:L, within_ticks:T]` | now |
| C10 | Force Coordination | COORD | 18 | `all_of[all_units_in_region{...}, units_lost_lte:0, within_ticks:T]` | now |
| C11 | Tempo / Timing Window | TEMPO | 15 | `all_of[after_ticks:t0, units_killed_gte:N, within_ticks:T1]` | now |
| C12 | Error Recovery / Replan | RISK | 15 | `all_of[has_building:X, building_total_gte:N, after_ticks:t0, within_ticks:T]` | now |
**201 levels / ~67 packs**, all runnable on the current engine.
Economy categories are scoped as **spend/conservation** decisions
(`starting_cash`), the discriminating choice today; an
**Economy-Harvest** 13th category is **now RUNNABLE** — engine task
**#14** (S0 ore-seeding + idempotent harvest, S1 capped resource pool
from refineries/silos + `economy_value`) is done. Shipped packs:
`economy-harvest-timebox` (earn max economic value in a time budget,
keep harvesters productive) and `economy-harvest-investment` (split a
budget between widening collection and silo storage so burst yield is
not lost — the storage decision). Win = `economy_value_gte`
(=cash+stored resources) / `harvesters_gte` / `has_building:silo`
within `within_ticks`; integ-tested end-to-end (test_economy_harvest).
## Generation & integ-test strategy ("each run + validated")
- Packs are **generated** by `tools/gen_catalog.py` (procedurally
parameterized per the anti-memorization rule), written flat into
`openra_bench/scenarios/packs/` with a `cat-` prefix.
- **Validation**: `python -m openra_bench.scenarios.validate` compiles
all 3 levels of every pack against the engine `ScenarioDefinition`
+ win-grammar (schema gate).
- **Engine run**: the existing parametrized
`tests/test_robustness.py::test_bundled_pack_runs_on_engine`
auto-covers every `packs/*.yaml` — each catalog pack's easy level
must actually execute on the Rust engine (terrain resolves, actors
load, scores), not merely validate.
- **Catalog coverage test**: `tests/test_catalog.py` asserts all 12
categories are present, ≈200 levels exist, every pack carries a
capability tag, and difficulty is monotone (tighter clock / less
info per level) — the literature's controlled-ladder requirement.
- **Transfer panel (follow-up)**: pre-register ERQA + Blocksworld +
WebShop external eval to quantify generalization gap (lmgame-Bench
protocol); report per-axis deltas, not aggregate.
## Cross-cutting rules (enforced by the generator)
1. No enemy-destruction predicate exists → offensive success =
`units_killed_gte` + positional `reach_region`/`building_in_region`.
2. Difficulty = decision hardness (info↓, decoys↑, clock↓, budget
committed, attrition cap), never raw scaling.
3. Per-pack `real_world_meaning` + `robotics_analogue` are mandatory
and tie to the mapped capability dimension + its literature.