extern crate argmin;
use argmin::prelude::*;
use argmin::{ArgminProblem, SATempFunc, SimulatedAnnealing};
use argmin::testfunctions::rosenbrock;
fn run() -> Result<(), Box<std::error::Error>> {
let cost = |x: &Vec<f64>| rosenbrock(x, 1_f64, 100_f64);
let lower_bound: Vec<f64> = vec![-1.5, -0.5];
let upper_bound: Vec<f64> = vec![2.0, 3.0];
let mut prob: ArgminProblem<_, _, f64> = ArgminProblem::new(&cost);
prob.bounds(&lower_bound, &upper_bound);
prob.target_cost(0.01);
let mut solver = SimulatedAnnealing::new(10.0, 1_000_000_000)?;
solver.temp_func(SATempFunc::Exponential(0.8));
let init_param: Vec<f64> = vec![0.0, 0.0];
let result = solver.run(&prob, &init_param)?;
println!("{:?}", result);
solver.init(&prob, &init_param)?;
let mut res;
loop {
res = solver.next_iter()?;
if res.terminated {
break;
}
}
println!("{:?}", res);
Ok(())
}
fn main() {
if let Err(ref e) = run() {
println!("error: {}", e);
}
}