Skip to content

JonathanWoollett-Light/simple_optimization

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

simple_optimization

Crates.io lib.rs.io docs

Some simple multi-threaded optimizers.

You could do a random search like:

use std::sync::Arc;
use simple_optimization::{random_search, Polling};
// Our evaluation function takes 3 `f64`s and no additional data `()`.
fn simple_function(list: &[f64; 3], _: Option<Arc::<()>>) -> f64 { list.iter().sum() }
let best = random_search!(
    (0f64..10f64, 5u32..15u32, 10i16..20i16), // Value ranges.
    simple_function, // Evaluation function.
    None, // No additional evaluation data.
    // Every `10ms` we print progress and exit early if `simple_function` return a value less than `19.`.
    Some(Polling::new(true,Some(19.))),
    None, // We don't specify the number of threads to run.
    1000, // Take `1000` samples.
);
assert!(simple_function(&best, None) < 19.);

Which during execution will give an output like:

1000
 500 (50.00%) 00:00:11 / 00:00:47 [25.600657363049734]

Representing:

<Total number of samples>
<Current number of samples> (<Percentage of samples taken>) <Time running> / <ETA> [<Current best value>]

Support

Optimizer Status
Random search
Grid search
Simulated annealing
Bayesian optimization WIP
Gradient descent See my note here
Genetic algorithms No plans
Ant colony optimization No plans
Linear programming No plans

I made this for my own use since the existing libraries I found felt awkward.

About

Easy to use simple multi-threaded optimizers.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published