extern crate descent;
use descent::expr::{Expr, NumOps};
use descent::ipopt_model::{IpoptModel};
use descent::model::{Model};
fn main() {
let n: usize = 1000;
let mut m = IpoptModel::new();
let mut xs = Vec::new();
for _i in 0..n {
xs.push(m.add_var(-1.5, 0.0, -0.5));
}
let mut obj = Expr::from(0.0);
for &x in &xs {
obj = obj + (x - 1.0).powi(2);
}
m.set_obj(obj);
for i in 0..(n-2) {
let a = ((i + 2) as f64)/(n as f64);
let e = (xs[i + 1].powi(2) + 1.5*xs[i + 1] - a)*xs[i + 2].cos()
- xs[i];
m.add_con(e, 0.0, 0.0);
}
m.solve();
}