Skip to main content

Crate resopt

Crate resopt 

Source
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 bounds

resopt 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;

Modules§

backends
core
prelude
solve
utils