Expand description
Declarative constrained residual optimization.
This crate models problems of the form
minimize_x loss(Ax - b)
subject to linear equalities
linear inequalities
variable boundsresopt focuses on a compact API for:
- building residual optimization problems
- validating structure and dimensions
- classifying the problem form
- solving with an optional backend such as Clarabel
§Example
use resopt::{ConstrainedResidualProblemBuilder, Loss, Matrix, SolveStatus};
let a = Matrix::from_row_major(
3,
2,
vec![
1.0, 0.0,
0.0, 1.0,
1.0, 1.0,
],
)?;
let problem = ConstrainedResidualProblemBuilder::new()
.matrix(a)
.target(vec![1.0, 2.0, 3.0])
.loss(Loss::L2Squared)
.build()?;
let result = problem.solve()?;
#[cfg(feature = "clarabel")]
assert_eq!(result.status(), SolveStatus::Solved);
#[cfg(not(feature = "clarabel"))]
assert_eq!(result.status(), SolveStatus::NotImplemented);With the default clarabel feature enabled, Loss::L2Squared problems can be solved directly.
Other loss functions are accepted by the modeling API and return a solver status indicating
that backend support is not implemented yet.
Re-exports§
pub use core::Bounds;pub use core::ConstrainedResidualProblem;pub use core::ConstrainedResidualProblemBuilder;pub use core::Error;pub use core::LinearEqualities;pub use core::LinearInequalities;pub use core::LinearResidual;pub use core::Loss;pub use core::Matrix;pub use core::ProblemClass;pub use core::ProblemSummary;pub use core::TikhonovRegularization;pub use core::Vector;pub use solve::ClarabelOptions;pub use solve::DefaultSolver;pub use solve::ScalingOptions;pub use solve::Solution;pub use solve::SolveDiagnostics;pub use solve::SolveOptions;pub use solve::SolveResult;pub use solve::SolveStatus;pub use solve::Solver;pub use backends::clarabel::ClarabelSolver;