From a801f5f9c7ec8f79491f1311d8c0595b47b8d804 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Mon, 19 Feb 2024 14:55:37 +0000 Subject: [PATCH] build based on 8a3cce9 --- dev/.documenter-siteinfo.json | 2 +- dev/index.html | 2 +- dev/manual/IPM/HSD/index.html | 2 +- dev/manual/IPM/MPC/index.html | 2 +- dev/manual/formulation/index.html | 2 +- dev/manual/options/index.html | 2 +- dev/reference/API/index.html | 2 +- dev/reference/KKT/kkt/index.html | 12 ++++++------ dev/reference/KKT/tlp_cholmod/index.html | 4 ++-- dev/reference/KKT/tlp_dense/index.html | 2 +- dev/reference/KKT/tlp_krylov/index.html | 2 +- dev/reference/KKT/tlp_ldlfact/index.html | 4 ++-- dev/reference/Presolve/presolve/index.html | 2 +- dev/reference/attributes/index.html | 20 ++++++++++---------- dev/reference/options/index.html | 2 +- dev/search_index.js | 2 +- dev/tutorials/lp_example/index.html | 2 +- 17 files changed, 33 insertions(+), 33 deletions(-) diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index b8962ff6..1079d3bc 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.9.4","generation_timestamp":"2023-12-11T18:34:47","documenter_version":"1.2.1"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.1","generation_timestamp":"2024-02-19T14:55:33","documenter_version":"1.2.1"}} \ No newline at end of file diff --git a/dev/index.html b/dev/index.html index c25b12ef..5854544f 100644 --- a/dev/index.html +++ b/dev/index.html @@ -7,4 +7,4 @@ Journal = {Les Cahiers du Gerad}, Author = {Anjos, Miguel F. and Lodi, Andrea and Tanneau, Mathieu}, year = {2019} -} +} diff --git a/dev/manual/IPM/HSD/index.html b/dev/manual/IPM/HSD/index.html index b521a2e4..dad3888e 100644 --- a/dev/manual/IPM/HSD/index.html +++ b/dev/manual/IPM/HSD/index.html @@ -1,2 +1,2 @@ -Homogeneous Self-Dual · Tulip.jl
+Homogeneous Self-Dual · Tulip.jl
diff --git a/dev/manual/IPM/MPC/index.html b/dev/manual/IPM/MPC/index.html index b25cb57e..c8e7e8d7 100644 --- a/dev/manual/IPM/MPC/index.html +++ b/dev/manual/IPM/MPC/index.html @@ -1,2 +1,2 @@ -Predictor-Corrector · Tulip.jl
+Predictor-Corrector · Tulip.jl
diff --git a/dev/manual/formulation/index.html b/dev/manual/formulation/index.html index 2576d5a3..f5acdc4a 100644 --- a/dev/manual/formulation/index.html +++ b/dev/manual/formulation/index.html @@ -12,4 +12,4 @@ s.t. & A x = b\\ & l \leq x \leq u\\ - \end{array}\]

where $x, c \in \mathbb{R}^{n}$, $A \in \mathbb{R}^{m \times n}$, $b \in \mathbb{R}^{m}$, and $l, u \in (\mathbb{R} \cup \{-\infty, +\infty \})^{n}$, i.e., some bounds may be infinite.

The original problem is automatically reformulated into standard form before the optimization is performed. This transformation is transparent to the user.

+ \end{array}\]

where $x, c \in \mathbb{R}^{n}$, $A \in \mathbb{R}^{m \times n}$, $b \in \mathbb{R}^{m}$, and $l, u \in (\mathbb{R} \cup \{-\infty, +\infty \})^{n}$, i.e., some bounds may be infinite.

The original problem is automatically reformulated into standard form before the optimization is performed. This transformation is transparent to the user.

diff --git a/dev/manual/options/index.html b/dev/manual/options/index.html index b6b468f3..16802b81 100644 --- a/dev/manual/options/index.html +++ b/dev/manual/options/index.html @@ -1,2 +1,2 @@ -Setting options · Tulip.jl
+Setting options · Tulip.jl
diff --git a/dev/reference/API/index.html b/dev/reference/API/index.html index 19ecf8f7..2ae7fb87 100644 --- a/dev/reference/API/index.html +++ b/dev/reference/API/index.html @@ -1,2 +1,2 @@ -Julia API · Tulip.jl
Tulip.get_attributeMethod
get_attribute(model::Model, ::BarrierIterations)

Query the BarrierIterations attribute from model

source
Tulip.get_attributeMethod
get_attribute(m::Model, ::ConstraintName, i::Int)

Query the name of constraint i in model m

source
Tulip.get_attributeMethod
get_attribute(m::Model{T}, ::VariableLowerBound, j::Int)

Query the lower bound of variable j in model m.

source
Tulip.get_attributeMethod
get_attribute(model::Model, ::DualObjectiveValue)

Query the DualObjectiveValue attribute from model

source
Tulip.get_attributeMethod
get_attribute(model::Model, ::ObjectiveValue)

Query the ObjectiveValue attribute from model

source
Tulip.load_problem!Method
load_problem!(m::Model{T}, fname::String)

Read a model from file fname and load it into model m.

Only free MPS files are currently supported.

source
Tulip.set_attributeMethod
set_attribute(m::Model, ::ConstraintName, i::Int, name::String)

Set the name of constraint i in model m to name.

source
Tulip.set_attributeMethod
set_attribute(model::Model, ::ModelName, name::String)

Set the ModelName attribute in model

source
Tulip.set_attributeMethod
set_attribute(m::Model, ::VariableName, j::Int, name::String)

Set the name of variable j in model m to name.

source
Tulip.set_attributeMethod
set_attribute(m::Model{T}, ::ConstraintLowerBound, i::Int, lb::T)

Set the lower bound of constraint i in model m to lb.

source
Tulip.set_attributeMethod
set_attribute(m::Model{T}, ::ConstraintUpperBound, i::Int, ub::T)

Set the upper bound of constraint i in model m to ub.

source
Tulip.set_attributeMethod
set_attribute(m::Model{T}, ::VariableLowerBound, j::Int, lb::T)

Set the lower bound of variable j in model m to lb.

source
Tulip.set_attributeMethod
set_attribute(m::Model{T}, ::VariableUpperBound, j::Int, ub::T)

Set the upper bound of variable j in model m to ub.

source
Tulip.set_parameterMethod
set_parameter(m::Model, pname::String, val)

Set the value of parameter pname in model m to val

source
+Julia API · Tulip.jl
Tulip.get_attributeMethod
get_attribute(model::Model, ::BarrierIterations)

Query the BarrierIterations attribute from model

source
Tulip.get_attributeMethod
get_attribute(m::Model, ::ConstraintName, i::Int)

Query the name of constraint i in model m

source
Tulip.get_attributeMethod
get_attribute(m::Model{T}, ::VariableLowerBound, j::Int)

Query the lower bound of variable j in model m.

source
Tulip.get_attributeMethod
get_attribute(model::Model, ::DualObjectiveValue)

Query the DualObjectiveValue attribute from model

source
Tulip.get_attributeMethod
get_attribute(model::Model, ::ObjectiveValue)

Query the ObjectiveValue attribute from model

source
Tulip.load_problem!Method
load_problem!(m::Model{T}, fname::String)

Read a model from file fname and load it into model m.

Only free MPS files are currently supported.

source
Tulip.set_attributeMethod
set_attribute(m::Model, ::ConstraintName, i::Int, name::String)

Set the name of constraint i in model m to name.

source
Tulip.set_attributeMethod
set_attribute(model::Model, ::ModelName, name::String)

Set the ModelName attribute in model

source
Tulip.set_attributeMethod
set_attribute(m::Model, ::VariableName, j::Int, name::String)

Set the name of variable j in model m to name.

source
Tulip.set_attributeMethod
set_attribute(m::Model{T}, ::ConstraintLowerBound, i::Int, lb::T)

Set the lower bound of constraint i in model m to lb.

source
Tulip.set_attributeMethod
set_attribute(m::Model{T}, ::ConstraintUpperBound, i::Int, ub::T)

Set the upper bound of constraint i in model m to ub.

source
Tulip.set_attributeMethod
set_attribute(m::Model{T}, ::VariableLowerBound, j::Int, lb::T)

Set the lower bound of variable j in model m to lb.

source
Tulip.set_attributeMethod
set_attribute(m::Model{T}, ::VariableUpperBound, j::Int, ub::T)

Set the upper bound of variable j in model m to ub.

source
Tulip.set_parameterMethod
set_parameter(m::Model, pname::String, val)

Set the value of parameter pname in model m to val

source
diff --git a/dev/reference/KKT/kkt/index.html b/dev/reference/KKT/kkt/index.html index 5094d61e..f7733e3e 100644 --- a/dev/reference/KKT/kkt/index.html +++ b/dev/reference/KKT/kkt/index.html @@ -1,5 +1,5 @@ -Overview · Tulip.jl

Overview

The KKT module provides a modular, customizable interface for developing and selecting various approaches to solve the KKT systems.

KKT backends

KKT systems

All formulations below refer to a linear program in primal-dual standard form

\[ \begin{array}{rl} +Overview · Tulip.jl

Overview

The KKT module provides a modular, customizable interface for developing and selecting various approaches to solve the KKT systems.

KKT backends

KKT systems

All formulations below refer to a linear program in primal-dual standard form

\[ \begin{array}{rl} (P) \ \ \ \displaystyle \min_{x} & c^{\top} x\\ @@ -15,7 +15,7 @@ s.t. & A^{\top}y + z^{l} - z^{u} = c\\ & z^{l}, z^{u} \geq 0 - \end{array}\]

Tulip.KKT.K2Type
K2 <: AbstractKKTSystem

Augmented system

\[ \begin{bmatrix} + \end{array}\]

Tulip.KKT.K2Type
K2 <: AbstractKKTSystem

Augmented system

\[ \begin{bmatrix} -(\Theta^{-1} + R_{p}) & A^{\top}\\ A & R_{d} \end{bmatrix} @@ -27,7 +27,7 @@ \begin{bmatrix} \xi_d\\ \xi_p - \end{bmatrix}\]

where

  • $\Theta^{-1} = X^{-l}Z^{l} + X^{-u} Z^{u}$
  • $R_{p}, R_{d}$ are current primal and dual regularizations
  • $\xi_{d}, \xi_{p}$ are given right-hand sides
source
Tulip.KKT.K1Type
K1 <: AbstractKKTSystem

Normal equations system

\[ \begin{array}{rl} + \end{bmatrix}\]

where

  • $\Theta^{-1} = X^{-l}Z^{l} + X^{-u} Z^{u}$
  • $R_{p}, R_{d}$ are current primal and dual regularizations
  • $\xi_{d}, \xi_{p}$ are given right-hand sides
source
Tulip.KKT.K1Type
K1 <: AbstractKKTSystem

Normal equations system

\[ \begin{array}{rl} \left( A (\Theta^{-1} + R_{p})^{-1} A^{\top} + R_{d} \right) @@ -35,6 +35,6 @@ & = \xi_{p} + A (Θ^{-1} + R_{p})^{-1} \xi_{d}\\ \Delta x &= (Θ^{-1} + R_{p})^{-1} (A^{\top} \Delta y - \xi_{d}) - \end{array}\]

where

  • $\Theta^{-1} = X^{-l}Z^{l} + X^{-u} Z^{u}$
  • $R_{p}, R_{d}$ are current primal and dual regularizations
  • $\xi_{d}, \xi_{p}$ are the augmented system's right-hand side
source

KKT solvers

Custom linear solvers should (preferably) inherit from the AbstractKKTSolver class, and extend the following functions:

Tulip.KKT.update!Function
update!(kkt, θinv, regP, regD)

Update internal data and factorization/pre-conditioner.

After this call, kkt can be used to solve the augmented system

    [-(Θ⁻¹ + Rp)   Aᵀ] [dx] = [ξd]
-    [   A          Rd] [dy]   [ξp]

for given right-hand sides ξd and ξp.

Arguments

  • kkt::AbstractKKTSolver{T}: the KKT solver object
  • θinv::AbstractVector{T}: $θ⁻¹$
  • regP::AbstractVector{T}: primal regularizations
  • regD::AbstractVector{T}: dual regularizations
source
Tulip.KKT.solve!Function
solve!(dx, dy, kkt, ξp, ξd)

Solve the symmetric quasi-definite augmented system

    [-(Θ⁻¹ + Rp)   Aᵀ] [dx] = [ξd]
-    [   A          Rd] [dy]   [ξp]

and over-write dx, dy with the result.

Arguments

  • dx, dy: Vectors of unknowns, modified in-place
  • kkt: Linear solver for the augmented system
  • ξp, ξd: Right-hand-side vectors
source
+ \end{array}\]

where

  • $\Theta^{-1} = X^{-l}Z^{l} + X^{-u} Z^{u}$
  • $R_{p}, R_{d}$ are current primal and dual regularizations
  • $\xi_{d}, \xi_{p}$ are the augmented system's right-hand side
source

KKT solvers

Custom linear solvers should (preferably) inherit from the AbstractKKTSolver class, and extend the following functions:

Tulip.KKT.update!Function
update!(kkt, θinv, regP, regD)

Update internal data and factorization/pre-conditioner.

After this call, kkt can be used to solve the augmented system

    [-(Θ⁻¹ + Rp)   Aᵀ] [dx] = [ξd]
+    [   A          Rd] [dy]   [ξp]

for given right-hand sides ξd and ξp.

Arguments

  • kkt::AbstractKKTSolver{T}: the KKT solver object
  • θinv::AbstractVector{T}: $θ⁻¹$
  • regP::AbstractVector{T}: primal regularizations
  • regD::AbstractVector{T}: dual regularizations
source
Tulip.KKT.solve!Function
solve!(dx, dy, kkt, ξp, ξd)

