Skip to content

Prior art

atune is not the first hyperparameter optimiser, and most of what it does was done first by somebody else. This page records where each capability lives in the tools it is comparable to.

It is a table of citations, not a scoreboard. There is no total, no gap column and no recommendation, because which capabilities matter depends entirely on what you are tuning. Each cell names the symbol, module or facility that provides the capability in that tool — so a cell is the evidence, and you can check it.

How the table was built

Every cell was checked on 2026-07-30 against a local checkout of the tool's own source, by reading the file that defines the symbol named in the cell. The version is whatever that checkout reports about itself:

Tool Version checked Where the version came from
Optuna 5.0.0.dev optuna/version.py in a checkout of the development branch
Syne Tune 0.15.0 the syne_tune/version file
SMAC3 2.4.0 smac/__init__.py
optimizer (Rust) 1.0.1 its Cargo.toml
atune 0.1.0, unreleased this repository

"none found" is a statement about that search, not about the tool. It means the capability was not located in that version's source under any name looked for. A tool may provide it through a plugin, an example, or a name the search missed; if you know of one, the page's edit link is at the top right.

One row was added later: declared bounds that grow during the study was checked on 2026-08-25, against the same four checkouts, when the capability landed in atune. The nearest thing found anywhere was a commented-out trust-region experiment in SMAC3's smac/main/old/ — a local subspace that moves inside the declared box, never a declared bound that moves outward.

The Optuna row is worth one caveat: the checkout is a development snapshot, which is why its version string is a .dev. The Optuna arm on Benchmarks is the released 4.9.0, a different thing measured for a different purpose.

The matrix

Capability Optuna 5.0.0.dev Syne Tune 0.15.0 SMAC3 2.4.0 optimizer 1.0.1 atune 0.1.0
Core in a compiled language Python package Python package Python package Rust crate Rust crate
Space as a declarative object, separate from the objective optuna.distributions (per parameter) syne_tune.config_space ConfigSpace Parameter trait SpaceSchema, TOML [space]
Space derived from the program's own config type none found none found none found #[derive(Categorical)] (enum choices only) #[derive(Space)]
Suggest a parameter inside the objective (define-by-run) Trial.suggest_float none found none found Trial::suggest_param TrialCtx::suggest_f64
Successive halving / Hyperband SuccessiveHalvingPruner, HyperbandPruner AsynchronousSuccessiveHalving smac.intensifier.hyperband pruner/successive_halving.rs AshaPruner, HyperbandPruner
Pause, resume and fork a running trial none found PopulationBasedTraining none found none found Pbt, FreezeThaw
DEHB none found none found in the package (named in its docs) none found none found Dehb
Several seeds per configuration, aggregated none found none found n_seeds (multi-fidelity facade) none found SeedProtocol
A held-out seed set used only after the search none found none found none found none found SeedProtocol::with_test_seeds
Append-only journal storage JournalStorage none found none found JournalStorage JournalStorage
Ask/tell from a shell, for a program in any language optuna ask, optuna tell none found none found none found atune ask, atune tell
Hyperparameter importance PedAnovaImportanceEvaluator none found none found optimizer::fanova param_importances
Multi-objective optimisation NSGAIISampler optimizer/schedulers/multiobjective smac.multi_objective multi_objective.rs Nsga2
Tuning inside a single training run none found none found none found none found OnlineTuner
Declared bounds that grow during the study none found none found none found none found Open, suggest_open_f64
Core builds for a browser target none found none found none found none found wasm32-unknown-unknown, gated on every change

Some rows have exactly one filled cell. That is not a claim of superiority — it is the same statement as every other row: the capability was found in one checkout and not in the others.

What is not in the table, and why

The selection rule is: a general-purpose hyperparameter optimiser of comparable scope, with a source checkout available to cite from. Tools that fail the second half are absent, however relevant they are:

  • Ray Tune is the most significant absence: it is the tool whose separation of a scheduler from a searcher atune's own seam is modelled on. There was no checkout on this machine to read, and a row of unchecked cells is worse than no row at all.
  • Ax/BoTorch, nevergrad, hyperopt, Vizier, NePS, HEBO each cover part of the surface — acquisition functions, gradient-free algorithm zoos, service architecture, prior-guided multi-fidelity — rather than the whole framework shape this table is about.
  • goptuna is an Optuna port in Go, and a second static-language data point, but a port's capability set mostly restates the original's.
  • Managed services (Weights & Biases sweeps, Katib, Determined) are not libraries; the comparison would be about operating models, not capabilities.

What atune took from which

Attribution, since the table above does not carry it:

  • Optuna supplies the storage contract atune's own backends implement: race-safe trial numbering, immutable finished trials, workers coordinating only through storage, and an append-only journal with periodic snapshots. Its relative/independent sampling split is also why a model-based sampler can survive a define-by-run space at all. atune reads and writes Optuna's journal format for exactly this reason — see Optuna interop.
  • Ray Tune supplies the idea that a scheduler and a searcher are different objects, and that a scheduler may pause, resume and mutate a trial rather than only stopping it.
  • SMAC3 supplies, through ConfigSpace, the model of the search space as a serialisable object separate from the objective — which is how atune's SpaceSchema and TOML [space] overlay are shaped. ConfigSpace's schema-level conditionals were read and deliberately not adopted: atune keeps conditional structure as control flow inside a define-by-run objective (search spaces states the trade).
  • Syne Tune was the scheduler reading list: the breadth of its zoo is what told atune which schedulers were worth implementing.
  • optimizer is the Rust framework atune's seams were designed against, and the source of several negative lessons — parameters keyed by construction order rather than by name, and a per-parameter sampler API that cannot express joint sampling or return an error.
  • kurobako, Optuna's own benchmark harness, is used rather than reimplemented; it is what drives Benchmarks.

Where to go next

If you want to Go to
What atune does that is unusual, stated as capability Why atune
Measurements against Optuna, with reproduction commands Benchmarks
Why the RL-oriented features exist RL evidence
To move an existing Optuna study across Optuna interop
The capabilities themselves, in one list Catalog