Skip to content

benchmarks: Initial DirectTrajOpt benchmark suite (Ipopt vs MadNLP)#75

Open
jack-champagne wants to merge 4 commits intofeat/madnlp-gpu-passthroughsfrom
benchmarks/directtrajopt-initial-v2
Open

benchmarks: Initial DirectTrajOpt benchmark suite (Ipopt vs MadNLP)#75
jack-champagne wants to merge 4 commits intofeat/madnlp-gpu-passthroughsfrom
benchmarks/directtrajopt-initial-v2

Conversation

@jack-champagne
Copy link
Copy Markdown
Member

Re-open of #67 (was merged into wrong base, reverted, re-applied).

Summary

Initial benchmarking infrastructure for DirectTrajOpt.jl comparing Ipopt and MadNLP solvers.

Depends on: HarmoniqsBenchmarks.jl

What's included

  • benchmark/Project.toml — Benchmark environment with HarmoniqsBenchmarks, BenchmarkTools, TestItems, MadNLP
  • benchmark/benchmarks.jl — Three @testitem suites:
    • Evaluator micro-benchmarks (bilinear N=51)
    • Ipopt vs MadNLP macro-benchmark (bilinear N=51)
    • Memory scaling study — sweep N ∈ {25, 51, 101} × state_dim ∈ {4, 8, 16}
  • .github/workflows/benchmark.yml — CI workflow

Test plan

  • Run benchmark suite — all 3 benchmarks produce JLD2 artifacts
  • Verify Ipopt vs MadNLP timing numbers
  • CI green

🤖 Generated with Claude Code

jack-champagne and others added 3 commits April 24, 2026 16:53
- Add docs/src/benchmarks.md mirroring CuQuantum.jl pattern: problem
  description, result tables, environment info, reproduction instructions
- Wire benchmarks page into docs/make.jl
- Extract shared problem constructors to benchmark/problem_utils.jl
  (make_bilinear_problem, make_scaled_problem) to eliminate duplication
- Remove hardcoded package_version, pass runner consistently
- Update README with docs link and regression detection example

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove fragile Base.loaded_modules_order lookup for MadNLPSolverExt;
  MadNLPOptions is exported directly from DirectTrajOpt
- Change MadNLP print_level from 1 (TRACE) to 6 (ERROR) to match
  Ipopt's silent output and avoid polluting benchmark stdout
- Derive state_dim/control_dim from problem_dims(prob) instead of
  hardcoding in micro-benchmark MicroBenchmarkResult
- Set BENCHMARK_RUNNER=github-actions in CI workflow so results
  are distinguishable from local runs
- Remove unused ForwardDiff and LinearAlgebra from benchmark/Project.toml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 24, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

- Pin HarmoniqsBenchmarks source to fix/widen-dto-compat branch which
  has DirectTrajOpt compat "0.8, 0.9" (fixes Pkg.instantiate failure)
- Run JuliaFormatter on benchmark files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant