Simple(x) Global Optimization
A simplex based variation of the LIPO algorithm from Global optimization of Lipschitz functions.
Potential improvements
Following the dlib implementation, we could add :
- a Lipschitz constant per dimension
- a noise term per point
- a local optimizer
But those require some additional solving in order to estimate the parameters.
Usage
There are two ways to use the algorithm, either use one of the Optimizer::minimize
/ Optimizer::maximize
functions :
let f = ;
let input_interval = vec!;
let nb_iterations = 100;
let = maximize;
println!;
Or use an iterator if you want to set exploration_depth
to an exotic value or to have fine grained control on the stopping criteria :
let f = ;
let input_interval = vec!;
let should_minimize = true;
// sets `exploration_depth` to be greedy
// runs the search for 30 iterations
// then waits until we find a point good enough
// finally stores the best value so far
let = new
.set_exploration_depth
.skip
.take_while
.next.unwrap;
println!;