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
SpaceSchemaand 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.
optimizeris 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 |