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 outside the rustuna column 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
rustuna (Rust) commit aa68144, untagged git rev-parse in the checkout; see below
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.

The declared bounds that grow during the study row was checked on 2026-08-25, against the same four checkouts. 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 rustuna column was checked on 2026-10-11 against commit aa681448f722407915b1fb979bb79fbee818296d on rustuna's main branch, committed 2026-10-05, and every cell in it links the file at that commit. The commit is not a release: git tag --contains aa68144 prints nothing. At that commit the workspace Cargo.toml declares 0.1.0-dev and the Python package's pyproject.toml declares 0.2.0.dev. The python-v0.1.1 tag, whose pyproject.toml declares 0.1.1, sits on the separate release-python-v0.1.1 branch, which left main at d7ac17c; aa68144 is ten commits past that point on main and does not descend from the tag. So the column describes main shortly after the 0.1.1 Python release, not the release itself.

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 rustuna aa68144 atune 0.1.0
Core in a compiled language Python package Python package Python package Rust crate Rust crates Rust crate
Space as a declarative object, separate from the objective optuna.distributions (per parameter) syne_tune.config_space ConfigSpace Parameter trait Distribution (per parameter) SpaceSchema, TOML [space]
Space derived from the program's own config type none found none found none found #[derive(Categorical)] (enum choices only) none found (no proc-macro crate among the workspace members) #[derive(Space)]
Suggest a parameter inside the objective (define-by-run) Trial.suggest_float none found none found Trial::suggest_param Trial::suggest_float TrialCtx::suggest_f64
Successive halving / Hyperband SuccessiveHalvingPruner, HyperbandPruner AsynchronousSuccessiveHalving smac.intensifier.hyperband pruner/successive_halving.rs none found (trial.rs: "does not currently provide pruner support") AshaPruner, HyperbandPruner
Pause, resume and fork a running trial none found PopulationBasedTraining none found none found none found (no scheduler module in rustuna_core) Pbt, FreezeThaw
DEHB none found none found in the package (named in its docs) none found none found none found (rustuna_sampler has nsgaii, qmc, tpe) Dehb
Several seeds per configuration, aggregated none found none found n_seeds (multi-fidelity facade) none found none found (no seed protocol on Study) SeedProtocol
A held-out seed set used only after the search none found none found none found none found none found (no seed protocol on Study) SeedProtocol::with_test_seeds
Append-only journal storage JournalStorage none found none found JournalStorage JournalStorage JournalStorage
Ask/tell from a shell, for a program in any language optuna ask, optuna tell none found none found none found none found (library Study::ask and Study::tell; no binary target, no [project.scripts] in pyproject.toml) atune ask, atune tell
Hyperparameter importance PedAnovaImportanceEvaluator none found none found optimizer::fanova PedAnovaImportanceEvaluator param_importances
Multi-objective optimisation NSGAIISampler optimizer/schedulers/multiobjective smac.multi_objective multi_objective.rs NsgaiiSampler Nsga2
Tuning inside a single training run none found none found none found none found none found (no such API on Study) OnlineTuner
Declared bounds that grow during the study none found none found none found none found none found (Distribution bounds are fixed low/high) Open, suggest_open_f64
Core builds for a browser target none found none found none found none found rustuna_js: wasm32-unknown-unknown, wasm-bindgen --target web; CI job on pull requests touching rustuna_js/ or rustuna_core/src/ wasm32-unknown-unknown, gated on every change

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. rustuna is also an Optuna reimplementation, and is in the table anyway: its core is Rust, the language atune's is written in, and it implements a chosen subset of Optuna (no pruners, for one), so its column differs from Optuna'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