Benchmarks / Competitors

Competitors — basin vs argmin and gomez, convergence over time

basin against argmin and gomez on the same problem from the same start. Each library has only the algorithms it ships, so coverage varies — argmin lines up on GD, NM, and L-BFGS, gomez on derivative-free NM only. Because no two implementations share a code path, a single mean solve time would hide the differences in path and per-iteration cost. Instead each chart plots suboptimality f(x) − f* against wall-clock time on log–log axes: how far down the objective each library gets, and how long it spends getting there. Lower and further left is better.

Gradient Descent · Rosenbrock

Steepest descent with a More–Thuente line search — first-order, identical configuration on both sides.

1e21e11e01e-11e-21e-3100 ns1 µs10 µs100 µssuboptimality f(x) − f*wall-clock timebasinargmin

Nelder–Mead · Rosenbrock

Derivative-free Nelder–Mead. basin and argmin run from a bit-identical initial simplex (standard coefficients); gomez and nlopt construct their own simplex with their default coefficients. nlopt's curve is a per-eval best-so-far trace (no per-iteration hook), the others are per-iteration raw cost. The implementations diverge in path and per-iteration cost.

1e21e-11e-41e-71e-101e-131e-1610 ns100 ns1 µs10 µs100 µssuboptimality f(x) − f*wall-clock timebasinargmingomeznlopt

L-BFGS · Rosenbrock

Limited-memory BFGS (m = 10) — quasi-Newton; basin and argmin both use a More–Thuente line search; nlopt uses its bundled L-BFGS (no line-search knob exposed). nlopt's curve is a per-eval best-so-far trace; the others are per-iteration raw cost.

1e21e-11e-41e-71e-101e-131e-16100 ns1 µs10 µs100 µssuboptimality f(x) − f*wall-clock timebasinargminnlopt

Measured 2026-06-03 on AMD Ryzen 9 7900 12-Core Processor (linux/x64). All libraries run on the Vec<f64> backend (gomez through its own bundled nalgebra::DVector<f64>), from the classic Rosenbrock start, to a 200-iteration cap (a cap — the quasi-Newton case converges first, and gomez's NM hits its internal no-progress stop before the budget). Each point is the median wall-clock time per iteration over repeated runs; the solvers are deterministic, so only the timing varies. Absolute times are machine-specific — compare the curves within a chart, not across machines.

To watch basin's solvers converge interactively, try the visualizer.