[][src]Crate osqp

The OSQP (Operator Splitting Quadratic Program) solver is a numerical optimization package for solving convex quadratic programs in the form

\[\begin{split}\begin{array}{ll} \mbox{minimize} & \frac{1}{2} x^T P x + q^T x \\ \mbox{subject to} & l \leq A x \leq u \end{array}\end{split}\]

where \(x\) is the optimization variable and \(P \in \mathbf{S}^{n}_{+}\) a positive semidefinite matrix.

Further information about the solver is available at osqp.org.

Example

Consider the following QP

\[\begin{split}\begin{array}{ll} \mbox{minimize} & \frac{1}{2} x^T \begin{bmatrix}4 & 1\\ 1 & 2 \end{bmatrix} x + \begin{bmatrix}1 \\ 1\end{bmatrix}^T x \\ \mbox{subject to} & \begin{bmatrix}1 \\ 0 \\ 0\end{bmatrix} \leq \begin{bmatrix} 1 & 1\\ 1 & 0\\ 0 & 1\end{bmatrix} x \leq \begin{bmatrix}1 \\ 0.7 \\ 0.7\end{bmatrix} \end{array}\end{split}\]
use osqp::{CscMatrix, Problem, Settings};

// Define problem data
let P = &[[4.0, 1.0],
          [1.0, 2.0]];
let q = &[1.0, 1.0];
let A = &[[1.0, 1.0],
          [1.0, 0.0],
          [0.0, 1.0]];
let l = &[1.0, 0.0, 0.0];
let u = &[1.0, 0.7, 0.7];

// Extract the upper triangular elements of `P`
let P = CscMatrix::from(P).into_upper_tri();

// Disable verbose output
let settings = Settings::default()
    .verbose(false);

// Create an OSQP problem
let mut prob = Problem::new(P, q, A, l, u, &settings).expect("failed to setup problem");

// Solve problem
let result = prob.solve();

// Print the solution
println!("{:?}", result.x().expect("failed to solve problem"));

Structs

CscMatrix

A matrix in Compressed Sparse Column format.

DualInfeasibilityCertificate

A proof of dual infeasibility.

Failure

A problem that failed to be solved.

PrimalInfeasibilityCertificate

A proof of primal infeasibility.

Problem

An instance of the OSQP solver.

Settings

The settings used when initialising a solver.

Solution

A solution to a problem.

Enums

LinsysSolver

The linear system solver for OSQP to use.

PolishStatus

The status of the polish operation.

SetupError

An error that can occur when setting up the solver.

Status

The result of solving a problem.