Crate descent_ipopt
source ·Expand description
Implementation of Descent Model trait for IPOPT
This contains the IPOPT bindings and implementation of Model
in the
descent
crate.
Examples
Using fixed expressions:
#![feature(proc_macro_hygiene)]
use descent::model::Model;
use descent_ipopt::IpoptModel;
use descent_macro::expr;
let mut m = IpoptModel::new();
let x = m.add_var(-10.0, 10.0, 0.0);
let y = m.add_var(std::f64::NEG_INFINITY, std::f64::INFINITY, 0.0);
m.set_obj(expr!(2.0 * y; y));
m.add_con(expr!(y - x * x + x; x, y), 0.0, std::f64::INFINITY);
let (stat, sol) = m.solve();
assert!(stat == descent::model::SolutionStatus::Solved);
let sol = sol.unwrap();
assert!((sol.obj_val - (-0.5)).abs() < 1e-5);
assert!((sol.var(x) - 0.5).abs() < 1e-5);
assert!((sol.var(y) - (-0.25)).abs() < 1e-5);
Using dynamic expressions:
use descent::model::Model;
use descent_ipopt::IpoptModel;
let mut m = IpoptModel::new();
let x = m.add_var(-10.0, 10.0, 0.0);
let y = m.add_var(std::f64::NEG_INFINITY, std::f64::INFINITY, 0.0);
m.set_obj(2.0 * y);
m.add_con(y - x * x + x, 0.0, std::f64::INFINITY);
let (stat, sol) = m.solve();
assert!(stat == descent::model::SolutionStatus::Solved);
let sol = sol.unwrap();
assert!((sol.obj_val - (-0.5)).abs() < 1e-5);
assert!((sol.var(x) - 0.5).abs() < 1e-5);
assert!((sol.var(y) - (-0.25)).abs() < 1e-5);
Structs
IPOPT model / solver.