Solve the symmetric quasi-definite augmented system

    [-(Θ⁻¹ + Rp)   Aᵀ] [dx] = [ξd]
+    [   A          Rd] [dy]   [ξp]

and over-write dx, dy with the result.

Arguments

  • dx, dy: Vectors of unknowns, modified in-place
  • kkt: Linear solver for the augmented system
  • ξp, ξd: Right-hand-side vectors
source
diff --git a/dev/reference/KKT/tlp_cholmod/index.html b/dev/reference/KKT/tlp_cholmod/index.html index 22df7f6d..36962476 100644 --- a/dev/reference/KKT/tlp_cholmod/index.html +++ b/dev/reference/KKT/tlp_cholmod/index.html @@ -1,4 +1,4 @@ -TlpCholmod · Tulip.jl

TlpCholmod

Tulip.KKT.TlpCholmod.CholmodSolverType
CholmodSolver{T,S<:AbstractKKTSystem}

CHOLMOD-based KKT solver.

Supported arithmetics

  • Float64

Supported systems

  • K2 via $LDLᵀ$ factorization
  • K1 via Cholesky ($LLᵀ$) factorization

Examples

  • To solve the augmented system with CHOLMOD's $LDL^{T}$ factorization:
set_parameter(tlp_model, "KKT_Backend", Tulip.KKT.TlpCholmod.Backend())
+TlpCholmod · Tulip.jl

TlpCholmod

Tulip.KKT.TlpCholmod.CholmodSolverType
CholmodSolver{T,S<:AbstractKKTSystem}

CHOLMOD-based KKT solver.

Supported arithmetics

  • Float64

Supported systems

  • K2 via $LDLᵀ$ factorization
  • K1 via Cholesky ($LLᵀ$) factorization

Examples

  • To solve the augmented system with CHOLMOD's $LDL^{T}$ factorization:
set_parameter(tlp_model, "KKT_Backend", Tulip.KKT.TlpCholmod.Backend())
 set_parameter(tlp_model, "KKT_System", Tulip.KKT.K2())
  • To solve the normal equations system with CHOLMOD's Cholesky factorization:
set_parameter(tlp_model, "KKT_Backend", Tulip.KKT.TlpCholmod.Backend())
-set_parameter(tlp_model, "KKT_System", Tulip.KKT.K1())
source
+set_parameter(tlp_model, "KKT_System", Tulip.KKT.K1())
source
diff --git a/dev/reference/KKT/tlp_dense/index.html b/dev/reference/KKT/tlp_dense/index.html index e1e7e72b..e170a899 100644 --- a/dev/reference/KKT/tlp_dense/index.html +++ b/dev/reference/KKT/tlp_dense/index.html @@ -1,2 +1,2 @@ -TlpDense · Tulip.jl
+TlpDense · Tulip.jl
diff --git a/dev/reference/KKT/tlp_krylov/index.html b/dev/reference/KKT/tlp_krylov/index.html index f2c16fc7..1aea33ad 100644 --- a/dev/reference/KKT/tlp_krylov/index.html +++ b/dev/reference/KKT/tlp_krylov/index.html @@ -1,2 +1,2 @@ -TlpKrylov · Tulip.jl

TlpKrylov

Warning

Iterative methods are still an experimental feature. Some numerical and performance issues should be expected.

Tulip.KKT.TlpKrylov.BackendType
Backend{KS<:Krylov.KrylovSolver,V<:AbstractVector}

Krylov.jl-based backend for solving linear systems.

The type is parametrized by:

  • KS<:Krylov.KrylovSolver: workspace type for the Krylov method. Also defines the Krylov method to be used.
  • V<:AbstractVector: the vector storage type used within the Krylov method. This should be set to Vector{T} (for arithmetic T) unless, e.g., one uses a GPU.

See the Krylov.jl documentation for further details.

Example usage

All the following examples assume everything runs on a CPU in Float64 arithmetic.

  • To use the conjugate gradient:
backend = KKT.TlpKrylov.Backend(Krylov.CgSolver, Vector{Float64})
  • To use MINRES:
backend = KKT.TlpKrylov.Backend(Krylov.MinresSolver, Vector{Float64})
source
+TlpKrylov · Tulip.jl

TlpKrylov

Warning

Iterative methods are still an experimental feature. Some numerical and performance issues should be expected.

Tulip.KKT.TlpKrylov.BackendType
Backend{KS<:Krylov.KrylovSolver,V<:AbstractVector}

Krylov.jl-based backend for solving linear systems.

The type is parametrized by:

  • KS<:Krylov.KrylovSolver: workspace type for the Krylov method. Also defines the Krylov method to be used.
  • V<:AbstractVector: the vector storage type used within the Krylov method. This should be set to Vector{T} (for arithmetic T) unless, e.g., one uses a GPU.

See the Krylov.jl documentation for further details.

Example usage

All the following examples assume everything runs on a CPU in Float64 arithmetic.

  • To use the conjugate gradient:
backend = KKT.TlpKrylov.Backend(Krylov.CgSolver, Vector{Float64})
  • To use MINRES:
backend = KKT.TlpKrylov.Backend(Krylov.MinresSolver, Vector{Float64})
source
diff --git a/dev/reference/KKT/tlp_ldlfact/index.html b/dev/reference/KKT/tlp_ldlfact/index.html index dff90d18..976a4f89 100644 --- a/dev/reference/KKT/tlp_ldlfact/index.html +++ b/dev/reference/KKT/tlp_ldlfact/index.html @@ -1,3 +1,3 @@ -TlpLDLFactorizations · Tulip.jl

TlpLDLFactorizations

Tulip.KKT.TlpLDLFactorizations.LDLFactSolverType
LDLFactSolver{T,S<:AbstractKKTSystem}

LDLFactorizations.jl-based KKT solver.

Supported arithmetics

  • All arithmetics are supported

Supported systems

  • K2 via $LDLᵀ$ factorization

Examples

To solve the augmented system with LDLFactorizations' $LDL^{T}$ factorization:

set_parameter(tlp_model, "KKT_Backend", Tulip.KKT.TlpLDLFact.Backend())
-set_parameter(tlp_model, "KKT_System", Tulip.KKT.K2())
source
+TlpLDLFactorizations · Tulip.jl

TlpLDLFactorizations

Tulip.KKT.TlpLDLFactorizations.LDLFactSolverType
LDLFactSolver{T,S<:AbstractKKTSystem}

LDLFactorizations.jl-based KKT solver.

Supported arithmetics

  • All arithmetics are supported

Supported systems

  • K2 via $LDLᵀ$ factorization

Examples

To solve the augmented system with LDLFactorizations' $LDL^{T}$ factorization:

set_parameter(tlp_model, "KKT_Backend", Tulip.KKT.TlpLDLFact.Backend())
+set_parameter(tlp_model, "KKT_System", Tulip.KKT.K2())
source
diff --git a/dev/reference/Presolve/presolve/index.html b/dev/reference/Presolve/presolve/index.html index 2ca64a6d..215f0050 100644 --- a/dev/reference/Presolve/presolve/index.html +++ b/dev/reference/Presolve/presolve/index.html @@ -1,2 +1,2 @@ -Presolve · Tulip.jl
+Presolve · Tulip.jl
diff --git a/dev/reference/attributes/index.html b/dev/reference/attributes/index.html index 31c504eb..483c140d 100644 --- a/dev/reference/attributes/index.html +++ b/dev/reference/attributes/index.html @@ -1,11 +1,11 @@ -Attributes · Tulip.jl

Attribute reference

Attributes are queried using get_attribute and set using set_attribute.

Model attributes

NameTypeDescription
ModelNameStringName of the model
NumberOfConstraintsIntNumber of constraints in the model
NumberOfVariablesIntNumber of variables in the model
ObjectiveValueTObjective value of the current primal solution
DualObjectiveValueTObjective value of the current dual solution
ObjectiveConstantTValue of the objective constant
ObjectiveSenseOptimization sense
StatusModel status
BarrierIterationsIntNumber of barrier iterations
SolutionTimeFloat64Solution time, in seconds

Variable attributes

NameTypeDescription
VariableLowerBoundTVariable lower bound
VariableUpperBoundTVariable upper bound
VariableObjectiveCoeffTVariable objective coefficient
VariableNameStringVariable name

Constraint attributes

NameTypeDescription
ConstraintLowerBoundTConstraint lower bound
ConstraintUpperBoundTConstraint upper bound
ConstraintNameStringConstraint name

Reference

Model attributes

Tulip.BarrierIterationsType
BarrierIterations

Number of iterations of the barrier algorithm in the last call.

This number may be zero in the following cases:

  • the model has been solved yet
  • presolve solved the model
  • the initial solution was optimal

Type: Int

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.BarrierIterations())
source
Tulip.DualObjectiveValueType
DualObjectiveValue

Objective value of the current dual solution.

Type: T

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.DualObjectiveValue())
source
Tulip.ModelNameType
ModelName

The name of the model.

Type: String

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.ModelName(), "lp_example")
-Tulip.get_attribute(model, Tulip.ModelName())
source
Tulip.NumberOfConstraintsType
NumberOfConstraints

Number of constraints in the model.

Type: Int

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.NumberOfConstraints())
source
Tulip.NumberOfVariablesType
NumberOfVariables

Number of variables in the model.

Type: Int

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.NumberOfVariables())
source
Tulip.ObjectiveConstantType
ObjectiveConstant

Constant objective offset, defaults to zero.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.ObjectiveConstant(), zero(T))
-Tulip.get_attribute(model, Tulip.ObjectiveConstant())
source
Tulip.ObjectiveValueType
ObjectiveValue

Objective value of the current primal solution.

Type: T

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.ObjectiveValue())
source
Tulip.SolutionTimeType
SolutionTime

Total solution time, in seconds.

Type: Float64

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.SolutionTime())
source
Tulip.StatusType
Status

Model status

Type:

Modifiable: No

Examples

Tulip.get(model, Tulip.Status())
source

Variable attributes

Tulip.VariableLowerBoundType
VariableLowerBound

Variable lower bound.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.VariableLowerBound(), 1, zero(T))
-Tulip.get_attribute(model, Tulip.VariableLowerBound(), 1)
source
Tulip.VariableNameType
VariableName

Name of the variable.

Type: String

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.VariableName(), 1, "x1")
-Tulip.get_attribute(model, Tulip.VariableName(), 1)
source
Tulip.VariableObjectiveCoeffType
VariableObjectiveCoeff

Objective coefficient of the variable.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.VariableObjectiveCoeff(), 1, one(T))
-Tulip.get_attribute(model, Tulip.VariableObjectiveCoeff(), 1)
source
Tulip.VariableUpperBoundType
VariableUpperBound

Variable upper bound.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.VariableUpperBound(), 1, one(T))
-Tulip.get_attribute(model, Tulip.VariableUpperBound(), 1)
source

Constraint attributes

Tulip.ConstraintLowerBoundType
ConstraintLowerBound

Constraint lower bound.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.ConstraintLowerBound(), 1, zero(T))
-Tulip.get_attribute(model, Tulip.ConstraintLowerBound(), 1)
source
Tulip.ConstraintNameType
ConstraintName

Name of the constraint.

Type: String

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.ConstraintName(), 1, "c1")
-Tulip.get_attribute(model, Tulip.ConstraintName(), 1)
source
Tulip.ConstraintUpperBoundType
ConstraintUpperBound

Constraint upper bound.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.ConstraintUpperBound(), 1, one(T))
-Tulip.get_attribute(model, Tulip.ConstraintUpperBound(), 1)
source
+Attributes · Tulip.jl

Attribute reference

Attributes are queried using get_attribute and set using set_attribute.

Model attributes

NameTypeDescription
ModelNameStringName of the model
NumberOfConstraintsIntNumber of constraints in the model
NumberOfVariablesIntNumber of variables in the model
ObjectiveValueTObjective value of the current primal solution
DualObjectiveValueTObjective value of the current dual solution
ObjectiveConstantTValue of the objective constant
ObjectiveSenseOptimization sense
StatusModel status
BarrierIterationsIntNumber of barrier iterations
SolutionTimeFloat64Solution time, in seconds

Variable attributes

NameTypeDescription
VariableLowerBoundTVariable lower bound
VariableUpperBoundTVariable upper bound
VariableObjectiveCoeffTVariable objective coefficient
VariableNameStringVariable name

Constraint attributes

NameTypeDescription
ConstraintLowerBoundTConstraint lower bound
ConstraintUpperBoundTConstraint upper bound
ConstraintNameStringConstraint name

Reference

Model attributes

Tulip.BarrierIterationsType
BarrierIterations

Number of iterations of the barrier algorithm in the last call.

This number may be zero in the following cases:

  • the model has been solved yet
  • presolve solved the model
  • the initial solution was optimal

Type: Int

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.BarrierIterations())
source
Tulip.DualObjectiveValueType
DualObjectiveValue

Objective value of the current dual solution.

Type: T

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.DualObjectiveValue())
source
Tulip.ModelNameType
ModelName

The name of the model.

Type: String

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.ModelName(), "lp_example")
+Tulip.get_attribute(model, Tulip.ModelName())
source
Tulip.NumberOfConstraintsType
NumberOfConstraints

Number of constraints in the model.

Type: Int

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.NumberOfConstraints())
source
Tulip.NumberOfVariablesType
NumberOfVariables

Number of variables in the model.

Type: Int

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.NumberOfVariables())
source
Tulip.ObjectiveConstantType
ObjectiveConstant

Constant objective offset, defaults to zero.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.ObjectiveConstant(), zero(T))
+Tulip.get_attribute(model, Tulip.ObjectiveConstant())
source
Tulip.ObjectiveValueType
ObjectiveValue

Objective value of the current primal solution.

Type: T

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.ObjectiveValue())
source
Tulip.SolutionTimeType
SolutionTime

