Bayesian and population-based optimization library with an Optuna-like API for hyperparameter tuning and black-box optimization. Supports 12 samplers, 8 pruners, multi-objective optimization, async parallelism, and persistent storage.
use optimizer::prelude::*;
let study: Study<f64> = Study::new(Direction::Minimize);
let x = FloatParam::new(-10.0, 10.0).name("x");
study.optimize(50, |trial| {
let val = x.suggest(trial)?;
Ok::<_, Error>((val - 3.0).powi(2))
}).unwrap();
let best = study.best_trial().unwrap();
println!("Best x = {:.4}, f(x) = {:.4}", best.get(&x).unwrap(), best.value);- Samplers — Random, TPE, Multivariate TPE, Grid, Sobol, CMA-ES, Gaussian Process, Differential Evolution, BOHB, NSGA-II, NSGA-III, MOEA/D
- Pruners — Median, Percentile, Threshold, Patient, Hyperband, Successive Halving, Wilcoxon, Nop
- Parameters — Float, Int, Categorical, Bool, and Enum types with
.name()labels and typed access - Multi-objective — Pareto front extraction with NSGA-II/III and MOEA/D
- Async & parallel — Concurrent trial evaluation with Tokio
- Storage backends — In-memory (default) or JSONL journal for persistence and resumption
- Visualization — HTML reports with optimization history and parameter importance
- Analysis — fANOVA and Spearman correlation for parameter importance
| Flag | Enables | Default |
|---|---|---|
async |
Async/parallel optimization (Tokio) | No |
derive |
#[derive(Categorical)] for enum parameters |
No |
serde |
Serialization of trials and parameters | No |
journal |
JSONL storage backend (implies serde) |
No |
sobol |
Sobol quasi-random sampler | No |
cma-es |
CMA-ES sampler (requires nalgebra) |
No |
gp |
Gaussian Process sampler (requires nalgebra) |
No |
tracing |
Structured logging with tracing |
No |
cargo run --example basic_optimization # Minimize a quadratic — simplest possible usage
cargo run --example parameter_types --features derive # All 5 param types + #[derive(Categorical)]
cargo run --example sampler_comparison # Compare Random, TPE, and Grid on the same problem
cargo run --example pruning # Trial pruning with MedianPruner
cargo run --example early_stopping # Halt a study when a target is reached
cargo run --example async_parallel --features async # Evaluate trials concurrently with tokio
cargo run --example journal_storage --features journal # Persist trials to disk and resume later
cargo run --example ask_and_tell # Decouple sampling from evaluation
cargo run --example multi_objective # Optimize competing objectives + Pareto frontMIT