5 releases (1 stable)
Uses new Rust 2024
| 1.0.0 | Feb 13, 2026 |
|---|---|
| 0.3.0 | Jan 30, 2026 |
| 0.2.0 | Jan 30, 2026 |
| 0.1.1 | Jan 30, 2026 |
| 0.1.0 | Jan 30, 2026 |
#177 in Math
69 downloads per month
1MB
19K
SLoC
optimizer
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.
Quick Start
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);
Features at a Glance
- 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
Feature Flags
| 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 |
Examples
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 front
Learn More
License
MIT
Dependencies
~0.5–4.5MB
~60K SLoC