refactor: rename library from optimize to optimizer
This commit is contained in:
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "optimize"
|
name = "optimizer"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.88"
|
rust-version = "1.88"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
authors = ["Manuel Raimann <raimannma@outlook.de"]
|
authors = ["Manuel Raimann <raimannma@outlook.de"]
|
||||||
description = "A Rust library for optimization algorithms."
|
description = "A Rust library for optimization algorithms."
|
||||||
repository = "https://github.com/raimannma/rust-optimize"
|
repository = "https://github.com/raimannma/rust-optimizer"
|
||||||
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
# optimize
|
# optimizer
|
||||||
|
|
||||||
A Rust library for black-box optimization using Tree-Parzen Estimator (TPE).
|
A Rust library for black-box optimization using Tree-Parzen Estimator (TPE).
|
||||||
|
|
||||||
[](https://docs.rs/optimize)
|
[](https://docs.rs/optimizer)
|
||||||
[](https://crates.io/crates/optimize)
|
[](https://crates.io/crates/optimizer)
|
||||||
[](https://codecov.io/gh/raimannma/rust-optimize)
|
[](https://codecov.io/gh/raimannma/rust-optimizer)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ A Rust library for black-box optimization using Tree-Parzen Estimator (TPE).
|
|||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use optimize::{Direction, Study, TpeSampler};
|
use optimizer::{Direction, Study, TpeSampler};
|
||||||
|
|
||||||
let sampler = TpeSampler::builder().seed(42).build();
|
let sampler = TpeSampler::builder().seed(42).build();
|
||||||
let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
|
let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
|
||||||
@@ -25,7 +25,7 @@ let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
|
|||||||
study
|
study
|
||||||
.optimize_with_sampler(20, |trial| {
|
.optimize_with_sampler(20, |trial| {
|
||||||
let x = trial.suggest_float("x", -10.0, 10.0)?;
|
let x = trial.suggest_float("x", -10.0, 10.0)?;
|
||||||
Ok::<_, optimize::TpeError>(x * x)
|
Ok::<_, optimizer::TpeError>(x * x)
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ println!("Best value: {} at x={:?}", best.value, best.params);
|
|||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
Full API documentation is available at [docs.rs/optimize](https://docs.rs/optimize).
|
Full API documentation is available at [docs.rs/optimizer](https://docs.rs/optimizer).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
//! Error types for the optimize library.
|
//! Error types for the optimizer library.
|
||||||
|
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
|
|||||||
+8
-8
@@ -12,7 +12,7 @@
|
|||||||
//! # Quick Start
|
//! # Quick Start
|
||||||
//!
|
//!
|
||||||
//! ```
|
//! ```
|
||||||
//! use optimize::{Direction, Study, TpeSampler};
|
//! use optimizer::{Direction, Study, TpeSampler};
|
||||||
//!
|
//!
|
||||||
//! // Create a study with TPE sampler
|
//! // Create a study with TPE sampler
|
||||||
//! let sampler = TpeSampler::builder().seed(42).build();
|
//! let sampler = TpeSampler::builder().seed(42).build();
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
//! study
|
//! study
|
||||||
//! .optimize_with_sampler(20, |trial| {
|
//! .optimize_with_sampler(20, |trial| {
|
||||||
//! let x = trial.suggest_float("x", -10.0, 10.0)?;
|
//! let x = trial.suggest_float("x", -10.0, 10.0)?;
|
||||||
//! Ok::<_, optimize::TpeError>(x * x)
|
//! Ok::<_, optimizer::TpeError>(x * x)
|
||||||
//! })
|
//! })
|
||||||
//! .unwrap();
|
//! .unwrap();
|
||||||
//!
|
//!
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
//! A [`Study`] manages optimization trials. Create one with an optimization direction:
|
//! A [`Study`] manages optimization trials. Create one with an optimization direction:
|
||||||
//!
|
//!
|
||||||
//! ```
|
//! ```
|
||||||
//! use optimize::{Direction, RandomSampler, Study, TpeSampler};
|
//! use optimizer::{Direction, RandomSampler, Study, TpeSampler};
|
||||||
//!
|
//!
|
||||||
//! // Minimize with default random sampler
|
//! // Minimize with default random sampler
|
||||||
//! let study: Study<f64> = Study::new(Direction::Minimize);
|
//! let study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
//! Within the objective function, use [`Trial`] to suggest parameter values:
|
//! Within the objective function, use [`Trial`] to suggest parameter values:
|
||||||
//!
|
//!
|
||||||
//! ```
|
//! ```
|
||||||
//! use optimize::{Direction, Study};
|
//! use optimizer::{Direction, Study};
|
||||||
//!
|
//!
|
||||||
//! let study: Study<f64> = Study::new(Direction::Minimize);
|
//! let study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
//!
|
//!
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
//! let optimizer = trial.suggest_categorical("optimizer", &["sgd", "adam", "rmsprop"])?;
|
//! let optimizer = trial.suggest_categorical("optimizer", &["sgd", "adam", "rmsprop"])?;
|
||||||
//!
|
//!
|
||||||
//! // Return objective value
|
//! // Return objective value
|
||||||
//! Ok::<_, optimize::TpeError>(x * n as f64)
|
//! Ok::<_, optimizer::TpeError>(x * n as f64)
|
||||||
//! })
|
//! })
|
||||||
//! .unwrap();
|
//! .unwrap();
|
||||||
//! ```
|
//! ```
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
//! The [`TpeSampler`] can be configured using the builder pattern:
|
//! The [`TpeSampler`] can be configured using the builder pattern:
|
||||||
//!
|
//!
|
||||||
//! ```
|
//! ```
|
||||||
//! use optimize::TpeSampler;
|
//! use optimizer::TpeSampler;
|
||||||
//!
|
//!
|
||||||
//! let sampler = TpeSampler::builder()
|
//! let sampler = TpeSampler::builder()
|
||||||
//! .gamma(0.15) // Quantile for good/bad split
|
//! .gamma(0.15) // Quantile for good/bad split
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
//! With the `async` feature enabled, you can run trials asynchronously:
|
//! With the `async` feature enabled, you can run trials asynchronously:
|
||||||
//!
|
//!
|
||||||
//! ```ignore
|
//! ```ignore
|
||||||
//! use optimize::{Study, Direction};
|
//! use optimizer::{Study, Direction};
|
||||||
//!
|
//!
|
||||||
//! // Sequential async
|
//! // Sequential async
|
||||||
//! study.optimize_async(10, |mut trial| async move {
|
//! study.optimize_async(10, |mut trial| async move {
|
||||||
@@ -118,7 +118,7 @@
|
|||||||
//! With the `serde` feature enabled, studies can be serialized:
|
//! With the `serde` feature enabled, studies can be serialized:
|
||||||
//!
|
//!
|
||||||
//! ```ignore
|
//! ```ignore
|
||||||
//! use optimize::{Study, Direction, TpeSampler};
|
//! use optimizer::{Study, Direction, TpeSampler};
|
||||||
//!
|
//!
|
||||||
//! // Save study state
|
//! // Save study state
|
||||||
//! let study: Study<f64> = Study::new(Direction::Minimize);
|
//! let study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
|
|||||||
+1
-1
@@ -59,7 +59,7 @@ impl<V> CompletedTrial<V> {
|
|||||||
/// Implementing a custom sampler:
|
/// Implementing a custom sampler:
|
||||||
///
|
///
|
||||||
/// ```ignore
|
/// ```ignore
|
||||||
/// use optimize::{Sampler, ParamValue, Distribution, CompletedTrial};
|
/// use optimizer::{Sampler, ParamValue, Distribution, CompletedTrial};
|
||||||
///
|
///
|
||||||
/// struct MySampler;
|
/// struct MySampler;
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ use crate::sampler::{CompletedTrial, Sampler};
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::RandomSampler;
|
/// use optimizer::RandomSampler;
|
||||||
///
|
///
|
||||||
/// // Create with default RNG
|
/// // Create with default RNG
|
||||||
/// let sampler = RandomSampler::new();
|
/// let sampler = RandomSampler::new();
|
||||||
|
|||||||
+9
-9
@@ -27,7 +27,7 @@ use crate::sampler::{CompletedTrial, Sampler};
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::TpeSampler;
|
/// use optimizer::TpeSampler;
|
||||||
///
|
///
|
||||||
/// // Create with default settings
|
/// // Create with default settings
|
||||||
/// let sampler = TpeSampler::new();
|
/// let sampler = TpeSampler::new();
|
||||||
@@ -76,7 +76,7 @@ impl TpeSampler {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::TpeSampler;
|
/// use optimizer::TpeSampler;
|
||||||
///
|
///
|
||||||
/// let sampler = TpeSampler::builder()
|
/// let sampler = TpeSampler::builder()
|
||||||
/// .gamma(0.15)
|
/// .gamma(0.15)
|
||||||
@@ -395,7 +395,7 @@ impl Default for TpeSampler {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::TpeSamplerBuilder;
|
/// use optimizer::TpeSamplerBuilder;
|
||||||
///
|
///
|
||||||
/// let sampler = TpeSamplerBuilder::new()
|
/// let sampler = TpeSamplerBuilder::new()
|
||||||
/// .gamma(0.15)
|
/// .gamma(0.15)
|
||||||
@@ -448,7 +448,7 @@ impl TpeSamplerBuilder {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::TpeSamplerBuilder;
|
/// use optimizer::TpeSamplerBuilder;
|
||||||
///
|
///
|
||||||
/// let sampler = TpeSamplerBuilder::new()
|
/// let sampler = TpeSamplerBuilder::new()
|
||||||
/// .gamma(0.10) // Use top 10% as "good" trials
|
/// .gamma(0.10) // Use top 10% as "good" trials
|
||||||
@@ -476,7 +476,7 @@ impl TpeSamplerBuilder {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::TpeSamplerBuilder;
|
/// use optimizer::TpeSamplerBuilder;
|
||||||
///
|
///
|
||||||
/// let sampler = TpeSamplerBuilder::new()
|
/// let sampler = TpeSamplerBuilder::new()
|
||||||
/// .n_startup_trials(20) // Random sample first 20 trials
|
/// .n_startup_trials(20) // Random sample first 20 trials
|
||||||
@@ -500,7 +500,7 @@ impl TpeSamplerBuilder {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::TpeSamplerBuilder;
|
/// use optimizer::TpeSamplerBuilder;
|
||||||
///
|
///
|
||||||
/// let sampler = TpeSamplerBuilder::new()
|
/// let sampler = TpeSamplerBuilder::new()
|
||||||
/// .n_ei_candidates(48) // Evaluate more candidates
|
/// .n_ei_candidates(48) // Evaluate more candidates
|
||||||
@@ -530,7 +530,7 @@ impl TpeSamplerBuilder {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::TpeSamplerBuilder;
|
/// use optimizer::TpeSamplerBuilder;
|
||||||
///
|
///
|
||||||
/// let sampler = TpeSamplerBuilder::new()
|
/// let sampler = TpeSamplerBuilder::new()
|
||||||
/// .kde_bandwidth(0.5) // Fixed bandwidth of 0.5
|
/// .kde_bandwidth(0.5) // Fixed bandwidth of 0.5
|
||||||
@@ -554,7 +554,7 @@ impl TpeSamplerBuilder {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::TpeSamplerBuilder;
|
/// use optimizer::TpeSamplerBuilder;
|
||||||
///
|
///
|
||||||
/// let sampler = TpeSamplerBuilder::new()
|
/// let sampler = TpeSamplerBuilder::new()
|
||||||
/// .seed(42) // Reproducible results
|
/// .seed(42) // Reproducible results
|
||||||
@@ -570,7 +570,7 @@ impl TpeSamplerBuilder {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::TpeSamplerBuilder;
|
/// use optimizer::TpeSamplerBuilder;
|
||||||
///
|
///
|
||||||
/// let sampler = TpeSamplerBuilder::new()
|
/// let sampler = TpeSamplerBuilder::new()
|
||||||
/// .gamma(0.15)
|
/// .gamma(0.15)
|
||||||
|
|||||||
+32
-32
@@ -39,7 +39,7 @@ fn default_sampler() -> Arc<dyn Sampler> {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, Study};
|
/// use optimizer::{Direction, Study};
|
||||||
///
|
///
|
||||||
/// // Create a study to minimize an objective function
|
/// // Create a study to minimize an objective function
|
||||||
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
@@ -74,7 +74,7 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, Study};
|
/// use optimizer::{Direction, Study};
|
||||||
///
|
///
|
||||||
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
/// assert_eq!(study.direction(), Direction::Minimize);
|
/// assert_eq!(study.direction(), Direction::Minimize);
|
||||||
@@ -93,7 +93,7 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, RandomSampler, Study};
|
/// use optimizer::{Direction, RandomSampler, Study};
|
||||||
///
|
///
|
||||||
/// let sampler = RandomSampler::with_seed(42);
|
/// let sampler = RandomSampler::with_seed(42);
|
||||||
/// let study: Study<f64> = Study::with_sampler(Direction::Maximize, sampler);
|
/// let study: Study<f64> = Study::with_sampler(Direction::Maximize, sampler);
|
||||||
@@ -125,7 +125,7 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, Study, TpeSampler};
|
/// use optimizer::{Direction, Study, TpeSampler};
|
||||||
///
|
///
|
||||||
/// // After deserializing a study, restore the TPE sampler
|
/// // After deserializing a study, restore the TPE sampler
|
||||||
/// let mut study: Study<f64> = Study::new(Direction::Minimize);
|
/// let mut study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
@@ -153,7 +153,7 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, Study};
|
/// use optimizer::{Direction, Study};
|
||||||
///
|
///
|
||||||
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
/// let trial = study.create_trial();
|
/// let trial = study.create_trial();
|
||||||
@@ -181,7 +181,7 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, Study};
|
/// use optimizer::{Direction, Study};
|
||||||
///
|
///
|
||||||
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
/// let mut trial = study.create_trial();
|
/// let mut trial = study.create_trial();
|
||||||
@@ -217,7 +217,7 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, Study};
|
/// use optimizer::{Direction, Study};
|
||||||
///
|
///
|
||||||
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
/// let trial = study.create_trial();
|
/// let trial = study.create_trial();
|
||||||
@@ -243,7 +243,7 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, Study};
|
/// use optimizer::{Direction, Study};
|
||||||
///
|
///
|
||||||
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
/// let mut trial = study.create_trial();
|
/// let mut trial = study.create_trial();
|
||||||
@@ -268,7 +268,7 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, Study};
|
/// use optimizer::{Direction, Study};
|
||||||
///
|
///
|
||||||
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
/// assert_eq!(study.n_trials(), 0);
|
/// assert_eq!(study.n_trials(), 0);
|
||||||
@@ -295,7 +295,7 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, Study};
|
/// use optimizer::{Direction, Study};
|
||||||
///
|
///
|
||||||
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
/// let study: Study<f64> = Study::new(Direction::Minimize);
|
||||||
///
|
///
|
||||||
@@ -360,7 +360,7 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, Study};
|
/// use optimizer::{Direction, Study};
|
||||||
///
|
///
|
||||||
/// let study: Study<f64> = Study::new(Direction::Maximize);
|
/// let study: Study<f64> = Study::new(Direction::Maximize);
|
||||||
///
|
///
|
||||||
@@ -409,7 +409,7 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, RandomSampler, Study};
|
/// use optimizer::{Direction, RandomSampler, Study};
|
||||||
///
|
///
|
||||||
/// // Minimize x^2
|
/// // Minimize x^2
|
||||||
/// let sampler = RandomSampler::with_seed(42);
|
/// let sampler = RandomSampler::with_seed(42);
|
||||||
@@ -418,7 +418,7 @@ where
|
|||||||
/// study
|
/// study
|
||||||
/// .optimize(10, |trial| {
|
/// .optimize(10, |trial| {
|
||||||
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
||||||
/// Ok::<_, optimize::TpeError>(x * x)
|
/// Ok::<_, optimizer::TpeError>(x * x)
|
||||||
/// })
|
/// })
|
||||||
/// .unwrap();
|
/// .unwrap();
|
||||||
///
|
///
|
||||||
@@ -476,10 +476,10 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, RandomSampler, Study};
|
/// use optimizer::{Direction, RandomSampler, Study};
|
||||||
///
|
///
|
||||||
/// # #[cfg(feature = "async")]
|
/// # #[cfg(feature = "async")]
|
||||||
/// # async fn example() -> optimize::Result<()> {
|
/// # async fn example() -> optimizer::Result<()> {
|
||||||
/// // Minimize x^2 with async objective
|
/// // Minimize x^2 with async objective
|
||||||
/// let sampler = RandomSampler::with_seed(42);
|
/// let sampler = RandomSampler::with_seed(42);
|
||||||
/// let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
|
/// let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
|
||||||
@@ -489,7 +489,7 @@ where
|
|||||||
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
||||||
/// // Simulate async work (e.g., network request)
|
/// // Simulate async work (e.g., network request)
|
||||||
/// let value = x * x;
|
/// let value = x * x;
|
||||||
/// Ok::<_, optimize::TpeError>((trial, value))
|
/// Ok::<_, optimizer::TpeError>((trial, value))
|
||||||
/// })
|
/// })
|
||||||
/// .await?;
|
/// .await?;
|
||||||
///
|
///
|
||||||
@@ -556,10 +556,10 @@ where
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, RandomSampler, Study};
|
/// use optimizer::{Direction, RandomSampler, Study};
|
||||||
///
|
///
|
||||||
/// # #[cfg(feature = "async")]
|
/// # #[cfg(feature = "async")]
|
||||||
/// # async fn example() -> optimize::Result<()> {
|
/// # async fn example() -> optimizer::Result<()> {
|
||||||
/// // Minimize x^2 with parallel async evaluation
|
/// // Minimize x^2 with parallel async evaluation
|
||||||
/// let sampler = RandomSampler::with_seed(42);
|
/// let sampler = RandomSampler::with_seed(42);
|
||||||
/// let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
|
/// let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
|
||||||
@@ -569,7 +569,7 @@ where
|
|||||||
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
||||||
/// // Async objective function (e.g., network request)
|
/// // Async objective function (e.g., network request)
|
||||||
/// let value = x * x;
|
/// let value = x * x;
|
||||||
/// Ok::<_, optimize::TpeError>((trial, value))
|
/// Ok::<_, optimizer::TpeError>((trial, value))
|
||||||
/// })
|
/// })
|
||||||
/// .await?;
|
/// .await?;
|
||||||
///
|
///
|
||||||
@@ -657,7 +657,7 @@ where
|
|||||||
/// ```
|
/// ```
|
||||||
/// use std::ops::ControlFlow;
|
/// use std::ops::ControlFlow;
|
||||||
///
|
///
|
||||||
/// use optimize::{Direction, RandomSampler, Study};
|
/// use optimizer::{Direction, RandomSampler, Study};
|
||||||
///
|
///
|
||||||
/// // Stop early when we find a good enough value
|
/// // Stop early when we find a good enough value
|
||||||
/// let sampler = RandomSampler::with_seed(42);
|
/// let sampler = RandomSampler::with_seed(42);
|
||||||
@@ -668,7 +668,7 @@ where
|
|||||||
/// 100,
|
/// 100,
|
||||||
/// |trial| {
|
/// |trial| {
|
||||||
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
||||||
/// Ok::<_, optimize::TpeError>(x * x)
|
/// Ok::<_, optimizer::TpeError>(x * x)
|
||||||
/// },
|
/// },
|
||||||
/// |_study, completed_trial| {
|
/// |_study, completed_trial| {
|
||||||
/// // Stop early if we find a value less than 1.0
|
/// // Stop early if we find a value less than 1.0
|
||||||
@@ -746,7 +746,7 @@ impl Study<f64> {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, RandomSampler, Study};
|
/// use optimizer::{Direction, RandomSampler, Study};
|
||||||
///
|
///
|
||||||
/// // With a seeded sampler for reproducibility
|
/// // With a seeded sampler for reproducibility
|
||||||
/// let sampler = RandomSampler::with_seed(42);
|
/// let sampler = RandomSampler::with_seed(42);
|
||||||
@@ -767,7 +767,7 @@ impl Study<f64> {
|
|||||||
|
|
||||||
/// Runs optimization with full sampler integration.
|
/// Runs optimization with full sampler integration.
|
||||||
///
|
///
|
||||||
/// This method is similar to the generic `optimize` method but creates trials
|
/// This method is similar to the generic `optimizer` method but creates trials
|
||||||
/// using `create_trial_with_sampler()`, giving the sampler access to the history
|
/// using `create_trial_with_sampler()`, giving the sampler access to the history
|
||||||
/// of completed trials for informed parameter suggestions.
|
/// of completed trials for informed parameter suggestions.
|
||||||
///
|
///
|
||||||
@@ -787,7 +787,7 @@ impl Study<f64> {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, RandomSampler, Study};
|
/// use optimizer::{Direction, RandomSampler, Study};
|
||||||
///
|
///
|
||||||
/// // Minimize x^2 with sampler integration
|
/// // Minimize x^2 with sampler integration
|
||||||
/// let sampler = RandomSampler::with_seed(42);
|
/// let sampler = RandomSampler::with_seed(42);
|
||||||
@@ -796,7 +796,7 @@ impl Study<f64> {
|
|||||||
/// study
|
/// study
|
||||||
/// .optimize_with_sampler(10, |trial| {
|
/// .optimize_with_sampler(10, |trial| {
|
||||||
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
||||||
/// Ok::<_, optimize::TpeError>(x * x)
|
/// Ok::<_, optimizer::TpeError>(x * x)
|
||||||
/// })
|
/// })
|
||||||
/// .unwrap();
|
/// .unwrap();
|
||||||
///
|
///
|
||||||
@@ -856,7 +856,7 @@ impl Study<f64> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// use std::ops::ControlFlow;
|
/// use std::ops::ControlFlow;
|
||||||
///
|
///
|
||||||
/// use optimize::{Direction, RandomSampler, Study};
|
/// use optimizer::{Direction, RandomSampler, Study};
|
||||||
///
|
///
|
||||||
/// // Optimize with sampler integration and early stopping
|
/// // Optimize with sampler integration and early stopping
|
||||||
/// let sampler = RandomSampler::with_seed(42);
|
/// let sampler = RandomSampler::with_seed(42);
|
||||||
@@ -867,7 +867,7 @@ impl Study<f64> {
|
|||||||
/// 100,
|
/// 100,
|
||||||
/// |trial| {
|
/// |trial| {
|
||||||
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
||||||
/// Ok::<_, optimize::TpeError>(x * x)
|
/// Ok::<_, optimizer::TpeError>(x * x)
|
||||||
/// },
|
/// },
|
||||||
/// |study, _completed_trial| {
|
/// |study, _completed_trial| {
|
||||||
/// // Stop after finding 5 good trials
|
/// // Stop after finding 5 good trials
|
||||||
@@ -950,10 +950,10 @@ impl Study<f64> {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, RandomSampler, Study};
|
/// use optimizer::{Direction, RandomSampler, Study};
|
||||||
///
|
///
|
||||||
/// # #[cfg(feature = "async")]
|
/// # #[cfg(feature = "async")]
|
||||||
/// # async fn example() -> optimize::Result<()> {
|
/// # async fn example() -> optimizer::Result<()> {
|
||||||
/// // Minimize x^2 with async objective and sampler integration
|
/// // Minimize x^2 with async objective and sampler integration
|
||||||
/// let sampler = RandomSampler::with_seed(42);
|
/// let sampler = RandomSampler::with_seed(42);
|
||||||
/// let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
|
/// let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
|
||||||
@@ -963,7 +963,7 @@ impl Study<f64> {
|
|||||||
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
/// let x = trial.suggest_float("x", -10.0, 10.0)?;
|
||||||
/// // Simulate async work (e.g., network request)
|
/// // Simulate async work (e.g., network request)
|
||||||
/// let value = x * x;
|
/// let value = x * x;
|
||||||
/// Ok::<_, optimize::TpeError>((trial, value))
|
/// Ok::<_, optimizer::TpeError>((trial, value))
|
||||||
/// })
|
/// })
|
||||||
/// .await?;
|
/// .await?;
|
||||||
///
|
///
|
||||||
@@ -1030,10 +1030,10 @@ impl Study<f64> {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::{Direction, RandomSampler, Study};
|
/// use optimizer::{Direction, RandomSampler, Study};
|
||||||
///
|
///
|
||||||
/// # #[cfg(feature = "async")]
|
/// # #[cfg(feature = "async")]
|
||||||
/// # async fn example() -> optimize::Result<()> {
|
/// # async fn example() -> optimizer::Result<()> {
|
||||||
/// // Minimize x^2 with parallel async evaluation and sampler integration
|
/// // Minimize x^2 with parallel async evaluation and sampler integration
|
||||||
/// let sampler = RandomSampler::with_seed(42);
|
/// let sampler = RandomSampler::with_seed(42);
|
||||||
/// let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
|
/// let study: Study<f64> = Study::with_sampler(Direction::Minimize, sampler);
|
||||||
|
|||||||
+8
-8
@@ -71,7 +71,7 @@ impl Trial {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::Trial;
|
/// use optimizer::Trial;
|
||||||
///
|
///
|
||||||
/// let trial = Trial::new(0);
|
/// let trial = Trial::new(0);
|
||||||
/// assert_eq!(trial.id(), 0);
|
/// assert_eq!(trial.id(), 0);
|
||||||
@@ -178,7 +178,7 @@ impl Trial {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::Trial;
|
/// use optimizer::Trial;
|
||||||
///
|
///
|
||||||
/// let mut trial = Trial::new(0);
|
/// let mut trial = Trial::new(0);
|
||||||
/// let x = trial.suggest_float("x", 0.0, 1.0).unwrap();
|
/// let x = trial.suggest_float("x", 0.0, 1.0).unwrap();
|
||||||
@@ -261,7 +261,7 @@ impl Trial {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::Trial;
|
/// use optimizer::Trial;
|
||||||
///
|
///
|
||||||
/// let mut trial = Trial::new(0);
|
/// let mut trial = Trial::new(0);
|
||||||
/// let lr = trial
|
/// let lr = trial
|
||||||
@@ -358,7 +358,7 @@ impl Trial {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::Trial;
|
/// use optimizer::Trial;
|
||||||
///
|
///
|
||||||
/// let mut trial = Trial::new(0);
|
/// let mut trial = Trial::new(0);
|
||||||
/// let x = trial.suggest_float_step("x", 0.0, 1.0, 0.25).unwrap();
|
/// let x = trial.suggest_float_step("x", 0.0, 1.0, 0.25).unwrap();
|
||||||
@@ -450,7 +450,7 @@ impl Trial {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::Trial;
|
/// use optimizer::Trial;
|
||||||
///
|
///
|
||||||
/// let mut trial = Trial::new(0);
|
/// let mut trial = Trial::new(0);
|
||||||
/// let n = trial.suggest_int("n_layers", 1, 10).unwrap();
|
/// let n = trial.suggest_int("n_layers", 1, 10).unwrap();
|
||||||
@@ -536,7 +536,7 @@ impl Trial {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::Trial;
|
/// use optimizer::Trial;
|
||||||
///
|
///
|
||||||
/// let mut trial = Trial::new(0);
|
/// let mut trial = Trial::new(0);
|
||||||
/// let batch_size = trial.suggest_int_log("batch_size", 1, 1024).unwrap();
|
/// let batch_size = trial.suggest_int_log("batch_size", 1, 1024).unwrap();
|
||||||
@@ -627,7 +627,7 @@ impl Trial {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::Trial;
|
/// use optimizer::Trial;
|
||||||
///
|
///
|
||||||
/// let mut trial = Trial::new(0);
|
/// let mut trial = Trial::new(0);
|
||||||
/// let n = trial
|
/// let n = trial
|
||||||
@@ -731,7 +731,7 @@ impl Trial {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use optimize::Trial;
|
/// use optimizer::Trial;
|
||||||
///
|
///
|
||||||
/// let mut trial = Trial::new(0);
|
/// let mut trial = Trial::new(0);
|
||||||
/// let optimizer = trial
|
/// let optimizer = trial
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
//! Core types for the optimize library.
|
//! Core types for the optimizer library.
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
//! Async integration tests for the optimize library.
|
//! Async integration tests for the optimizer library.
|
||||||
//!
|
//!
|
||||||
//! These tests are only compiled when the `async` feature is enabled.
|
//! These tests are only compiled when the `async` feature is enabled.
|
||||||
|
|
||||||
#![cfg(feature = "async")]
|
#![cfg(feature = "async")]
|
||||||
|
|
||||||
use optimize::{Direction, RandomSampler, Study, TpeError, TpeSampler};
|
use optimizer::{Direction, RandomSampler, Study, TpeError, TpeSampler};
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_optimize_async_basic() {
|
async fn test_optimize_async_basic() {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
//! Integration tests for the optimize library.
|
//! Integration tests for the optimizer library.
|
||||||
|
|
||||||
use optimize::{Direction, RandomSampler, Study, TpeError, TpeSampler, Trial};
|
use optimizer::{Direction, RandomSampler, Study, TpeError, TpeSampler, Trial};
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// Test: optimize simple quadratic function with TPE, finds near-optimal
|
// Test: optimize simple quadratic function with TPE, finds near-optimal
|
||||||
@@ -671,7 +671,7 @@ fn test_study_direction() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_trial_state() {
|
fn test_trial_state() {
|
||||||
use optimize::TrialState;
|
use optimizer::TrialState;
|
||||||
|
|
||||||
let trial = Trial::new(0);
|
let trial = Trial::new(0);
|
||||||
assert_eq!(trial.state(), TrialState::Running);
|
assert_eq!(trial.state(), TrialState::Running);
|
||||||
@@ -863,7 +863,7 @@ fn test_trial_debug_format() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_tpe_sampler_builder_default_trait() {
|
fn test_tpe_sampler_builder_default_trait() {
|
||||||
use optimize::TpeSamplerBuilder;
|
use optimizer::TpeSamplerBuilder;
|
||||||
|
|
||||||
let builder = TpeSamplerBuilder::default();
|
let builder = TpeSamplerBuilder::default();
|
||||||
let sampler = builder.build();
|
let sampler = builder.build();
|
||||||
|
|||||||
Reference in New Issue
Block a user