Benchmarks / Competitors

Competitor Benchmarks

This benchmark compars Basin against argmin, gomez, and nlopt. Each plot shows 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.

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).

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

NEWUOA · Styblinski–Tang

Powell's model-based derivative-free NEWUOA. Basin's implementation is based on the modernized version from PRIMA, whereas nlopt uses Powell's reference.

1e31e01e-31e-61e-91e-1210 ns100 ns1 µs10 µs100 µs1 mssuboptimality f(x) − f*wall-clock timebasinnlopt

Measured 2026-06-21 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>). The GD, NM, and L-BFGS cases run from the classic Rosenbrock start to a 200-iteration cap. Each point is the median wall-clock time per iteration over repeated runs (nlopt, which exposes no per-iteration hook, is sampled per function evaluation as a best-so-far curve); the solvers are deterministic, so only the timing varies.

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