Supply Chain RL Environment

Earlier model leaderboard

This page preserves the earlier capacity-400 evaluation. The current stochastic benchmark uses a different evaluation protocol and reference; its scores are not directly comparable with the archived board below.

On the current 16 held-out stochastic seeds, Qwen3.5-4B scores 11.78 untrained and 38.42 with the GRPO + LoRA adapter (3.3×), while mean cost falls from 4,742.3 to 1,453.6. The existing adapter was evaluated without retraining on the stochastic environment. View current results.

The earlier standard suite of SupplyChainBench: one wholesaler seat on a Y-shaped chain, 36 decision weeks, 16 held-out seeds, factory capacity 400. The interesting result is not the ranking at the top. It is the distance between every model on this page and a classical base-stock heuristic that none of them comes close to.

Rank Policy Score
  1. 1

    Claude Opus 5 15/16 clean

    51.28
  2. 2

    GPT-5.6 Sol

    43.61
  3. 3

    Grok 4.6

    42.09
  4. 4

    Grok 4.5

    29.78
  5. 5

    Qwen3.5-4B + LoRA (GRPO) trained here

    20.64
  6. 6

    GPT-5.6 Luna

    14.80
  7. 7

    DeepSeek V4 Flash

    7.13
  8. 8

    Qwen3.5-4B, untrained untrained base

    6.74
100 Hindsight-perfect 73.9 Adaptive base-stock 19.82 Blind constant order
Score is the share of a hindsight-perfect wholesaler's cost achieved on the same 16 seeds, so 100 is the ceiling and the ticks are the policies worth beating. Human median still pending: 23 sessions logged, 0 finished.

What the benchmark asks

SupplyChainBench asks three things of an agent, and keeps their scores apart so unlike tests are never averaged together. Control: can it hold inventory and backlog cost down on the frozen 16-seed standard suite, which is the board above. Adaptation: five further suites change the demand law, the delivery times or the supply ceiling mid-run to see whether the agent notices and recovers. Learning: separate runs compare starting fresh each episode, carrying short notes between episodes, and updating weights across them.

Only the standard suite is ranked here. The others are reported in the repository against their own references, because a policy that looks strong under a fixed demand law is not thereby strong when the law moves.

How the score reads

Every policy is scored against a hindsight-perfect wholesaler on the same seed: the best feasible open-loop order sequence, computed after the fact with the demand already known. That reference costs 287.22 on average and is defined as 100. A score of 25 means the policy spent four times what perfect foresight would have.

Two reference points sit between the models and that ceiling. An adaptive base-stock heuristic — classical inventory control, no learning, no language — reaches 73.9. And a blind constant order of 18 units every week, which never reads the observation at all, reaches 19.82. Anything below that second line is losing to a policy with no inputs.

The gap

GPT-5.6 Sol and Grok 4.6 lead the fully clean API runs at 43.613 and 42.091 — roughly two-fifths of hindsight-perfect and still well short of the base-stock heuristic's 73.9. Claude Opus 5 scores higher at 51.282 on 15 of 16 seeds, but that bar is diagnostic: one protocol failure rebases the perfect reference and keeps it off the canonical rank. The trained adapter in this repository — a rank-16 LoRA on a 4B base model — reaches 20.636, clearing the blind constant-order baseline of 19.82 but sitting well below the latest frontier models.

Runs with any protocol failure stay in the full table rather than being dropped. Laguna finished 7 of 16 episodes, Nemotron 2 of 16, the DeepSeek V4 Flash 0731 rerun 11 of 16, and Muse Spark 1.2 completed none — each scored against a perfect reference re-based onto the seeds it actually finished, so those rows are small-sample or diagnostic. They are left visible because a benchmark that quietly removes the runs that broke is not a benchmark.

What training moved in the earlier evaluation

The adapter was trained with critic-free group-relative policy optimization on the earlier environment: roll the seat out several times per seed under common random numbers, grade each weekly decision by a six-week windowed return, normalize against its groupmates at the same timestep, and reweight only the tokens that carry the order digits. The 4B base weights stay frozen; the LoRA is the only thing the optimizer touches.

