Crates.io | optimal |
lib.rs | optimal |
version | 0.0.0 |
source | src |
created_at | 2023-09-27 19:51:48.670699 |
updated_at | 2023-09-27 19:51:48.670699 |
description | Mathematical optimization and machine learning framework and algorithms |
homepage | |
repository | https://github.com/justinlovinger/optimal-rs |
max_upload_size | |
id | 985130 |
size | 23,077 |
This package is experimental. Expect frequent updates to the repository with breaking changes and infrequent releases.
Mathematical optimization and machine learning framework and algorithms.
Optimal provides a composable framework for mathematical optimization and machine learning from the optimization perspective, in addition to algorithm implementations.
The framework consists of runners,
optimizers,
and problems,
with a chain of dependency as follows:
runner -> optimizer -> problem
.
Most optimizers can support many problems
and most runners can support many optimizers.
A problem defines a mathematical optimization problem. An optimizer defines the steps for solving a problem, usually as an infinite series of state transitions incrementally improving a solution. A runner defines the stopping criteria for an optimizer and may affect the optimization sequence in other ways.
Minimize the "count" problem using a derivative-free optimizer:
use optimal::{prelude::*, BinaryDerivativeFreeConfig};
println!(
"{:?}",
BinaryDerivativeFreeConfig::start_default_for(16, |point| {
point.iter().filter(|x| **x).count() as f64
})
.argmin()
);
Minimize the "sphere" problem using a derivative optimizer:
use optimal::{prelude::*, RealDerivativeConfig};
println!(
"{:?}",
RealDerivativeConfig::start_default_for(
2,
std::iter::repeat(-10.0..=10.0).take(2),
|point| point.iter().map(|x| x.powi(2)).sum(),
|point| point.iter().map(|x| 2.0 * x).collect(),
)
.nth(100)
.unwrap()
.best_point()
);
For more control over configuration parameters, introspection of the optimization process, serialization, and specialization that may improve performance, see individual optimizer packages.
License: MIT