use crate::common::Lambda;
use sparsetools::csr::CSR;
pub trait ObjectiveFunction {
fn f(&self, x: &[f64], hessian: bool) -> (f64, Vec<f64>, Option<CSR<usize, f64>>);
}
pub trait NonlinearConstraint {
fn gh(
&self,
x: &[f64],
gradients: bool,
) -> (
Vec<f64>,
Vec<f64>,
Option<CSR<usize, f64>>,
Option<CSR<usize, f64>>,
);
fn hess(&self, x: &[f64], lam: &Lambda, cost_mult: f64) -> CSR<usize, f64>;
}
pub trait ProgressMonitor {
fn update(
&self,
i: usize,
feas_cond: f64,
grad_cond: f64,
comp_cond: f64,
cost_cond: f64,
_gamma: f64,
step_size: f64,
obj: f64,
_alpha_p: f64,
_alpha_d: f64,
) {
if i == 0 {
println!(
" it objective step size feascond gradcond compcond costcond "
);
println!(
"---- ------------ --------- ------------ ------------ ------------ ------------"
);
}
println!(
"{:3} {:10.5} {:10.5} {:12.8} {:12.8} {:12.8} {:12.8}",
i, obj, step_size, feas_cond, grad_cond, comp_cond, cost_cond
);
}
}