extern crate argmin;
extern crate ndarray;
use ndarray::Array1;
use argmin::backtracking::BacktrackingLineSearch;
use argmin::testfunctions::{rosenbrock_derivative_nd, rosenbrock_nd};
fn run() -> Result<(), Box<std::error::Error>> {
let cost = |x: &Array1<f64>| -> f64 { rosenbrock_nd(x, 1_f64, 100_f64) };
let gradient = |x: &Array1<f64>| -> Array1<f64> { rosenbrock_derivative_nd(x, 1_f64, 100_f64) };
let solver = BacktrackingLineSearch::new(&cost, &gradient);
let x = Array1::from_vec(vec![4.1, 3.0]);
let p = gradient(&x);
let result = solver.run(&(-p), &x)?;
println!("{:?}", result);
Ok(())
}
fn main() {
if let Err(ref e) = run() {
println!("error: {}", e);
}
}