diff --git a/Project.toml b/Project.toml index ecb8f62..86aa402 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ClarabelDocs" uuid = "5bffead5-e986-4d40-a894-38d9eb53c10f" authors = ["Paul Goulart "] -version = "0.2.0" +version = "0.3.0" [deps] Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" diff --git a/docs/pages.jl b/docs/pages.jl index d3ba888..e3be0c0 100644 --- a/docs/pages.jl +++ b/docs/pages.jl @@ -38,7 +38,8 @@ pages = [ "Citing Clarabel" => "citing.md", "Contributing" => "contributing.md", "API Reference" => Any[ - "Julia API" => "api_jl.md" + "Solver Settings" => "api_settings.md", + "Julia API" => "api_jl.md", "Rust API \u29C9" => "api_rs.md" ] ] diff --git a/docs/src/_common/getting_started_constraints.md b/docs/src/_common/getting_started_constraints.md index 4d12169..69295c9 100644 --- a/docs/src/_common/getting_started_constraints.md +++ b/docs/src/_common/getting_started_constraints.md @@ -5,6 +5,9 @@ Cone Type| Description `ZeroConeT` | The set ``\{ 0 \}^{dim}`` that contains the origin `NonnegativeConeT` | The nonnegative orthant ``\{ x \in \mathbb{R}^{dim} : x_i \ge 0, \forall i=1,\dots,\mathrm{dim} \}`` `SecondOrderConeT` | The second-order (Lorenz) cone ``\{ (t,x) \in \mathbb{R}^{dim} : \|x\|_2 \leq t \}`` +`ExponentialConeT` | The exponential cone ``\{(x, y, z) : y > 0,~~ ye^{x/y} ≤ z \}`` +`PowerConeT` | The power cone ``\{(x, y, z) : x^\alpha y^{(1-\alpha)} \geq \|z\|,~ (x,y) \geq 0 \}`` with ``\alpha \in (0,1)`` + Suppose that we have a problem with decision variable ``x \in \mathbb{R}^3`` and our constraints are: diff --git a/docs/src/api_jl.md b/docs/src/api_jl.md index 05a227d..7b27b48 100644 --- a/docs/src/api_jl.md +++ b/docs/src/api_jl.md @@ -14,12 +14,6 @@ Clarabel.solve! Clarabel.SupportedCone ``` -## [Settings](@id api-settings) - -```@docs -Clarabel.Settings -``` - ## [Solver Status](@id api-solverstatus) ```@docs diff --git a/docs/src/api_settings.md b/docs/src/api_settings.md new file mode 100644 index 0000000..9c88ce5 --- /dev/null +++ b/docs/src/api_settings.md @@ -0,0 +1,25 @@ +# Clarabel Solver Settings + + +The Clarabel solver supports a variety of configuration options. The Julia, Rust and Python +and interfaces all support the same set of options with identical field names. + +!!! warning + The solver defaults are configured to give good general performance for most problems, but + assume that the problem data is of 64 bit float type. Although the Rust and Julia solvers + will accept 32 bit types instead (i.e. `Float64` in Julia or `f32` in Rust), the solver + is unlikely to perform well unless the tolerances are relaxed. + +--- + +The full set of options follows below. + + + +## [Settings](@id api-settings) + +```@docs +Clarabel.Settings +``` + + diff --git a/docs/src/index.md b/docs/src/index.md index 49f30fa..fac726b 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -14,7 +14,7 @@ Clarabel is available in either a native [Julia](https://www.julia.org) or a nat ## Features -* __Versatile__: Clarabel solves linear programs (LPs), quadratic programs (QPs), second-order cone programs (SOCPs) and semidefinite programs (SDPs). Future versions will provide support for problems involving exponential and power cones. +* __Versatile__: Clarabel solves linear programs (LPs), quadratic programs (QPs), second-order cone programs (SOCPs), and problems with exponential and power cone constraints. The Julia version also solves semidefinite programs (SDPs). * __Quadratic objectives__: Unlike interior point solvers based on the standard homogeneous self-dual embedding (HSDE) model, Clarabel handles quadratic objective without requiring any epigraphical reformulation of its objective function. It can therefore be significantly faster than other HSDE-based solvers for problems with quadratic objective functions. * __Infeasibility detection__: Infeasible problems are detected using using a homogeneous embedding technique. * __Arbitrary precision types__: You can solve problems with any floating point precision, e.g. Float32 or Julia's BigFloat type in Julia and f32 or f64 types in Rust. diff --git a/docs/src/julia/getting_started_jl.md b/docs/src/julia/getting_started_jl.md index 63c8d2a..70390c5 100644 --- a/docs/src/julia/getting_started_jl.md +++ b/docs/src/julia/getting_started_jl.md @@ -136,12 +136,17 @@ Once the solver algorithm terminates you can inspect the solution using the `sol Status Code | Description --- | :--- -UNSOLVED | Default value, only occurs prior to calling `Clarabel.solve!` -SOLVED | Solution found -PRIMAL_INFEASIBLE | Problem is primal infeasible -DUAL_INFEASIBLE | Problem is dual infeasible -MAX_ITERATIONS | Solver halted after reaching iteration limit -MAX_TIME | Solver halted after reaching time limit +SOLVED | Solver terminated with a solution. +PRIMAL_INFEASIBLE | Problem is primal infeasible. Solution returned is a certificate of primal infeasibility. +DUAL_INFEASIBLE | Problem is dual infeasible. Solution returned is a certificate of dual infeasibility. +ALMOST\_SOLVED | Solver terminated with a solution (reduced accuracy). +ALMOST\_PRIMAL\_INFEASIBLE | Problem is primal infeasible. Solution returned is a certificate of primal infeasibility (reduced accuracy). +ALMOST\_DUAL\_INFEASIBLE | Problem is dual infeasible. Solution returned is a certificate of dual infeasibility (reduced accuracy). +MAX\_ITERATIONS | Iteration limit reached before solution or infeasibility certificate found. +MAX\_TIME | Time limit reached before solution or infeasibility certificate found. +NUMERICAL\_ERROR | Solver terminated with a numerical error. +INSUFFICIENT\_PROGRESS | Solver terminated due to lack of progress. + The total solution time (include combined `setup!` and `solve!` times) is given in `solution.solve_time`. Detailed information about the solve time and memory allocation can be found in the solver's `timer` field.