extern crate differential_evolution;
use differential_evolution::self_adaptive_de;
use std::f32::consts::PI;
use std::env;
fn rastrigin(pos: &[f32]) -> f32 {
pos.iter().fold(0.0, |sum, x|
sum + x * x - 10.0 * (2.0 * PI * x).cos() + 10.0)
}
fn main() {
let args: Vec<String> = env::args().collect();
let dim = args[1].parse::<usize>().unwrap();
let initial_min_max = vec![(-5.12, 5.12); dim];
let mut de = self_adaptive_de(initial_min_max, rastrigin);
de.iter().take(100000).find(|&cost| cost < 0.1);
println!("{} evaluations done", de.num_cost_evaluations());
let (cost, pos) = de.best().unwrap();
println!("{} best cost", cost);
println!("{:?} best position", pos);
}