optimizer

A Rust library for black-box optimization with multiple sampling strategies.

Docs Crates.io codecov

Features

  • Optuna-like API for hyperparameter optimization
  • Multiple sampling strategies:
    • Random Search - Simple random sampling for baseline comparisons
    • TPE (Tree-Parzen Estimator) - Bayesian optimization for efficient search
    • Grid Search - Exhaustive search over a specified parameter grid
  • Float, integer, and categorical parameter types
  • Log-scale and stepped parameter sampling
  • Sync and async optimization with parallel trial evaluation

Quick Start

use optimizer::{Direction, Study};
use optimizer::sampler::tpe::TpeSampler;

let sampler = TpeSampler::builder().seed(42).build().unwrap();
let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);

study
    .optimize_with_sampler(20, |trial| {
        let x = trial.suggest_float("x", -10.0, 10.0)?;
        Ok::<_, optimizer::Error>(x * x)
    })
    .unwrap();

let best = study.best_trial().unwrap();
println!("Best value: {} at x={:?}", best.value, best.params);

Samplers

use optimizer::{Direction, Study};
use optimizer::sampler::random::RandomSampler;

let study: Study<f64> = Study::with_sampler(
    Direction::Minimize,
    RandomSampler::with_seed(42),
);

TPE (Tree-Parzen Estimator)

use optimizer::{Direction, Study};
use optimizer::sampler::tpe::TpeSampler;

let sampler = TpeSampler::builder()
    .gamma(0.15)           // Quantile for good/bad split
    .n_startup_trials(20)  // Random trials before TPE kicks in
    .n_ei_candidates(32)   // Candidates to evaluate
    .seed(42)
    .build()
    .unwrap();

let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
use optimizer::{Direction, Study};
use optimizer::sampler::grid::GridSearchSampler;

let sampler = GridSearchSampler::builder()
    .n_points_per_param(10)  // Number of points per parameter dimension
    .build();

let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);

Feature Flags

  • async - Enable async optimization methods (requires tokio)

Documentation

Full API documentation is available at docs.rs/optimizer.

License

MIT

S
Description
A Rust library for black-box optimization using Tree-Parzen Estimator (TPE).
Readme 831 KiB
Languages
Rust 99.8%
Shell 0.2%