Crate clarabel

Source
Expand description

Clarabel.rs is a Rust implementation of an interior point numerical solver for convex optimization problems using a novel homogeneous embedding. Clarabel solves the following problem:

$$ \begin{array}{rl} \text{minimize} & \frac{1}{2}x^T P x + q^T x\\[2ex] \text{subject to} & Ax + s = b \\[1ex] & s \in \mathcal{K} \end{array} $$

with decision variables $x \in \mathbb{R}^n$, $s \in \mathbb{R}^m$ and data matrices $P=P^\top \succeq 0$, $q \in \mathbb{R}^n$, $A \in \mathbb{R}^{m \times n}$, and $b \in \mathbb{R}^m$. The convex set $\mathcal{K}$ is a composition of convex cones.

For installation, tutorials and examples see the Clarabel User’s Guide (stable | dev).

Clarabel is also available in a Julia implementation. See here.

§Features

  • Versatile: Clarabel.rs solves linear programs (LPs), quadratic programs (QPs), second-order cone programs (SOCPs) and semidefinite programs (SDPs). It also solves problems with exponential, power cone and generalized power cone constraints.

  • Quadratic objectives: Unlike interior point solvers based on the standard homogeneous self-dual embedding (HSDE), Clarabel.rs handles quadratic objectives without requiring any epigraphical reformulation of the objective. It can therefore be significantly faster than other HSDE-based solvers for problems with quadratic objective functions.

  • Infeasibility detection: Infeasible problems are detected using a homogeneous embedding technique.

§Python interface

Clarabel.rs comes with an optional Python interface. See the Python Installation Documentation.

§License

Licensed under Apache License, Version 2.0. LICENSE

Modules§

algebra
Clarabel algebra module.
qdldl
Native Rust implementation of the QDLDL solver.
solver
Clarabel solver main module.
timers
Internal timing functions and macros.

Constants§

INFINITY_DEFAULT
Constant indicating that an inequality bound is to be treated as infinite.

Functions§

buildinfo
print detailed build configuration info to stdout
default_infinity
Revert internal infinity bound to its default value. The default is INFINITY_DEFAULT
get_infinity
Get the current value of the internal infinity bound.
set_infinity
Set the internal infinity bound to a new value.