Total solution time, in seconds.

Type: Float64

Modifiable: No

Examples

Tulip.get_attribute(model, Tulip.SolutionTime())
source
Tulip.StatusType
Status

Model status

Type:

Modifiable: No

Examples

Tulip.get(model, Tulip.Status())
source

Variable attributes

Tulip.VariableLowerBoundType
VariableLowerBound

Variable lower bound.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.VariableLowerBound(), 1, zero(T))
+Tulip.get_attribute(model, Tulip.VariableLowerBound(), 1)
source
Tulip.VariableNameType
VariableName

Name of the variable.

Type: String

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.VariableName(), 1, "x1")
+Tulip.get_attribute(model, Tulip.VariableName(), 1)
source
Tulip.VariableObjectiveCoeffType
VariableObjectiveCoeff

Objective coefficient of the variable.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.VariableObjectiveCoeff(), 1, one(T))
+Tulip.get_attribute(model, Tulip.VariableObjectiveCoeff(), 1)
source
Tulip.VariableUpperBoundType
VariableUpperBound

Variable upper bound.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.VariableUpperBound(), 1, one(T))
+Tulip.get_attribute(model, Tulip.VariableUpperBound(), 1)
source

Constraint attributes

Tulip.ConstraintLowerBoundType
ConstraintLowerBound

Constraint lower bound.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.ConstraintLowerBound(), 1, zero(T))
+Tulip.get_attribute(model, Tulip.ConstraintLowerBound(), 1)
source
Tulip.ConstraintNameType
ConstraintName

Name of the constraint.

Type: String

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.ConstraintName(), 1, "c1")
+Tulip.get_attribute(model, Tulip.ConstraintName(), 1)
source
Tulip.ConstraintUpperBoundType
ConstraintUpperBound

Constraint upper bound.

Type: T

Modifiable: Yes

Examples

Tulip.set_attribute(model, Tulip.ConstraintUpperBound(), 1, one(T))
+Tulip.get_attribute(model, Tulip.ConstraintUpperBound(), 1)
source
diff --git a/dev/reference/options/index.html b/dev/reference/options/index.html index 49e2dae4..66251183 100644 --- a/dev/reference/options/index.html +++ b/dev/reference/options/index.html @@ -1,2 +1,2 @@ -Options · Tulip.jl

Options reference

Parameters can be queried and set through the get_parameter and set_parameter functions.

In all that follows, $\epsilon$ refers to the numerical precision, which is given by eps(Tv) where Tv is the arithmetic of the current model. For instance, in double-precision arithmetic, i.e., Tv=Float64, we have $\epsilon \simeq 10^{-16}$.

Tulip.FactoryType
Factory{T}

Factory-like struct for passing options to lower-level components.

source

IPM

Tolerances

Numerical tolerances for the interior-point algorithm.

ParameterDescriptionDefault
TolerancePFeasPrimal feasibility tolerance$\sqrt{\epsilon}$
ToleranceDFeasDual feasibility tolerance$\sqrt{\epsilon}$
ToleranceRGapRelative optimality gap tolerance$\sqrt{\epsilon}$
ToleranceIFeasInfeasibility tolerance$\sqrt{\epsilon}$

Algorithmic parameters

ParameterDescriptionDefault
BarrierAlgorithmInterior-point algorithm1
CorrectionLimitMaximum number of additional centrality corrections5
StepDampFactorStep0.9995
GammaMinMinimum value of $\gamma$ for computing correctors0.1
CentralityOutlierThresholdRelative threshold for computing extra centrality corrections0.1
PRegMinMinimum value of primal regularization$\sqrt{\epsilon}$
DRegMinMinimum value of dual regularization$\sqrt{\epsilon}$

Stopping criterion

ParameterDescriptionDefault
IterationsLimitMaximum number of barrier iterations100
TimeLimitTime limit, in secondsInf

KKT

ParameterDescriptionDefault
BackendSee KKT backendsKKT.DefaultKKTBackend
SystemSee KKT systemsKKT.DefaultKKTSystem

Linear Algebra

These parameters control the linear algebra implementation

ParameterDescriptionDefault
MatrixFactorySee FactoryFactory(SparseMatrixCSC)

Presolve

These parameters control the execution of the presolve phase. They should be called as "Presolve_<Param>".

Others

ParameterDescriptionDefault
OutputLevelControls the solver's output0
ThreadsMaximum number of threads1
PresolvePresolve (no presolve if set to ≤ 0)1
+Options · Tulip.jl

Options reference

Parameters can be queried and set through the get_parameter and set_parameter functions.

In all that follows, $\epsilon$ refers to the numerical precision, which is given by eps(Tv) where Tv is the arithmetic of the current model. For instance, in double-precision arithmetic, i.e., Tv=Float64, we have $\epsilon \simeq 10^{-16}$.

Tulip.FactoryType
Factory{T}

Factory-like struct for passing options to lower-level components.

source

IPM

Tolerances

Numerical tolerances for the interior-point algorithm.

ParameterDescriptionDefault
TolerancePFeasPrimal feasibility tolerance$\sqrt{\epsilon}$
ToleranceDFeasDual feasibility tolerance$\sqrt{\epsilon}$
ToleranceRGapRelative optimality gap tolerance$\sqrt{\epsilon}$
ToleranceIFeasInfeasibility tolerance$\sqrt{\epsilon}$

Algorithmic parameters

ParameterDescriptionDefault
BarrierAlgorithmInterior-point algorithm1
CorrectionLimitMaximum number of additional centrality corrections5
StepDampFactorStep0.9995
GammaMinMinimum value of $\gamma$ for computing correctors0.1
CentralityOutlierThresholdRelative threshold for computing extra centrality corrections0.1
PRegMinMinimum value of primal regularization$\sqrt{\epsilon}$
DRegMinMinimum value of dual regularization$\sqrt{\epsilon}$

Stopping criterion

ParameterDescriptionDefault
IterationsLimitMaximum number of barrier iterations100
TimeLimitTime limit, in secondsInf

KKT

ParameterDescriptionDefault
BackendSee KKT backendsKKT.DefaultKKTBackend
SystemSee KKT systemsKKT.DefaultKKTSystem

Linear Algebra

These parameters control the linear algebra implementation

ParameterDescriptionDefault
MatrixFactorySee FactoryFactory(SparseMatrixCSC)

Presolve

These parameters control the execution of the presolve phase. They should be called as "Presolve_<Param>".

Others

