clarabel_constrained_l2/
clarabel_constrained_l2.rs1use resopt::{
2 Bounds, ConstrainedResidualProblem, LinearEqualities, LinearInequalities, LinearResidual, Loss,
3 Matrix,
4};
5
6fn main() -> Result<(), Box<dyn std::error::Error>> {
7 let residual = LinearResidual::new(
8 Matrix::from_row_major(3, 2, vec![1.0, 0.0, 0.0, 1.0, 1.0, 1.0])?,
9 vec![1.0, 2.0, 2.5],
10 )?;
11
12 let eq = LinearEqualities::new(Matrix::from_row_major(1, 2, vec![1.0, -1.0])?, vec![0.0])?;
13
14 let ineq = LinearInequalities::new(Matrix::from_row_major(1, 2, vec![1.0, 1.0])?, vec![3.0])?;
15
16 let bounds = Bounds::new(vec![Some(0.0), Some(0.0)], vec![Some(10.0), Some(10.0)])?;
17
18 let problem = ConstrainedResidualProblem::new(residual, Loss::L2Squared)?
19 .add_equalities(eq)?
20 .add_inequalities(ineq)?
21 .with_bounds(bounds)?;
22
23 let result = problem.solve()?;
24
25 println!("status : {:?}", result.status());
26 println!("objective : {:?}", result.objective_value());
27 println!("diagnostics : {:?}", result.diagnostics());
28
29 if let Some(solution) = result.solution() {
30 println!("x : {:?}", solution.x());
31 println!("residual : {:?}", solution.residual());
32 }
33
34 Ok(())
35}