On the earlier 16 held-out seeds that takes the same base model from 6.73 to 20.64 — a 3.1× improvement — with mean local cost falling from 4264.7 to 1391.8 and 16/16 episodes protocol-clean before and after. What changed is the over-ordering habit that dominates cost in this game: mean weekly order in the rollouts fell from about 22.9 to about 17.5, against a real obligation near 16 units a week.

Two caveats belong next to that number. It clears the blind constant-order baseline by 0.82 points, which is not a comfortable margin. And both training runs used the same seed (20260808), so run-to-run variance is unmeasured.

Full table

# Policy Score Mean cost Per-seed ± SE Clean
1 Hindsight-perfect feasible open-loop upper bound on each seed 100.000 287.2
2 Adaptive base-stock classical heuristic, not optimal 73.900 388.8
3 Claude Opus 5 anthropic/claude-opus-5 Finished 15 of 16 episodes. Scored against a re-based perfect reference of 296.60 on those seeds — diagnostic, shown on the chart but not ranked as fully clean. 51.282 578.4 47.73 ± 3.71 15/16
4 GPT-5.6 Sol openai/gpt-5.6-sol 43.613 658.6 40.23 ± 3.56 16/16
5 Grok 4.6 x-ai/grok-4.6 42.091 682.4 40.03 ± 3.27 16/16
6 Grok 4.5 x-ai/grok-4.5 29.777 964.6 31.80 ± 2.94 16/16
7 Qwen3.5-4B + LoRA (GRPO) trained_qwen_grpo_v3_capacity_400 20.636 1391.8 19.86 ± 3.21 16/16
8 Blind constant order orders 18 every week, never reads the observation 19.820
9 GPT-5.6 Luna openai/gpt-5.6-luna 14.796 1941.2 17.48 ± 2.08 16/16
10 Laguna S 2.1 (free) poolside/laguna-s-2.1:free Finished 7 of 16 episodes. Scored against a re-based perfect reference of 362.36 on those seeds — read it as small-sample. 14.021 2584.4 14.71 ± 1.47 7/16
11 DeepSeek V4 Flash 0731 (rerun) deepseek/deepseek-v4-flash-0731 Finished 11 of 16 episodes. Scored against a re-based perfect reference of 336.82 on those seeds — diagnostic. 7.283 4624.5 9.88 ± 2.54 11/16
12 DeepSeek V4 Flash deepseek/deepseek-v4-flash-0731 7.125 4031.3 9.45 ± 1.29 16/16
13 Qwen3.5-4B, untrained Qwen/Qwen3.5-4B 6.735 4264.7 7.56 ± 1.14 16/16
14 Nemotron 3 Ultra (free) nvidia/nemotron-3-ultra-550b-a55b:free Finished 2 of 16 episodes. Scored against a re-based perfect reference of 352.75 on those seeds — read it as small-sample. 6.558 5379.0 10.00 ± 4.34 2/16
15 Muse Spark 1.2 meta/muse-spark-1.2 Finished 0 of 16 episodes — no score. 0/16

Human baseline

This page is missing a line it should have. The browser build logs anonymous sessions so that human play can be scored on the same seeds as the models, and 23 sessions have been recorded, but 0 of them reached week 36. Every logged session was abandoned after the first order, which leaves no final cost to take a median over.

Rather than substitute an estimate, the line is left off the chart until the log contains finished episodes. The plumbing is in place; the data is not.

Protocol

  • Controlled role Wholesaler; the two retailers, distributor and factory run fixed policies
  • Topology Y — one wholesaler, two competing retailers
  • Horizon 36 decision weeks, 3 settlement weeks, plus a terminal inventory-position charge
  • Capacity Factory capacity 400; the prompt withholds both the capacity and the demand law
  • Seeds 16, common random numbers, held out from training
  • Score score = 100 × mean(perfect cost) / mean(policy cost), over protocol-clean episodes
  • Cost $0.50 per unit held, $1.00 per unit backlogged, charged weekly
  • Frontier models Run through OpenRouter at versioned API ids

A separate board exists and is deliberately not mixed with this one: the published Verifiers Hub package keeps factory capacity 22 for historical leaderboard parity, while the research board and public browser build run at capacity 400.

The archived board figures are transcribed from artifacts/live_y_capacity_400/evaluations/ in the project repository, where the same board is regenerated from the evaluation JSON so the published chart cannot drift from the runs. Nothing here is recomputed in the browser.