ParameterDescriptionDefault
OutputLevelControls the solver's output0
ThreadsMaximum number of threads1
PresolvePresolve (no presolve if set to ≤ 0)1
diff --git a/dev/search_index.js b/dev/search_index.js index c1060498..de711feb 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"CurrentModule = Tulip.KKT","category":"page"},{"location":"reference/KKT/kkt/#Overview","page":"Overview","title":"Overview","text":"","category":"section"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"The KKT module provides a modular, customizable interface for developing and selecting various approaches to solve the KKT systems.","category":"page"},{"location":"reference/KKT/kkt/#KKT-backends","page":"Overview","title":"KKT backends","text":"","category":"section"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"AbstractKKTBackend","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.AbstractKKTBackend","page":"Overview","title":"Tulip.KKT.AbstractKKTBackend","text":"AbstractKKTBackend\n\nAbstract type for KKT backend, i.e., the actual linear solver.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"DefaultKKTBackend","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.DefaultKKTBackend","page":"Overview","title":"Tulip.KKT.DefaultKKTBackend","text":"DefaultKKTBackend\n\nDefault setting for KKT backend.\n\nCurrently defaults to TlpCholmod.Backend for Float64 arithmetic, and TlpLDLFact.Backend otherwise.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/#KKT-systems","page":"Overview","title":"KKT systems","text":"","category":"section"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"All formulations below refer to a linear program in primal-dual standard form","category":"page"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":" beginarrayrl\n (P) \n displaystyle min_x\n c^top x\n st\n A x = b\n l leq x leq u\n endarray\n quad quad quad\n beginarrayrl\n (D) \n displaystyle max_y z\n b^top y + l^topz^l - u^topz^u\n st\n A^topy + z^l - z^u = c\n z^l z^u geq 0\n endarray","category":"page"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"AbstractKKTSystem","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.AbstractKKTSystem","page":"Overview","title":"Tulip.KKT.AbstractKKTSystem","text":"AbstractKKTSystem\n\nAbstract type for KKT systems\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"DefaultKKTSystem","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.DefaultKKTSystem","page":"Overview","title":"Tulip.KKT.DefaultKKTSystem","text":"DefaultKKTSystem\n\nDefault KKT system setting. Currently equivalent to K2\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"K2","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.K2","page":"Overview","title":"Tulip.KKT.K2","text":"K2 <: AbstractKKTSystem\n\nAugmented system\n\n beginbmatrix\n -(Theta^-1 + R_p) A^top\n A R_d\n endbmatrix\n beginbmatrix\n Delta x\n Delta y\n endbmatrix\n =\n beginbmatrix\n xi_d\n xi_p\n endbmatrix\n\nwhere\n\nTheta^-1 = X^-lZ^l + X^-u Z^u\nR_p R_d are current primal and dual regularizations\nxi_d xi_p are given right-hand sides\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"K1","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.K1","page":"Overview","title":"Tulip.KKT.K1","text":"K1 <: AbstractKKTSystem\n\nNormal equations system\n\n beginarrayrl\n left(\n A (Theta^-1 + R_p)^-1 A^top + R_d\n right)\n Delta y\n =\n xi_p + A (Θ^-1 + R_p)^-1 xi_d\n Delta x = (Θ^-1 + R_p)^-1 (A^top Delta y - xi_d)\n endarray\n\nwhere\n\nTheta^-1 = X^-lZ^l + X^-u Z^u\nR_p R_d are current primal and dual regularizations\nxi_d xi_p are the augmented system's right-hand side\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/#KKT-solvers","page":"Overview","title":"KKT solvers","text":"","category":"section"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"AbstractKKTSolver","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.AbstractKKTSolver","page":"Overview","title":"Tulip.KKT.AbstractKKTSolver","text":"AbstractKKTSolver{T}\n\nAbstract container for solving KKT systems in arithmetic T.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"Custom linear solvers should (preferably) inherit from the AbstractKKTSolver class, and extend the following functions:","category":"page"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"setup","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.setup","page":"Overview","title":"Tulip.KKT.setup","text":"setup(A, system, backend; kwargs...)\n\nInstantiate a KKT solver object.\n\n\n\n\n\n","category":"function"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"update!","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.update!","page":"Overview","title":"Tulip.KKT.update!","text":"update!(kkt, θinv, regP, regD)\n\nUpdate internal data and factorization/pre-conditioner.\n\nAfter this call, kkt can be used to solve the augmented system\n\n [-(Θ⁻¹ + Rp) Aᵀ] [dx] = [ξd]\n [ A Rd] [dy] [ξp]\n\nfor given right-hand sides ξd and ξp.\n\nArguments\n\nkkt::AbstractKKTSolver{T}: the KKT solver object\nθinv::AbstractVector{T}: θ¹\nregP::AbstractVector{T}: primal regularizations\nregD::AbstractVector{T}: dual regularizations\n\n\n\n\n\n","category":"function"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"solve!","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.solve!","page":"Overview","title":"Tulip.KKT.solve!","text":"solve!(dx, dy, kkt, ξp, ξd)\n\nSolve the symmetric quasi-definite augmented system\n\n [-(Θ⁻¹ + Rp) Aᵀ] [dx] = [ξd]\n [ A Rd] [dy] [ξp]\n\nand over-write dx, dy with the result.\n\nArguments\n\ndx, dy: Vectors of unknowns, modified in-place\nkkt: Linear solver for the augmented system\nξp, ξd: Right-hand-side vectors\n\n\n\n\n\n","category":"function"},{"location":"reference/KKT/tlp_dense/","page":"TlpDense","title":"TlpDense","text":"CurrentModule = Tulip.KKT.TlpDense","category":"page"},{"location":"reference/KKT/tlp_dense/#TlpDense","page":"TlpDense","title":"TlpDense","text":"","category":"section"},{"location":"reference/KKT/tlp_dense/","page":"TlpDense","title":"TlpDense","text":"TlpDense.Backend","category":"page"},{"location":"reference/KKT/tlp_dense/#Tulip.KKT.TlpDense.Backend","page":"TlpDense","title":"Tulip.KKT.TlpDense.Backend","text":"Backend\n\nDense linear algebra backend for solving linear systems.\n\nSee DenseSolver for further details.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_dense/","page":"TlpDense","title":"TlpDense","text":"TlpDense.DenseSolver","category":"page"},{"location":"reference/KKT/tlp_dense/#Tulip.KKT.TlpDense.DenseSolver","page":"TlpDense","title":"Tulip.KKT.TlpDense.DenseSolver","text":"DenseSolver{T}\n\nDense linear algebra-based KKT solver.\n\nSupported arithmetics\n\nAll arithmetics are supported.\n\nBLAS/LAPACK routines are used automatically with Float32 and Float64 arithmetic.\n\nSupported systems\n\nK1 via Cholesky factorization\n\n\n\n\n\n","category":"type"},{"location":"manual/IPM/MPC/#Predictor-Corrector-algorithm","page":"Predictor-Corrector","title":"Predictor-Corrector algorithm","text":"","category":"section"},{"location":"manual/IPM/MPC/","page":"Predictor-Corrector","title":"Predictor-Corrector","text":"Tulip.MPC","category":"page"},{"location":"manual/IPM/MPC/#Tulip.MPC","page":"Predictor-Corrector","title":"Tulip.MPC","text":"MPC\n\nImplements Mehrotra's Predictor-Corrector interior-point algorithm.\n\n\n\n\n\n","category":"type"},{"location":"manual/IPM/MPC/#References","page":"Predictor-Corrector","title":"References","text":"","category":"section"},{"location":"manual/IPM/MPC/","page":"Predictor-Corrector","title":"Predictor-Corrector","text":"Mehrotra, S. On the Implementation of a Primal-Dual Interior Point Method SIAM Journal on Optimization, 1992, 2, 575-601","category":"page"},{"location":"manual/options/","page":"Setting options","title":"Setting options","text":"CurrentModule = Tulip","category":"page"},{"location":"manual/options/#Options-management","page":"Setting options","title":"Options management","text":"","category":"section"},{"location":"manual/options/","page":"Setting options","title":"Setting options","text":"info: Info\nThis part of the documentation is under construction","category":"page"},{"location":"manual/options/","page":"Setting options","title":"Setting options","text":"See Options reference for a list of all available options and their signification.","category":"page"},{"location":"manual/options/#Handling-options-within-JuMP","page":"Setting options","title":"Handling options within JuMP","text":"","category":"section"},{"location":"manual/options/#Handling-options-within-MOI","page":"Setting options","title":"Handling options within MOI","text":"","category":"section"},{"location":"manual/options/#Handling-options-directly","page":"Setting options","title":"Handling options directly","text":"","category":"section"},{"location":"tutorials/lp_example/#Toy-example","page":"Toy example","title":"Toy example","text":"","category":"section"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"Tulip can be accessed in 3 ways: through JuMP, through MathOptInterface, or directly.","category":"page"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"This tutorial illustrates, for each case, how to build a model, solve it, and query the solution value. In all cases, we consider the small LP","category":"page"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"beginarrayrrrl\n (LP) \n displaystyle Z^* = min_x y -2x - y\n st\n x - y geq -2\n 2x - y leq 4\n x + 2y leq 7\n x y geq 0\nendarray","category":"page"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"whose optimal value and solution are Z^* = -8 and (x^* y^*) = (3 2).","category":"page"},{"location":"tutorials/lp_example/#JuMP","page":"Toy example","title":"JuMP","text":"","category":"section"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"using Printf\nusing JuMP\nimport Tulip\n\n# Instantiate JuMP model\nlp = Model(Tulip.Optimizer)\n\n# Create variables\n@variable(lp, x >= 0)\n@variable(lp, y >= 0)\n\n# Add constraints\n@constraint(lp, row1, x - y >= -2)\n@constraint(lp, row2, 2*x - y <= 4)\n@constraint(lp, row3, x + 2*y <= 7)\n\n# Set the objective\n@objective(lp, Min, -2*x - y)\n\n# Set some parameters\nset_optimizer_attribute(lp, \"OutputLevel\", 0) # disable output\nset_optimizer_attribute(lp, \"Presolve_Level\", 0) # disable presolve\n\n# Solve the problem\noptimize!(lp)\n\n# Check termination status\nst = termination_status(lp)\nprintln(\"Termination status: $st\")\n\n# Query solution value\nobjval = objective_value(lp)\nx_ = value(x)\ny_ = value(y)\n\n@printf \"Z* = %.4f\\n\" objval\n@printf \"x* = %.4f\\n\" x_\n@printf \"y* = %.4f\\n\" y_","category":"page"},{"location":"tutorials/lp_example/#MOI","page":"Toy example","title":"MOI","text":"","category":"section"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"using Printf\n\nimport MathOptInterface\nconst MOI = MathOptInterface\n\nimport Tulip\n\nlp = Tulip.Optimizer{Float64}()\n\n# Create variables\nx = MOI.add_variable(lp)\ny = MOI.add_variable(lp)\n\n# Set variable bounds\nMOI.add_constraint(lp, x, MOI.GreaterThan(0.0)) # x >= 0\nMOI.add_constraint(lp, y, MOI.GreaterThan(0.0)) # y >= 0\n\n# Add constraints\nrow1 = MOI.add_constraint(lp,\n MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([1.0, -1.0], [x, y]), 0.0),\n MOI.GreaterThan(-2.0)\n)\nrow2 = MOI.add_constraint(lp,\n MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([2.0, -1.0], [x, y]), 0.0),\n MOI.LessThan(4.0)\n)\nrow3 = MOI.add_constraint(lp,\n MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([1.0, 2.0], [x, y]), 0.0),\n MOI.LessThan(7.0)\n) \n\n# Set the objective\nMOI.set(lp,\n MOI.ObjectiveFunction{MOI.ScalarAffineFunction{Float64}}(),\n MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([-2.0, -1.0], [x, y]), 0.0)\n)\nMOI.set(lp, MOI.ObjectiveSense(), MOI.MIN_SENSE)\n\n# Set some parameters\nMOI.set(lp, MOI.Silent(), true) # disable output\nMOI.set(lp, MOI.RawOptimizerAttribute(\"Presolve_Level\"), 0) # disable presolve\n\n# Solve the problem\nMOI.optimize!(lp)\n\n# Check status\nst = MOI.get(lp, MOI.TerminationStatus())\nprintln(\"Termination status: $st\")\n\n# Query solution value\nobjval = MOI.get(lp, MOI.ObjectiveValue())\nx_ = MOI.get(lp, MOI.VariablePrimal(), x)\ny_ = MOI.get(lp, MOI.VariablePrimal(), y)\n\n@printf \"Z* = %.4f\\n\" objval\n@printf \"x* = %.4f\\n\" x_\n@printf \"y* = %.4f\\n\" y_","category":"page"},{"location":"tutorials/lp_example/#Tulip","page":"Toy example","title":"Tulip","text":"","category":"section"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"warning: Warning\nTulip's low-level API should not be considered stable nor complete. The recommended way to use Tulip is through JuMP/MOI as shown above.","category":"page"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"using Printf\nimport Tulip\n\n# Instantiate Tulip object\nlp = Tulip.Model{Float64}()\npb = lp.pbdata # Internal problem data\n\n# Create variables\nx = Tulip.add_variable!(pb, Int[], Float64[], -2.0, 0.0, Inf, \"x\")\ny = Tulip.add_variable!(pb, Int[], Float64[], -1.0, 0.0, Inf, \"y\")\n\n# Add constraints\nrow1 = Tulip.add_constraint!(pb, [x, y], [1.0, -1.0], -2.0, Inf, \"row1\")\nrow2 = Tulip.add_constraint!(pb, [x, y], [2.0, -1.0], -Inf, 4.0, \"row2\")\nrow3 = Tulip.add_constraint!(pb, [x, y], [1.0, 2.0], -Inf, 7.0, \"row3\")\n\n# Set the objective\n# Nothing to do here as objective is already declared\n\n# Set some parameters\nTulip.set_parameter(lp, \"OutputLevel\", 0) # disable output\nTulip.set_parameter(lp, \"Presolve_Level\", 0) # disable presolve\n\n# Solve the problem\nTulip.optimize!(lp)\n\n# Check termination status\nst = Tulip.get_attribute(lp, Tulip.Status())\nprintln(\"Termination status: $st\")\n\n# Query solution value\nobjval = Tulip.get_attribute(lp, Tulip.ObjectiveValue())\nx_ = lp.solution.x[x]\ny_ = lp.solution.x[y]\n\n@printf \"Z* = %.4f\\n\" objval\n@printf \"x* = %.4f\\n\" x_\n@printf \"y* = %.4f\\n\" y_","category":"page"},{"location":"manual/IPM/HSD/#Homogeneous-Self-Dual-algorithm","page":"Homogeneous Self-Dual","title":"Homogeneous Self-Dual algorithm","text":"","category":"section"},{"location":"manual/IPM/HSD/","page":"Homogeneous Self-Dual","title":"Homogeneous Self-Dual","text":"Tulip.HSD","category":"page"},{"location":"manual/IPM/HSD/#Tulip.HSD","page":"Homogeneous Self-Dual","title":"Tulip.HSD","text":"HSD\n\nSolver for the homogeneous self-dual algorithm.\n\n\n\n\n\n","category":"type"},{"location":"manual/IPM/HSD/#References","page":"Homogeneous Self-Dual","title":"References","text":"","category":"section"},{"location":"manual/IPM/HSD/","page":"Homogeneous Self-Dual","title":"Homogeneous Self-Dual","text":"Anjos, M.F.; Lodi, A.; Tanneau, M. Design and implementation of a modular interior-point solver for linear optimization","category":"page"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"CurrentModule = Tulip.KKT.TlpKrylov","category":"page"},{"location":"reference/KKT/tlp_krylov/#TlpKrylov","page":"TlpKrylov","title":"TlpKrylov","text":"","category":"section"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"warning: Warning\nIterative methods are still an experimental feature. Some numerical and performance issues should be expected.","category":"page"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"TlpKrylov.Backend","category":"page"},{"location":"reference/KKT/tlp_krylov/#Tulip.KKT.TlpKrylov.Backend","page":"TlpKrylov","title":"Tulip.KKT.TlpKrylov.Backend","text":"Backend{KS<:Krylov.KrylovSolver,V<:AbstractVector}\n\nKrylov.jl-based backend for solving linear systems.\n\nThe type is parametrized by:\n\nKS<:Krylov.KrylovSolver: workspace type for the Krylov method. Also defines the Krylov method to be used.\nV<:AbstractVector: the vector storage type used within the Krylov method. This should be set to Vector{T} (for arithmetic T) unless, e.g., one uses a GPU.\n\nSee the Krylov.jl documentation for further details.\n\nExample usage\n\nAll the following examples assume everything runs on a CPU in Float64 arithmetic.\n\nTo use the conjugate gradient:\n\nbackend = KKT.TlpKrylov.Backend(Krylov.CgSolver, Vector{Float64})\n\nTo use MINRES:\n\nbackend = KKT.TlpKrylov.Backend(Krylov.MinresSolver, Vector{Float64})\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"TlpKrylov.AbstractKrylovSolver","category":"page"},{"location":"reference/KKT/tlp_krylov/#Tulip.KKT.TlpKrylov.AbstractKrylovSolver","page":"TlpKrylov","title":"Tulip.KKT.TlpKrylov.AbstractKrylovSolver","text":"AbstractKrylovSolver{T}\n\nAbstract type for Kyrlov-based linear solvers.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"TlpKrylov.SPDSolver","category":"page"},{"location":"reference/KKT/tlp_krylov/#Tulip.KKT.TlpKrylov.SPDSolver","page":"TlpKrylov","title":"Tulip.KKT.TlpKrylov.SPDSolver","text":"SPDSolver\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"TlpKrylov.SIDSolver","category":"page"},{"location":"reference/KKT/tlp_krylov/#Tulip.KKT.TlpKrylov.SIDSolver","page":"TlpKrylov","title":"Tulip.KKT.TlpKrylov.SIDSolver","text":"SIDSolver\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"TlpKrylov.SQDSolver","category":"page"},{"location":"reference/KKT/tlp_krylov/#Tulip.KKT.TlpKrylov.SQDSolver","page":"TlpKrylov","title":"Tulip.KKT.TlpKrylov.SQDSolver","text":"SQDSolver\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_ldlfact/","page":"TlpLDLFactorizations","title":"TlpLDLFactorizations","text":"CurrentModule = Tulip.KKT.TlpLDLFactorizations","category":"page"},{"location":"reference/KKT/tlp_ldlfact/#TlpLDLFactorizations","page":"TlpLDLFactorizations","title":"TlpLDLFactorizations","text":"","category":"section"},{"location":"reference/KKT/tlp_ldlfact/","page":"TlpLDLFactorizations","title":"TlpLDLFactorizations","text":"TlpLDLFactorizations.Backend","category":"page"},{"location":"reference/KKT/tlp_ldlfact/#Tulip.KKT.TlpLDLFactorizations.Backend","page":"TlpLDLFactorizations","title":"Tulip.KKT.TlpLDLFactorizations.Backend","text":"Backend\n\nLDLFactorizations backend for solving linear systems.\n\nSee LDLFactSolver for further details.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_ldlfact/","page":"TlpLDLFactorizations","title":"TlpLDLFactorizations","text":"TlpLDLFactorizations.LDLFactSolver","category":"page"},{"location":"reference/KKT/tlp_ldlfact/#Tulip.KKT.TlpLDLFactorizations.LDLFactSolver","page":"TlpLDLFactorizations","title":"Tulip.KKT.TlpLDLFactorizations.LDLFactSolver","text":"LDLFactSolver{T,S<:AbstractKKTSystem}\n\nLDLFactorizations.jl-based KKT solver.\n\nSupported arithmetics\n\nAll arithmetics are supported\n\nSupported systems\n\nK2 via LDLᵀ factorization\n\nExamples\n\nTo solve the augmented system with LDLFactorizations' LDL^T factorization:\n\nset_parameter(tlp_model, \"KKT_Backend\", Tulip.KKT.TlpLDLFact.Backend())\nset_parameter(tlp_model, \"KKT_System\", Tulip.KKT.K2())\n\n\n\n\n\n","category":"type"},{"location":"reference/API/","page":"Julia API","title":"Julia API","text":"Modules = [Tulip]\nPages = [\"tulip_julia_api.jl\"]","category":"page"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.BarrierIterations}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(model::Model, ::BarrierIterations)\n\nQuery the BarrierIterations attribute from model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.ConstraintName, Int64}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(m::Model, ::ConstraintName, i::Int)\n\nQuery the name of constraint i in model m\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.ModelName}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(model::Model, ::ModelName)\n\nQuery the ModelName attribute from model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.Status}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(model::Model, ::Status)\n\nQuery the Status attribute from model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.VariableLowerBound, Int64}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(m::Model{T}, ::VariableLowerBound, j::Int)\n\nQuery the lower bound of variable j in model m.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.VariableName, Int64}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(m::Model, ::VariableName, j::Int)\n\nQuery the name of variable j in model m\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.DualObjectiveValue}} where T","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(model::Model, ::DualObjectiveValue)\n\nQuery the DualObjectiveValue attribute from model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.ObjectiveValue}} where T","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(model::Model, ::ObjectiveValue)\n\nQuery the ObjectiveValue attribute from model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_parameter-Tuple{Tulip.Model, String}","page":"Julia API","title":"Tulip.get_parameter","text":"get_parameter(m::Model, pname::String)\n\nQuery the value of parameter pname in model m.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.load_problem!-Union{Tuple{T}, Tuple{Tulip.Model{T}, String}} where T","page":"Julia API","title":"Tulip.load_problem!","text":"load_problem!(m::Model{T}, fname::String)\n\nRead a model from file fname and load it into model m.\n\nOnly free MPS files are currently supported.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Tuple{Tulip.Model, Tulip.ConstraintName, Int64, String}","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model, ::ConstraintName, i::Int, name::String)\n\nSet the name of constraint i in model m to name.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Tuple{Tulip.Model, Tulip.ModelName, String}","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(model::Model, ::ModelName, name::String)\n\nSet the ModelName attribute in model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Tuple{Tulip.Model, Tulip.VariableName, Int64, String}","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model, ::VariableName, j::Int, name::String)\n\nSet the name of variable j in model m to name.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.ConstraintLowerBound, Int64, T}} where T","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model{T}, ::ConstraintLowerBound, i::Int, lb::T)\n\nSet the lower bound of constraint i in model m to lb.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.ConstraintUpperBound, Int64, T}} where T","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model{T}, ::ConstraintUpperBound, i::Int, ub::T)\n\nSet the upper bound of constraint i in model m to ub.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.VariableLowerBound, Int64, T}} where T","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model{T}, ::VariableLowerBound, j::Int, lb::T)\n\nSet the lower bound of variable j in model m to lb.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.VariableUpperBound, Int64, T}} where T","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model{T}, ::VariableUpperBound, j::Int, ub::T)\n\nSet the upper bound of variable j in model m to ub.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_parameter-Tuple{Tulip.Model, String, Any}","page":"Julia API","title":"Tulip.set_parameter","text":"set_parameter(m::Model, pname::String, val)\n\nSet the value of parameter pname in model m to val\n\n\n\n\n\n","category":"method"},{"location":"reference/KKT/tlp_cholmod/","page":"TlpCholmod","title":"TlpCholmod","text":"CurrentModule = Tulip.KKT","category":"page"},{"location":"reference/KKT/tlp_cholmod/#TlpCholmod","page":"TlpCholmod","title":"TlpCholmod","text":"","category":"section"},{"location":"reference/KKT/tlp_cholmod/","page":"TlpCholmod","title":"TlpCholmod","text":"TlpCholmod.Backend","category":"page"},{"location":"reference/KKT/tlp_cholmod/#Tulip.KKT.TlpCholmod.Backend","page":"TlpCholmod","title":"Tulip.KKT.TlpCholmod.Backend","text":"Backend\n\nCHOLMOD backend for solving linear systems.\n\nSee CholmodSolver for further details.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_cholmod/","page":"TlpCholmod","title":"TlpCholmod","text":"TlpCholmod.CholmodSolver","category":"page"},{"location":"reference/KKT/tlp_cholmod/#Tulip.KKT.TlpCholmod.CholmodSolver","page":"TlpCholmod","title":"Tulip.KKT.TlpCholmod.CholmodSolver","text":"CholmodSolver{T,S<:AbstractKKTSystem}\n\nCHOLMOD-based KKT solver.\n\nSupported arithmetics\n\nFloat64\n\nSupported systems\n\nK2 via LDLᵀ factorization\nK1 via Cholesky (LLᵀ) factorization\n\nExamples\n\nTo solve the augmented system with CHOLMOD's LDL^T factorization:\n\nset_parameter(tlp_model, \"KKT_Backend\", Tulip.KKT.TlpCholmod.Backend())\nset_parameter(tlp_model, \"KKT_System\", Tulip.KKT.K2())\n\nTo solve the normal equations system with CHOLMOD's Cholesky factorization:\n\nset_parameter(tlp_model, \"KKT_Backend\", Tulip.KKT.TlpCholmod.Backend())\nset_parameter(tlp_model, \"KKT_System\", Tulip.KKT.K1())\n\n\n\n\n\n","category":"type"},{"location":"manual/formulation/#Problem-formulation","page":"Problem formulation","title":"Problem formulation","text":"","category":"section"},{"location":"manual/formulation/#Model-input","page":"Problem formulation","title":"Model input","text":"","category":"section"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"Tulip takes as input LP problems of the form","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":" beginarrayrrcll\n (P) \n displaystyle min_x c^Tx + c_0\n st\n l^b_i leq a_i^T x leq u^b_i forall i = 1 m\n l^x_j leq x_j leq u^x_j forall j = 1 n\n endarray","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"where l^bx u^b x in mathbbR cup - infty + infty , i.e., some of the bounds may be infinite.","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"This original formulation is then converted to standard form.","category":"page"},{"location":"manual/formulation/#Standard-form","page":"Problem formulation","title":"Standard form","text":"","category":"section"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"Internally, Tulip solves LPs of the form","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":" beginarrayrl\n (P) \n displaystyle min_x\n c^T x + c_0\n st\n A x = b\n l leq x leq u\n endarray","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"where x c in mathbbR^n, A in mathbbR^m times n, b in mathbbR^m, and l u in (mathbbR cup -infty +infty )^n, i.e., some bounds may be infinite.","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"The original problem is automatically reformulated into standard form before the optimization is performed. This transformation is transparent to the user.","category":"page"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"CurrentModule = Tulip","category":"page"},{"location":"reference/attributes/#Attribute-reference","page":"Attributes","title":"Attribute reference","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Attributes are queried using get_attribute and set using set_attribute.","category":"page"},{"location":"reference/attributes/#Model-attributes","page":"Attributes","title":"Model attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Name Type Description\nModelName String Name of the model\nNumberOfConstraints Int Number of constraints in the model\nNumberOfVariables Int Number of variables in the model\nObjectiveValue T Objective value of the current primal solution\nDualObjectiveValue T Objective value of the current dual solution\nObjectiveConstant T Value of the objective constant\nObjectiveSense Optimization sense\nStatus Model status\nBarrierIterations Int Number of barrier iterations\nSolutionTime Float64 Solution time, in seconds","category":"page"},{"location":"reference/attributes/#Variable-attributes","page":"Attributes","title":"Variable attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Name Type Description\nVariableLowerBound T Variable lower bound\nVariableUpperBound T Variable upper bound\nVariableObjectiveCoeff T Variable objective coefficient\nVariableName String Variable name","category":"page"},{"location":"reference/attributes/#Constraint-attributes","page":"Attributes","title":"Constraint attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Name Type Description\nConstraintLowerBound T Constraint lower bound\nConstraintUpperBound T Constraint upper bound\nConstraintName String Constraint name","category":"page"},{"location":"reference/attributes/#Reference","page":"Attributes","title":"Reference","text":"","category":"section"},{"location":"reference/attributes/#Model-attributes-2","page":"Attributes","title":"Model attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Modules = [Tulip]\nPages = [\"src/attributes.jl\"]\nFilter = t -> typeof(t) === DataType && t <: Tulip.AbstractModelAttribute","category":"page"},{"location":"reference/attributes/#Tulip.BarrierIterations","page":"Attributes","title":"Tulip.BarrierIterations","text":"BarrierIterations\n\nNumber of iterations of the barrier algorithm in the last call.\n\nThis number may be zero in the following cases:\n\nthe model has been solved yet\npresolve solved the model\nthe initial solution was optimal\n\nType: Int\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.BarrierIterations())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.DualObjectiveValue","page":"Attributes","title":"Tulip.DualObjectiveValue","text":"DualObjectiveValue\n\nObjective value of the current dual solution.\n\nType: T\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.DualObjectiveValue())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ModelName","page":"Attributes","title":"Tulip.ModelName","text":"ModelName\n\nThe name of the model.\n\nType: String\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.ModelName(), \"lp_example\")\nTulip.get_attribute(model, Tulip.ModelName())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.NumberOfConstraints","page":"Attributes","title":"Tulip.NumberOfConstraints","text":"NumberOfConstraints\n\nNumber of constraints in the model.\n\nType: Int\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.NumberOfConstraints())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.NumberOfVariables","page":"Attributes","title":"Tulip.NumberOfVariables","text":"NumberOfVariables\n\nNumber of variables in the model.\n\nType: Int\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.NumberOfVariables())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ObjectiveConstant","page":"Attributes","title":"Tulip.ObjectiveConstant","text":"ObjectiveConstant\n\nConstant objective offset, defaults to zero.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.ObjectiveConstant(), zero(T))\nTulip.get_attribute(model, Tulip.ObjectiveConstant())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ObjectiveSense","page":"Attributes","title":"Tulip.ObjectiveSense","text":"ObjectiveSense\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ObjectiveValue","page":"Attributes","title":"Tulip.ObjectiveValue","text":"ObjectiveValue\n\nObjective value of the current primal solution.\n\nType: T\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.ObjectiveValue())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.SolutionTime","page":"Attributes","title":"Tulip.SolutionTime","text":"SolutionTime\n\nTotal solution time, in seconds.\n\nType: Float64\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.SolutionTime())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.Status","page":"Attributes","title":"Tulip.Status","text":"Status\n\nModel status\n\nType:\n\nModifiable: No\n\nExamples\n\nTulip.get(model, Tulip.Status())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Variable-attributes-2","page":"Attributes","title":"Variable attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Modules = [Tulip]\nPages = [\"src/attributes.jl\"]\nFilter = t -> typeof(t) === DataType && t <: Tulip.AbstractVariableAttribute","category":"page"},{"location":"reference/attributes/#Tulip.VariableLowerBound","page":"Attributes","title":"Tulip.VariableLowerBound","text":"VariableLowerBound\n\nVariable lower bound.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.VariableLowerBound(), 1, zero(T))\nTulip.get_attribute(model, Tulip.VariableLowerBound(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.VariableName","page":"Attributes","title":"Tulip.VariableName","text":"VariableName\n\nName of the variable.\n\nType: String\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.VariableName(), 1, \"x1\")\nTulip.get_attribute(model, Tulip.VariableName(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.VariableObjectiveCoeff","page":"Attributes","title":"Tulip.VariableObjectiveCoeff","text":"VariableObjectiveCoeff\n\nObjective coefficient of the variable.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.VariableObjectiveCoeff(), 1, one(T))\nTulip.get_attribute(model, Tulip.VariableObjectiveCoeff(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.VariableUpperBound","page":"Attributes","title":"Tulip.VariableUpperBound","text":"VariableUpperBound\n\nVariable upper bound.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.VariableUpperBound(), 1, one(T))\nTulip.get_attribute(model, Tulip.VariableUpperBound(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Constraint-attributes-2","page":"Attributes","title":"Constraint attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Modules = [Tulip]\nPages = [\"src/attributes.jl\"]\nFilter = t -> typeof(t) === DataType && t <: Tulip.AbstractConstraintAttribute","category":"page"},{"location":"reference/attributes/#Tulip.ConstraintLowerBound","page":"Attributes","title":"Tulip.ConstraintLowerBound","text":"ConstraintLowerBound\n\nConstraint lower bound.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.ConstraintLowerBound(), 1, zero(T))\nTulip.get_attribute(model, Tulip.ConstraintLowerBound(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ConstraintName","page":"Attributes","title":"Tulip.ConstraintName","text":"ConstraintName\n\nName of the constraint.\n\nType: String\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.ConstraintName(), 1, \"c1\")\nTulip.get_attribute(model, Tulip.ConstraintName(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ConstraintUpperBound","page":"Attributes","title":"Tulip.ConstraintUpperBound","text":"ConstraintUpperBound\n\nConstraint upper bound.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.ConstraintUpperBound(), 1, one(T))\nTulip.get_attribute(model, Tulip.ConstraintUpperBound(), 1)\n\n\n\n\n\n","category":"type"},{"location":"","page":"Home","title":"Home","text":"CurrentModule = Tulip","category":"page"},{"location":"#Tulip.jl","page":"Home","title":"Tulip.jl","text":"","category":"section"},{"location":"#Overview","page":"Home","title":"Overview","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Tulip is an open-source interior-point solver for linear programming.","category":"page"},{"location":"#Installation","page":"Home","title":"Installation","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Tulip is 100% Julia, so install it just like any Julia package:","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> ]\npkg> add Tulip","category":"page"},{"location":"","page":"Home","title":"Home","text":"No additional building step is required.","category":"page"},{"location":"#Citing-Tulip.jl","page":"Home","title":"Citing Tulip.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"If you use Tulip in your work, we kindly ask that you cite the following reference. The PDF is freely available here, and serves as a user manual for advanced users.","category":"page"},{"location":"","page":"Home","title":"Home","text":"@TechReport{Tulip.jl,\n title = {{Tulip}.jl: an open-source interior-point linear optimization\n solver with abstract linear algebra},\n url = {https://www.gerad.ca/fr/papers/G-2019-36},\n Journal = {Les Cahiers du Gerad},\n Author = {Anjos, Miguel F. and Lodi, Andrea and Tanneau, Mathieu},\n year = {2019}\n}","category":"page"},{"location":"reference/options/","page":"Options","title":"Options","text":"CurrentModule = Tulip","category":"page"},{"location":"reference/options/#Options-reference","page":"Options","title":"Options reference","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameters can be queried and set through the get_parameter and set_parameter functions.","category":"page"},{"location":"reference/options/","page":"Options","title":"Options","text":"In all that follows, epsilon refers to the numerical precision, which is given by eps(Tv) where Tv is the arithmetic of the current model. For instance, in double-precision arithmetic, i.e., Tv=Float64, we have epsilon simeq 10^-16.","category":"page"},{"location":"reference/options/","page":"Options","title":"Options","text":"Factory","category":"page"},{"location":"reference/options/#Tulip.Factory","page":"Options","title":"Tulip.Factory","text":"Factory{T}\n\nFactory-like struct for passing options to lower-level components.\n\n\n\n\n\n","category":"type"},{"location":"reference/options/#IPM","page":"Options","title":"IPM","text":"","category":"section"},{"location":"reference/options/#Tolerances","page":"Options","title":"Tolerances","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Numerical tolerances for the interior-point algorithm.","category":"page"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nTolerancePFeas Primal feasibility tolerance sqrtepsilon\nToleranceDFeas Dual feasibility tolerance sqrtepsilon\nToleranceRGap Relative optimality gap tolerance sqrtepsilon\nToleranceIFeas Infeasibility tolerance sqrtepsilon","category":"page"},{"location":"reference/options/#Algorithmic-parameters","page":"Options","title":"Algorithmic parameters","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nBarrierAlgorithm Interior-point algorithm 1\nCorrectionLimit Maximum number of additional centrality corrections 5\nStepDampFactor Step 0.9995\nGammaMin Minimum value of gamma for computing correctors 0.1\nCentralityOutlierThreshold Relative threshold for computing extra centrality corrections 0.1\nPRegMin Minimum value of primal regularization sqrtepsilon\nDRegMin Minimum value of dual regularization sqrtepsilon","category":"page"},{"location":"reference/options/#Stopping-criterion","page":"Options","title":"Stopping criterion","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nIterationsLimit Maximum number of barrier iterations 100\nTimeLimit Time limit, in seconds Inf","category":"page"},{"location":"reference/options/#KKT","page":"Options","title":"KKT","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nBackend See KKT backends KKT.DefaultKKTBackend\nSystem See KKT systems KKT.DefaultKKTSystem","category":"page"},{"location":"reference/options/#Linear-Algebra","page":"Options","title":"Linear Algebra","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"These parameters control the linear algebra implementation","category":"page"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nMatrixFactory See Factory Factory(SparseMatrixCSC)","category":"page"},{"location":"reference/options/#Presolve","page":"Options","title":"Presolve","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"These parameters control the execution of the presolve phase. They should be called as \"Presolve_\".","category":"page"},{"location":"reference/options/#Others","page":"Options","title":"Others","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nOutputLevel Controls the solver's output 0\nThreads Maximum number of threads 1\nPresolve Presolve (no presolve if set to ≤ 0) 1","category":"page"}] +[{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"CurrentModule = Tulip.KKT","category":"page"},{"location":"reference/KKT/kkt/#Overview","page":"Overview","title":"Overview","text":"","category":"section"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"The KKT module provides a modular, customizable interface for developing and selecting various approaches to solve the KKT systems.","category":"page"},{"location":"reference/KKT/kkt/#KKT-backends","page":"Overview","title":"KKT backends","text":"","category":"section"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"AbstractKKTBackend","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.AbstractKKTBackend","page":"Overview","title":"Tulip.KKT.AbstractKKTBackend","text":"AbstractKKTBackend\n\nAbstract type for KKT backend, i.e., the actual linear solver.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"DefaultKKTBackend","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.DefaultKKTBackend","page":"Overview","title":"Tulip.KKT.DefaultKKTBackend","text":"DefaultKKTBackend\n\nDefault setting for KKT backend.\n\nCurrently defaults to TlpCholmod.Backend for Float64 arithmetic, and TlpLDLFact.Backend otherwise.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/#KKT-systems","page":"Overview","title":"KKT systems","text":"","category":"section"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"All formulations below refer to a linear program in primal-dual standard form","category":"page"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":" beginarrayrl\n (P) \n displaystyle min_x\n c^top x\n st\n A x = b\n l leq x leq u\n endarray\n quad quad quad\n beginarrayrl\n (D) \n displaystyle max_y z\n b^top y + l^topz^l - u^topz^u\n st\n A^topy + z^l - z^u = c\n z^l z^u geq 0\n endarray","category":"page"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"AbstractKKTSystem","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.AbstractKKTSystem","page":"Overview","title":"Tulip.KKT.AbstractKKTSystem","text":"AbstractKKTSystem\n\nAbstract type for KKT systems\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"DefaultKKTSystem","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.DefaultKKTSystem","page":"Overview","title":"Tulip.KKT.DefaultKKTSystem","text":"DefaultKKTSystem\n\nDefault KKT system setting. Currently equivalent to K2\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"K2","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.K2","page":"Overview","title":"Tulip.KKT.K2","text":"K2 <: AbstractKKTSystem\n\nAugmented system\n\n beginbmatrix\n -(Theta^-1 + R_p) A^top\n A R_d\n endbmatrix\n beginbmatrix\n Delta x\n Delta y\n endbmatrix\n =\n beginbmatrix\n xi_d\n xi_p\n endbmatrix\n\nwhere\n\nTheta^-1 = X^-lZ^l + X^-u Z^u\nR_p R_d are current primal and dual regularizations\nxi_d xi_p are given right-hand sides\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"K1","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.K1","page":"Overview","title":"Tulip.KKT.K1","text":"K1 <: AbstractKKTSystem\n\nNormal equations system\n\n beginarrayrl\n left(\n A (Theta^-1 + R_p)^-1 A^top + R_d\n right)\n Delta y\n =\n xi_p + A (Θ^-1 + R_p)^-1 xi_d\n Delta x = (Θ^-1 + R_p)^-1 (A^top Delta y - xi_d)\n endarray\n\nwhere\n\nTheta^-1 = X^-lZ^l + X^-u Z^u\nR_p R_d are current primal and dual regularizations\nxi_d xi_p are the augmented system's right-hand side\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/#KKT-solvers","page":"Overview","title":"KKT solvers","text":"","category":"section"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"AbstractKKTSolver","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.AbstractKKTSolver","page":"Overview","title":"Tulip.KKT.AbstractKKTSolver","text":"AbstractKKTSolver{T}\n\nAbstract container for solving KKT systems in arithmetic T.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"Custom linear solvers should (preferably) inherit from the AbstractKKTSolver class, and extend the following functions:","category":"page"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"setup","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.setup","page":"Overview","title":"Tulip.KKT.setup","text":"setup(A, system, backend; kwargs...)\n\nInstantiate a KKT solver object.\n\n\n\n\n\n","category":"function"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"update!","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.update!","page":"Overview","title":"Tulip.KKT.update!","text":"update!(kkt, θinv, regP, regD)\n\nUpdate internal data and factorization/pre-conditioner.\n\nAfter this call, kkt can be used to solve the augmented system\n\n [-(Θ⁻¹ + Rp) Aᵀ] [dx] = [ξd]\n [ A Rd] [dy] [ξp]\n\nfor given right-hand sides ξd and ξp.\n\nArguments\n\nkkt::AbstractKKTSolver{T}: the KKT solver object\nθinv::AbstractVector{T}: θ¹\nregP::AbstractVector{T}: primal regularizations\nregD::AbstractVector{T}: dual regularizations\n\n\n\n\n\n","category":"function"},{"location":"reference/KKT/kkt/","page":"Overview","title":"Overview","text":"solve!","category":"page"},{"location":"reference/KKT/kkt/#Tulip.KKT.solve!","page":"Overview","title":"Tulip.KKT.solve!","text":"solve!(dx, dy, kkt, ξp, ξd)\n\nSolve the symmetric quasi-definite augmented system\n\n [-(Θ⁻¹ + Rp) Aᵀ] [dx] = [ξd]\n [ A Rd] [dy] [ξp]\n\nand over-write dx, dy with the result.\n\nArguments\n\ndx, dy: Vectors of unknowns, modified in-place\nkkt: Linear solver for the augmented system\nξp, ξd: Right-hand-side vectors\n\n\n\n\n\n","category":"function"},{"location":"reference/KKT/tlp_dense/","page":"TlpDense","title":"TlpDense","text":"CurrentModule = Tulip.KKT.TlpDense","category":"page"},{"location":"reference/KKT/tlp_dense/#TlpDense","page":"TlpDense","title":"TlpDense","text":"","category":"section"},{"location":"reference/KKT/tlp_dense/","page":"TlpDense","title":"TlpDense","text":"TlpDense.Backend","category":"page"},{"location":"reference/KKT/tlp_dense/#Tulip.KKT.TlpDense.Backend","page":"TlpDense","title":"Tulip.KKT.TlpDense.Backend","text":"Backend\n\nDense linear algebra backend for solving linear systems.\n\nSee DenseSolver for further details.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_dense/","page":"TlpDense","title":"TlpDense","text":"TlpDense.DenseSolver","category":"page"},{"location":"reference/KKT/tlp_dense/#Tulip.KKT.TlpDense.DenseSolver","page":"TlpDense","title":"Tulip.KKT.TlpDense.DenseSolver","text":"DenseSolver{T}\n\nDense linear algebra-based KKT solver.\n\nSupported arithmetics\n\nAll arithmetics are supported.\n\nBLAS/LAPACK routines are used automatically with Float32 and Float64 arithmetic.\n\nSupported systems\n\nK1 via Cholesky factorization\n\n\n\n\n\n","category":"type"},{"location":"manual/IPM/MPC/#Predictor-Corrector-algorithm","page":"Predictor-Corrector","title":"Predictor-Corrector algorithm","text":"","category":"section"},{"location":"manual/IPM/MPC/","page":"Predictor-Corrector","title":"Predictor-Corrector","text":"Tulip.MPC","category":"page"},{"location":"manual/IPM/MPC/#Tulip.MPC","page":"Predictor-Corrector","title":"Tulip.MPC","text":"MPC\n\nImplements Mehrotra's Predictor-Corrector interior-point algorithm.\n\n\n\n\n\n","category":"type"},{"location":"manual/IPM/MPC/#References","page":"Predictor-Corrector","title":"References","text":"","category":"section"},{"location":"manual/IPM/MPC/","page":"Predictor-Corrector","title":"Predictor-Corrector","text":"Mehrotra, S. On the Implementation of a Primal-Dual Interior Point Method SIAM Journal on Optimization, 1992, 2, 575-601","category":"page"},{"location":"manual/options/","page":"Setting options","title":"Setting options","text":"CurrentModule = Tulip","category":"page"},{"location":"manual/options/#Options-management","page":"Setting options","title":"Options management","text":"","category":"section"},{"location":"manual/options/","page":"Setting options","title":"Setting options","text":"info: Info\nThis part of the documentation is under construction","category":"page"},{"location":"manual/options/","page":"Setting options","title":"Setting options","text":"See Options reference for a list of all available options and their signification.","category":"page"},{"location":"manual/options/#Handling-options-within-JuMP","page":"Setting options","title":"Handling options within JuMP","text":"","category":"section"},{"location":"manual/options/#Handling-options-within-MOI","page":"Setting options","title":"Handling options within MOI","text":"","category":"section"},{"location":"manual/options/#Handling-options-directly","page":"Setting options","title":"Handling options directly","text":"","category":"section"},{"location":"tutorials/lp_example/#Toy-example","page":"Toy example","title":"Toy example","text":"","category":"section"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"Tulip can be accessed in 3 ways: through JuMP, through MathOptInterface, or directly.","category":"page"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"This tutorial illustrates, for each case, how to build a model, solve it, and query the solution value. In all cases, we consider the small LP","category":"page"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"beginarrayrrrl\n (LP) \n displaystyle Z^* = min_x y -2x - y\n st\n x - y geq -2\n 2x - y leq 4\n x + 2y leq 7\n x y geq 0\nendarray","category":"page"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"whose optimal value and solution are Z^* = -8 and (x^* y^*) = (3 2).","category":"page"},{"location":"tutorials/lp_example/#JuMP","page":"Toy example","title":"JuMP","text":"","category":"section"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"using Printf\nusing JuMP\nimport Tulip\n\n# Instantiate JuMP model\nlp = Model(Tulip.Optimizer)\n\n# Create variables\n@variable(lp, x >= 0)\n@variable(lp, y >= 0)\n\n# Add constraints\n@constraint(lp, row1, x - y >= -2)\n@constraint(lp, row2, 2*x - y <= 4)\n@constraint(lp, row3, x + 2*y <= 7)\n\n# Set the objective\n@objective(lp, Min, -2*x - y)\n\n# Set some parameters\nset_optimizer_attribute(lp, \"OutputLevel\", 0) # disable output\nset_optimizer_attribute(lp, \"Presolve_Level\", 0) # disable presolve\n\n# Solve the problem\noptimize!(lp)\n\n# Check termination status\nst = termination_status(lp)\nprintln(\"Termination status: $st\")\n\n# Query solution value\nobjval = objective_value(lp)\nx_ = value(x)\ny_ = value(y)\n\n@printf \"Z* = %.4f\\n\" objval\n@printf \"x* = %.4f\\n\" x_\n@printf \"y* = %.4f\\n\" y_","category":"page"},{"location":"tutorials/lp_example/#MOI","page":"Toy example","title":"MOI","text":"","category":"section"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"using Printf\n\nimport MathOptInterface\nconst MOI = MathOptInterface\n\nimport Tulip\n\nlp = Tulip.Optimizer{Float64}()\n\n# Create variables\nx = MOI.add_variable(lp)\ny = MOI.add_variable(lp)\n\n# Set variable bounds\nMOI.add_constraint(lp, x, MOI.GreaterThan(0.0)) # x >= 0\nMOI.add_constraint(lp, y, MOI.GreaterThan(0.0)) # y >= 0\n\n# Add constraints\nrow1 = MOI.add_constraint(lp,\n MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([1.0, -1.0], [x, y]), 0.0),\n MOI.GreaterThan(-2.0)\n)\nrow2 = MOI.add_constraint(lp,\n MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([2.0, -1.0], [x, y]), 0.0),\n MOI.LessThan(4.0)\n)\nrow3 = MOI.add_constraint(lp,\n MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([1.0, 2.0], [x, y]), 0.0),\n MOI.LessThan(7.0)\n) \n\n# Set the objective\nMOI.set(lp,\n MOI.ObjectiveFunction{MOI.ScalarAffineFunction{Float64}}(),\n MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([-2.0, -1.0], [x, y]), 0.0)\n)\nMOI.set(lp, MOI.ObjectiveSense(), MOI.MIN_SENSE)\n\n# Set some parameters\nMOI.set(lp, MOI.Silent(), true) # disable output\nMOI.set(lp, MOI.RawOptimizerAttribute(\"Presolve_Level\"), 0) # disable presolve\n\n# Solve the problem\nMOI.optimize!(lp)\n\n# Check status\nst = MOI.get(lp, MOI.TerminationStatus())\nprintln(\"Termination status: $st\")\n\n# Query solution value\nobjval = MOI.get(lp, MOI.ObjectiveValue())\nx_ = MOI.get(lp, MOI.VariablePrimal(), x)\ny_ = MOI.get(lp, MOI.VariablePrimal(), y)\n\n@printf \"Z* = %.4f\\n\" objval\n@printf \"x* = %.4f\\n\" x_\n@printf \"y* = %.4f\\n\" y_","category":"page"},{"location":"tutorials/lp_example/#Tulip","page":"Toy example","title":"Tulip","text":"","category":"section"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"warning: Warning\nTulip's low-level API should not be considered stable nor complete. The recommended way to use Tulip is through JuMP/MOI as shown above.","category":"page"},{"location":"tutorials/lp_example/","page":"Toy example","title":"Toy example","text":"using Printf\nimport Tulip\n\n# Instantiate Tulip object\nlp = Tulip.Model{Float64}()\npb = lp.pbdata # Internal problem data\n\n# Create variables\nx = Tulip.add_variable!(pb, Int[], Float64[], -2.0, 0.0, Inf, \"x\")\ny = Tulip.add_variable!(pb, Int[], Float64[], -1.0, 0.0, Inf, \"y\")\n\n# Add constraints\nrow1 = Tulip.add_constraint!(pb, [x, y], [1.0, -1.0], -2.0, Inf, \"row1\")\nrow2 = Tulip.add_constraint!(pb, [x, y], [2.0, -1.0], -Inf, 4.0, \"row2\")\nrow3 = Tulip.add_constraint!(pb, [x, y], [1.0, 2.0], -Inf, 7.0, \"row3\")\n\n# Set the objective\n# Nothing to do here as objective is already declared\n\n# Set some parameters\nTulip.set_parameter(lp, \"OutputLevel\", 0) # disable output\nTulip.set_parameter(lp, \"Presolve_Level\", 0) # disable presolve\n\n# Solve the problem\nTulip.optimize!(lp)\n\n# Check termination status\nst = Tulip.get_attribute(lp, Tulip.Status())\nprintln(\"Termination status: $st\")\n\n# Query solution value\nobjval = Tulip.get_attribute(lp, Tulip.ObjectiveValue())\nx_ = lp.solution.x[x]\ny_ = lp.solution.x[y]\n\n@printf \"Z* = %.4f\\n\" objval\n@printf \"x* = %.4f\\n\" x_\n@printf \"y* = %.4f\\n\" y_","category":"page"},{"location":"manual/IPM/HSD/#Homogeneous-Self-Dual-algorithm","page":"Homogeneous Self-Dual","title":"Homogeneous Self-Dual algorithm","text":"","category":"section"},{"location":"manual/IPM/HSD/","page":"Homogeneous Self-Dual","title":"Homogeneous Self-Dual","text":"Tulip.HSD","category":"page"},{"location":"manual/IPM/HSD/#Tulip.HSD","page":"Homogeneous Self-Dual","title":"Tulip.HSD","text":"HSD\n\nSolver for the homogeneous self-dual algorithm.\n\n\n\n\n\n","category":"type"},{"location":"manual/IPM/HSD/#References","page":"Homogeneous Self-Dual","title":"References","text":"","category":"section"},{"location":"manual/IPM/HSD/","page":"Homogeneous Self-Dual","title":"Homogeneous Self-Dual","text":"Anjos, M.F.; Lodi, A.; Tanneau, M. Design and implementation of a modular interior-point solver for linear optimization","category":"page"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"CurrentModule = Tulip.KKT.TlpKrylov","category":"page"},{"location":"reference/KKT/tlp_krylov/#TlpKrylov","page":"TlpKrylov","title":"TlpKrylov","text":"","category":"section"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"warning: Warning\nIterative methods are still an experimental feature. Some numerical and performance issues should be expected.","category":"page"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"TlpKrylov.Backend","category":"page"},{"location":"reference/KKT/tlp_krylov/#Tulip.KKT.TlpKrylov.Backend","page":"TlpKrylov","title":"Tulip.KKT.TlpKrylov.Backend","text":"Backend{KS<:Krylov.KrylovSolver,V<:AbstractVector}\n\nKrylov.jl-based backend for solving linear systems.\n\nThe type is parametrized by:\n\nKS<:Krylov.KrylovSolver: workspace type for the Krylov method. Also defines the Krylov method to be used.\nV<:AbstractVector: the vector storage type used within the Krylov method. This should be set to Vector{T} (for arithmetic T) unless, e.g., one uses a GPU.\n\nSee the Krylov.jl documentation for further details.\n\nExample usage\n\nAll the following examples assume everything runs on a CPU in Float64 arithmetic.\n\nTo use the conjugate gradient:\n\nbackend = KKT.TlpKrylov.Backend(Krylov.CgSolver, Vector{Float64})\n\nTo use MINRES:\n\nbackend = KKT.TlpKrylov.Backend(Krylov.MinresSolver, Vector{Float64})\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"TlpKrylov.AbstractKrylovSolver","category":"page"},{"location":"reference/KKT/tlp_krylov/#Tulip.KKT.TlpKrylov.AbstractKrylovSolver","page":"TlpKrylov","title":"Tulip.KKT.TlpKrylov.AbstractKrylovSolver","text":"AbstractKrylovSolver{T}\n\nAbstract type for Kyrlov-based linear solvers.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"TlpKrylov.SPDSolver","category":"page"},{"location":"reference/KKT/tlp_krylov/#Tulip.KKT.TlpKrylov.SPDSolver","page":"TlpKrylov","title":"Tulip.KKT.TlpKrylov.SPDSolver","text":"SPDSolver\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"TlpKrylov.SIDSolver","category":"page"},{"location":"reference/KKT/tlp_krylov/#Tulip.KKT.TlpKrylov.SIDSolver","page":"TlpKrylov","title":"Tulip.KKT.TlpKrylov.SIDSolver","text":"SIDSolver\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_krylov/","page":"TlpKrylov","title":"TlpKrylov","text":"TlpKrylov.SQDSolver","category":"page"},{"location":"reference/KKT/tlp_krylov/#Tulip.KKT.TlpKrylov.SQDSolver","page":"TlpKrylov","title":"Tulip.KKT.TlpKrylov.SQDSolver","text":"SQDSolver\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_ldlfact/","page":"TlpLDLFactorizations","title":"TlpLDLFactorizations","text":"CurrentModule = Tulip.KKT.TlpLDLFactorizations","category":"page"},{"location":"reference/KKT/tlp_ldlfact/#TlpLDLFactorizations","page":"TlpLDLFactorizations","title":"TlpLDLFactorizations","text":"","category":"section"},{"location":"reference/KKT/tlp_ldlfact/","page":"TlpLDLFactorizations","title":"TlpLDLFactorizations","text":"TlpLDLFactorizations.Backend","category":"page"},{"location":"reference/KKT/tlp_ldlfact/#Tulip.KKT.TlpLDLFactorizations.Backend","page":"TlpLDLFactorizations","title":"Tulip.KKT.TlpLDLFactorizations.Backend","text":"Backend\n\nLDLFactorizations backend for solving linear systems.\n\nSee LDLFactSolver for further details.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_ldlfact/","page":"TlpLDLFactorizations","title":"TlpLDLFactorizations","text":"TlpLDLFactorizations.LDLFactSolver","category":"page"},{"location":"reference/KKT/tlp_ldlfact/#Tulip.KKT.TlpLDLFactorizations.LDLFactSolver","page":"TlpLDLFactorizations","title":"Tulip.KKT.TlpLDLFactorizations.LDLFactSolver","text":"LDLFactSolver{T,S<:AbstractKKTSystem}\n\nLDLFactorizations.jl-based KKT solver.\n\nSupported arithmetics\n\nAll arithmetics are supported\n\nSupported systems\n\nK2 via LDLᵀ factorization\n\nExamples\n\nTo solve the augmented system with LDLFactorizations' LDL^T factorization:\n\nset_parameter(tlp_model, \"KKT_Backend\", Tulip.KKT.TlpLDLFact.Backend())\nset_parameter(tlp_model, \"KKT_System\", Tulip.KKT.K2())\n\n\n\n\n\n","category":"type"},{"location":"reference/API/","page":"Julia API","title":"Julia API","text":"Modules = [Tulip]\nPages = [\"tulip_julia_api.jl\"]","category":"page"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.BarrierIterations}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(model::Model, ::BarrierIterations)\n\nQuery the BarrierIterations attribute from model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.ConstraintName, Int64}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(m::Model, ::ConstraintName, i::Int)\n\nQuery the name of constraint i in model m\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.ModelName}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(model::Model, ::ModelName)\n\nQuery the ModelName attribute from model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.SolutionTime}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(model::Model, ::SolutionTime)\n\nQuery the SolutionTime attribute from model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.Status}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(model::Model, ::Status)\n\nQuery the Status attribute from model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.VariableLowerBound, Int64}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(m::Model{T}, ::VariableLowerBound, j::Int)\n\nQuery the lower bound of variable j in model m.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Tuple{Tulip.Model, Tulip.VariableName, Int64}","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(m::Model, ::VariableName, j::Int)\n\nQuery the name of variable j in model m\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.DualObjectiveValue}} where T","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(model::Model, ::DualObjectiveValue)\n\nQuery the DualObjectiveValue attribute from model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.ObjectiveValue}} where T","page":"Julia API","title":"Tulip.get_attribute","text":"get_attribute(model::Model, ::ObjectiveValue)\n\nQuery the ObjectiveValue attribute from model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.get_parameter-Tuple{Tulip.Model, String}","page":"Julia API","title":"Tulip.get_parameter","text":"get_parameter(m::Model, pname::String)\n\nQuery the value of parameter pname in model m.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.load_problem!-Union{Tuple{T}, Tuple{Tulip.Model{T}, String}} where T","page":"Julia API","title":"Tulip.load_problem!","text":"load_problem!(m::Model{T}, fname::String)\n\nRead a model from file fname and load it into model m.\n\nOnly free MPS files are currently supported.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Tuple{Tulip.Model, Tulip.ConstraintName, Int64, String}","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model, ::ConstraintName, i::Int, name::String)\n\nSet the name of constraint i in model m to name.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Tuple{Tulip.Model, Tulip.ModelName, String}","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(model::Model, ::ModelName, name::String)\n\nSet the ModelName attribute in model\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Tuple{Tulip.Model, Tulip.VariableName, Int64, String}","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model, ::VariableName, j::Int, name::String)\n\nSet the name of variable j in model m to name.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.ConstraintLowerBound, Int64, T}} where T","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model{T}, ::ConstraintLowerBound, i::Int, lb::T)\n\nSet the lower bound of constraint i in model m to lb.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.ConstraintUpperBound, Int64, T}} where T","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model{T}, ::ConstraintUpperBound, i::Int, ub::T)\n\nSet the upper bound of constraint i in model m to ub.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.VariableLowerBound, Int64, T}} where T","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model{T}, ::VariableLowerBound, j::Int, lb::T)\n\nSet the lower bound of variable j in model m to lb.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_attribute-Union{Tuple{T}, Tuple{Tulip.Model{T}, Tulip.VariableUpperBound, Int64, T}} where T","page":"Julia API","title":"Tulip.set_attribute","text":"set_attribute(m::Model{T}, ::VariableUpperBound, j::Int, ub::T)\n\nSet the upper bound of variable j in model m to ub.\n\n\n\n\n\n","category":"method"},{"location":"reference/API/#Tulip.set_parameter-Tuple{Tulip.Model, String, Any}","page":"Julia API","title":"Tulip.set_parameter","text":"set_parameter(m::Model, pname::String, val)\n\nSet the value of parameter pname in model m to val\n\n\n\n\n\n","category":"method"},{"location":"reference/KKT/tlp_cholmod/","page":"TlpCholmod","title":"TlpCholmod","text":"CurrentModule = Tulip.KKT","category":"page"},{"location":"reference/KKT/tlp_cholmod/#TlpCholmod","page":"TlpCholmod","title":"TlpCholmod","text":"","category":"section"},{"location":"reference/KKT/tlp_cholmod/","page":"TlpCholmod","title":"TlpCholmod","text":"TlpCholmod.Backend","category":"page"},{"location":"reference/KKT/tlp_cholmod/#Tulip.KKT.TlpCholmod.Backend","page":"TlpCholmod","title":"Tulip.KKT.TlpCholmod.Backend","text":"Backend\n\nCHOLMOD backend for solving linear systems.\n\nSee CholmodSolver for further details.\n\n\n\n\n\n","category":"type"},{"location":"reference/KKT/tlp_cholmod/","page":"TlpCholmod","title":"TlpCholmod","text":"TlpCholmod.CholmodSolver","category":"page"},{"location":"reference/KKT/tlp_cholmod/#Tulip.KKT.TlpCholmod.CholmodSolver","page":"TlpCholmod","title":"Tulip.KKT.TlpCholmod.CholmodSolver","text":"CholmodSolver{T,S<:AbstractKKTSystem}\n\nCHOLMOD-based KKT solver.\n\nSupported arithmetics\n\nFloat64\n\nSupported systems\n\nK2 via LDLᵀ factorization\nK1 via Cholesky (LLᵀ) factorization\n\nExamples\n\nTo solve the augmented system with CHOLMOD's LDL^T factorization:\n\nset_parameter(tlp_model, \"KKT_Backend\", Tulip.KKT.TlpCholmod.Backend())\nset_parameter(tlp_model, \"KKT_System\", Tulip.KKT.K2())\n\nTo solve the normal equations system with CHOLMOD's Cholesky factorization:\n\nset_parameter(tlp_model, \"KKT_Backend\", Tulip.KKT.TlpCholmod.Backend())\nset_parameter(tlp_model, \"KKT_System\", Tulip.KKT.K1())\n\n\n\n\n\n","category":"type"},{"location":"manual/formulation/#Problem-formulation","page":"Problem formulation","title":"Problem formulation","text":"","category":"section"},{"location":"manual/formulation/#Model-input","page":"Problem formulation","title":"Model input","text":"","category":"section"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"Tulip takes as input LP problems of the form","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":" beginarrayrrcll\n (P) \n displaystyle min_x c^Tx + c_0\n st\n l^b_i leq a_i^T x leq u^b_i forall i = 1 m\n l^x_j leq x_j leq u^x_j forall j = 1 n\n endarray","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"where l^bx u^b x in mathbbR cup - infty + infty , i.e., some of the bounds may be infinite.","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"This original formulation is then converted to standard form.","category":"page"},{"location":"manual/formulation/#Standard-form","page":"Problem formulation","title":"Standard form","text":"","category":"section"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"Internally, Tulip solves LPs of the form","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":" beginarrayrl\n (P) \n displaystyle min_x\n c^T x + c_0\n st\n A x = b\n l leq x leq u\n endarray","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"where x c in mathbbR^n, A in mathbbR^m times n, b in mathbbR^m, and l u in (mathbbR cup -infty +infty )^n, i.e., some bounds may be infinite.","category":"page"},{"location":"manual/formulation/","page":"Problem formulation","title":"Problem formulation","text":"The original problem is automatically reformulated into standard form before the optimization is performed. This transformation is transparent to the user.","category":"page"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"CurrentModule = Tulip","category":"page"},{"location":"reference/attributes/#Attribute-reference","page":"Attributes","title":"Attribute reference","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Attributes are queried using get_attribute and set using set_attribute.","category":"page"},{"location":"reference/attributes/#Model-attributes","page":"Attributes","title":"Model attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Name Type Description\nModelName String Name of the model\nNumberOfConstraints Int Number of constraints in the model\nNumberOfVariables Int Number of variables in the model\nObjectiveValue T Objective value of the current primal solution\nDualObjectiveValue T Objective value of the current dual solution\nObjectiveConstant T Value of the objective constant\nObjectiveSense Optimization sense\nStatus Model status\nBarrierIterations Int Number of barrier iterations\nSolutionTime Float64 Solution time, in seconds","category":"page"},{"location":"reference/attributes/#Variable-attributes","page":"Attributes","title":"Variable attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Name Type Description\nVariableLowerBound T Variable lower bound\nVariableUpperBound T Variable upper bound\nVariableObjectiveCoeff T Variable objective coefficient\nVariableName String Variable name","category":"page"},{"location":"reference/attributes/#Constraint-attributes","page":"Attributes","title":"Constraint attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Name Type Description\nConstraintLowerBound T Constraint lower bound\nConstraintUpperBound T Constraint upper bound\nConstraintName String Constraint name","category":"page"},{"location":"reference/attributes/#Reference","page":"Attributes","title":"Reference","text":"","category":"section"},{"location":"reference/attributes/#Model-attributes-2","page":"Attributes","title":"Model attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Modules = [Tulip]\nPages = [\"src/attributes.jl\"]\nFilter = t -> typeof(t) === DataType && t <: Tulip.AbstractModelAttribute","category":"page"},{"location":"reference/attributes/#Tulip.BarrierIterations","page":"Attributes","title":"Tulip.BarrierIterations","text":"BarrierIterations\n\nNumber of iterations of the barrier algorithm in the last call.\n\nThis number may be zero in the following cases:\n\nthe model has been solved yet\npresolve solved the model\nthe initial solution was optimal\n\nType: Int\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.BarrierIterations())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.DualObjectiveValue","page":"Attributes","title":"Tulip.DualObjectiveValue","text":"DualObjectiveValue\n\nObjective value of the current dual solution.\n\nType: T\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.DualObjectiveValue())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ModelName","page":"Attributes","title":"Tulip.ModelName","text":"ModelName\n\nThe name of the model.\n\nType: String\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.ModelName(), \"lp_example\")\nTulip.get_attribute(model, Tulip.ModelName())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.NumberOfConstraints","page":"Attributes","title":"Tulip.NumberOfConstraints","text":"NumberOfConstraints\n\nNumber of constraints in the model.\n\nType: Int\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.NumberOfConstraints())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.NumberOfVariables","page":"Attributes","title":"Tulip.NumberOfVariables","text":"NumberOfVariables\n\nNumber of variables in the model.\n\nType: Int\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.NumberOfVariables())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ObjectiveConstant","page":"Attributes","title":"Tulip.ObjectiveConstant","text":"ObjectiveConstant\n\nConstant objective offset, defaults to zero.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.ObjectiveConstant(), zero(T))\nTulip.get_attribute(model, Tulip.ObjectiveConstant())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ObjectiveSense","page":"Attributes","title":"Tulip.ObjectiveSense","text":"ObjectiveSense\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ObjectiveValue","page":"Attributes","title":"Tulip.ObjectiveValue","text":"ObjectiveValue\n\nObjective value of the current primal solution.\n\nType: T\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.ObjectiveValue())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.SolutionTime","page":"Attributes","title":"Tulip.SolutionTime","text":"SolutionTime\n\nTotal solution time, in seconds.\n\nType: Float64\n\nModifiable: No\n\nExamples\n\nTulip.get_attribute(model, Tulip.SolutionTime())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.Status","page":"Attributes","title":"Tulip.Status","text":"Status\n\nModel status\n\nType:\n\nModifiable: No\n\nExamples\n\nTulip.get(model, Tulip.Status())\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Variable-attributes-2","page":"Attributes","title":"Variable attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Modules = [Tulip]\nPages = [\"src/attributes.jl\"]\nFilter = t -> typeof(t) === DataType && t <: Tulip.AbstractVariableAttribute","category":"page"},{"location":"reference/attributes/#Tulip.VariableLowerBound","page":"Attributes","title":"Tulip.VariableLowerBound","text":"VariableLowerBound\n\nVariable lower bound.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.VariableLowerBound(), 1, zero(T))\nTulip.get_attribute(model, Tulip.VariableLowerBound(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.VariableName","page":"Attributes","title":"Tulip.VariableName","text":"VariableName\n\nName of the variable.\n\nType: String\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.VariableName(), 1, \"x1\")\nTulip.get_attribute(model, Tulip.VariableName(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.VariableObjectiveCoeff","page":"Attributes","title":"Tulip.VariableObjectiveCoeff","text":"VariableObjectiveCoeff\n\nObjective coefficient of the variable.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.VariableObjectiveCoeff(), 1, one(T))\nTulip.get_attribute(model, Tulip.VariableObjectiveCoeff(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.VariableUpperBound","page":"Attributes","title":"Tulip.VariableUpperBound","text":"VariableUpperBound\n\nVariable upper bound.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.VariableUpperBound(), 1, one(T))\nTulip.get_attribute(model, Tulip.VariableUpperBound(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Constraint-attributes-2","page":"Attributes","title":"Constraint attributes","text":"","category":"section"},{"location":"reference/attributes/","page":"Attributes","title":"Attributes","text":"Modules = [Tulip]\nPages = [\"src/attributes.jl\"]\nFilter = t -> typeof(t) === DataType && t <: Tulip.AbstractConstraintAttribute","category":"page"},{"location":"reference/attributes/#Tulip.ConstraintLowerBound","page":"Attributes","title":"Tulip.ConstraintLowerBound","text":"ConstraintLowerBound\n\nConstraint lower bound.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.ConstraintLowerBound(), 1, zero(T))\nTulip.get_attribute(model, Tulip.ConstraintLowerBound(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ConstraintName","page":"Attributes","title":"Tulip.ConstraintName","text":"ConstraintName\n\nName of the constraint.\n\nType: String\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.ConstraintName(), 1, \"c1\")\nTulip.get_attribute(model, Tulip.ConstraintName(), 1)\n\n\n\n\n\n","category":"type"},{"location":"reference/attributes/#Tulip.ConstraintUpperBound","page":"Attributes","title":"Tulip.ConstraintUpperBound","text":"ConstraintUpperBound\n\nConstraint upper bound.\n\nType: T\n\nModifiable: Yes\n\nExamples\n\nTulip.set_attribute(model, Tulip.ConstraintUpperBound(), 1, one(T))\nTulip.get_attribute(model, Tulip.ConstraintUpperBound(), 1)\n\n\n\n\n\n","category":"type"},{"location":"","page":"Home","title":"Home","text":"CurrentModule = Tulip","category":"page"},{"location":"#Tulip.jl","page":"Home","title":"Tulip.jl","text":"","category":"section"},{"location":"#Overview","page":"Home","title":"Overview","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Tulip is an open-source interior-point solver for linear programming.","category":"page"},{"location":"#Installation","page":"Home","title":"Installation","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Tulip is 100% Julia, so install it just like any Julia package:","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> ]\npkg> add Tulip","category":"page"},{"location":"","page":"Home","title":"Home","text":"No additional building step is required.","category":"page"},{"location":"#Citing-Tulip.jl","page":"Home","title":"Citing Tulip.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"If you use Tulip in your work, we kindly ask that you cite the following reference. The PDF is freely available here, and serves as a user manual for advanced users.","category":"page"},{"location":"","page":"Home","title":"Home","text":"@TechReport{Tulip.jl,\n title = {{Tulip}.jl: an open-source interior-point linear optimization\n solver with abstract linear algebra},\n url = {https://www.gerad.ca/fr/papers/G-2019-36},\n Journal = {Les Cahiers du Gerad},\n Author = {Anjos, Miguel F. and Lodi, Andrea and Tanneau, Mathieu},\n year = {2019}\n}","category":"page"},{"location":"reference/options/","page":"Options","title":"Options","text":"CurrentModule = Tulip","category":"page"},{"location":"reference/options/#Options-reference","page":"Options","title":"Options reference","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameters can be queried and set through the get_parameter and set_parameter functions.","category":"page"},{"location":"reference/options/","page":"Options","title":"Options","text":"In all that follows, epsilon refers to the numerical precision, which is given by eps(Tv) where Tv is the arithmetic of the current model. For instance, in double-precision arithmetic, i.e., Tv=Float64, we have epsilon simeq 10^-16.","category":"page"},{"location":"reference/options/","page":"Options","title":"Options","text":"Factory","category":"page"},{"location":"reference/options/#Tulip.Factory","page":"Options","title":"Tulip.Factory","text":"Factory{T}\n\nFactory-like struct for passing options to lower-level components.\n\n\n\n\n\n","category":"type"},{"location":"reference/options/#IPM","page":"Options","title":"IPM","text":"","category":"section"},{"location":"reference/options/#Tolerances","page":"Options","title":"Tolerances","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Numerical tolerances for the interior-point algorithm.","category":"page"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nTolerancePFeas Primal feasibility tolerance sqrtepsilon\nToleranceDFeas Dual feasibility tolerance sqrtepsilon\nToleranceRGap Relative optimality gap tolerance sqrtepsilon\nToleranceIFeas Infeasibility tolerance sqrtepsilon","category":"page"},{"location":"reference/options/#Algorithmic-parameters","page":"Options","title":"Algorithmic parameters","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nBarrierAlgorithm Interior-point algorithm 1\nCorrectionLimit Maximum number of additional centrality corrections 5\nStepDampFactor Step 0.9995\nGammaMin Minimum value of gamma for computing correctors 0.1\nCentralityOutlierThreshold Relative threshold for computing extra centrality corrections 0.1\nPRegMin Minimum value of primal regularization sqrtepsilon\nDRegMin Minimum value of dual regularization sqrtepsilon","category":"page"},{"location":"reference/options/#Stopping-criterion","page":"Options","title":"Stopping criterion","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nIterationsLimit Maximum number of barrier iterations 100\nTimeLimit Time limit, in seconds Inf","category":"page"},{"location":"reference/options/#KKT","page":"Options","title":"KKT","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nBackend See KKT backends KKT.DefaultKKTBackend\nSystem See KKT systems KKT.DefaultKKTSystem","category":"page"},{"location":"reference/options/#Linear-Algebra","page":"Options","title":"Linear Algebra","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"These parameters control the linear algebra implementation","category":"page"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nMatrixFactory See Factory Factory(SparseMatrixCSC)","category":"page"},{"location":"reference/options/#Presolve","page":"Options","title":"Presolve","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"These parameters control the execution of the presolve phase. They should be called as \"Presolve_\".","category":"page"},{"location":"reference/options/#Others","page":"Options","title":"Others","text":"","category":"section"},{"location":"reference/options/","page":"Options","title":"Options","text":"Parameter Description Default\nOutputLevel Controls the solver's output 0\nThreads Maximum number of threads 1\nPresolve Presolve (no presolve if set to ≤ 0) 1","category":"page"}] } diff --git a/dev/tutorials/lp_example/index.html b/dev/tutorials/lp_example/index.html index 4e8c4290..dbd06d0e 100644 --- a/dev/tutorials/lp_example/index.html +++ b/dev/tutorials/lp_example/index.html @@ -137,4 +137,4 @@ @printf "Z* = %.4f\n" objval @printf "x* = %.4f\n" x_ -@printf "y* = %.4f\n" y_ +@printf "y* = %.4f\n" y_