Deployed here: https://simulation-bench.fly.dev/
A benchmark for evaluating agentic software development on modelling and simulation work, beginning with a synthetic open-pit mine haulage problem implemented in SimPy.
The benchmark asks an agent to build a discrete-event simulation from supplied topology data and decision questions. It evaluates not only whether the code runs, but whether the agent can produce a defensible conceptual model, use topology data meaningfully, run experiments, report uncertainty, and interpret bottlenecks.
benchmarks/001_synthetic_mine_throughput # open-pit mine haulage (V1)
benchmarks/002_container_shipping_throughput # Asia–Europe container shipping (maximum difficulty)
001 — Synthetic Mine Throughput. Estimate ore throughput to a primary crusher over an 8-hour shift using a synthetic mine network.
002 — Asia–Europe Container Shipping Throughput. Estimate container (TEU) throughput from Shanghai and Singapore to Rotterdam over a 180-day horizon, via the Suez Canal with a Cape of Good Hope reroute. 002 is deliberately harder: the prompt withholds the entity/output schema (the agent must derive the model), the scenarios contain designed, verified traps (the canal upgrade is a near-no-op because the Rotterdam berth is the true bottleneck; over-fleeting saturates; closing the canal forces the long Cape reroute), and the harness re-derives throughput from the event log to catch confidently-wrong submissions.
Every score now records the reviewing model and harness (reviews are performed by AI models), so results are attributable and reviewer drift is visible on the leaderboard.
V1 deliberately includes:
- one substantial modelling task rather than many toy problems
- fixed decision questions and fixed required scenarios
- room for the agent to choose routing, dispatching, assumptions, and implementation design
- no reference solution in the agent-facing repository
- quantitative harness scripts for runtime, output schema, scenario coverage, LOC, files, and behavioural checks
- human review rubric for conceptual modelling and qualitative judgement
The harness can automatically capture or check:
- wall-clock runtime, if run through
harness/measure_run.py - process return code
- number of Python files
- lines of code
- required output files
summary.jsonschemaresults.csvcolumnsevent_log.csvcolumns- required scenario coverage
- basic behavioural sanity checks across scenarios
- file-size and manifest metadata
- token usage, if supplied by the runner in
token_usage.jsonorrun_metrics.json
The harness cannot reliably automate:
- whether the conceptual model is genuinely good
- whether assumptions are operationally reasonable
- whether bottleneck interpretation is decision-useful
- whether the code structure is elegant
- exact token usage when the agent platform does not expose it
Those are covered by the human scoring rubric in SCORING_GUIDE.md.
Install dependencies:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtRun the benchmark manually by giving the agent:
benchmarks/001_synthetic_mine_throughput/prompt.md
benchmarks/001_synthetic_mine_throughput/data/
After the agent creates a solution and output files, evaluate it:
python harness/evaluate_submission.py \
--benchmark-dir benchmarks/001_synthetic_mine_throughput \
--submission-dir path/to/submission \
--outputs-dir path/to/submission/outputs \
--report-out results/evaluation_report.jsonTo time a submission run:
python harness/measure_run.py \
--submission-dir path/to/submission \
--command "python run_experiment.py" \
--metrics-out path/to/submission/run_metrics.json- final human score
- automated checks passed
- runtime seconds
- input tokens
- output tokens
- total tokens
- production LOC
- files created
- required scenarios completed
- behavioural checks passed
- human interventions
The leaderboard at https://simulation-bench.fly.dev/ is built from this repository:
scores/seed_scores.json— source of truth for human review scores.submissions/<id>/token_usage.jsonandsubmissions/<id>/run_metrics.json— per-run tokens and time.SCORING_GUIDE.mdandRUN_PROTOCOL.md— methodology pages.
# 1. Add the new submission folder under submissions/ (use the create-submission skill)
# 2. Append the new review block to scores/seed_scores.json
# 3. Rebuild and deploy:
make deploymake deploy runs:
python harness/normalize_tokens.py— ensures every submission hastoken_usage.json+run_metrics.json.python harness/record_score.py --from-json scores/seed_scores.json— refreshesscores/scores.db.python harness/build_dashboard.py— emitsdashboard/src/data/leaderboard.jsonand per-submission.mdfiles.cd dashboard && npm run build— producesdashboard/dist/.flyctl deploy --remote-only— ships the Caddy container to fly.io.
For a local preview before deploying: make preview (serves dashboard/dist/ on http://127.0.0.1:4321/).