Documentation | Build Status | Coverage |
---|---|---|
Tulip is an open-source interior-point solver for linear optimization, written in pure Julia. It implements the homogeneous primal-dual interior-point algorithm with multiple centrality corrections, and therefore handles unbounded and infeasible problems. Tulip’s main feature is that its algorithmic framework is disentangled from linear algebra implementations. This allows to seamlessly integrate specialized routines for structured problems.
Just install like any Julia package
] add Tulip
The recommended way of using Tulip is through JuMP and/or MathOptInterface (MOI).
The low-level interface is still under development and is likely change in the future. The MOI interface is more stable.
Tulip follows the syntax convention PackageName.Optimizer
:
using JuMP
import Tulip
model = Model(Tulip.Optimizer)
Linear objectives, linear constraints and lower/upper bounds on variables are supported.
The type Tulip.Optimizer
is parametrized by the model's arithmetic, e.g., Float64
or BigFloat
.
This allows to solve problem in higher numerical precision.
See the documentation for more details.
import MathOptInterface
MOI = MathOptInterface
import Tulip
model = Tulip.Optimizer{Float64}() # Create a model in Float64 precision
model = Tulip.Optimizer() # Defaults to the above call
model = Tulip.Optimizer{BigFloat}() # Create a model in BigFloat precision
When using Tulip through JuMP/MOI, parameters can be set either through MOI's generic OptimizerAttribute
s, e.g., MOI.TimeLimitSec
and MOI.Silent
, or by name.
-
Through JuMP
jump_model = JuMP.Model(Tulip.Optimizer) JuMP.set_optimizer_attribute(jump_model, "IPM_IterationsLimit", 200)
-
Through MOI
moi_model = Tulip.Optimizer{Float64}() MOI.set(moi_model, MOI.RawOptimizerAttribute("IPM_IterationsLimit"), 200)
-
Through Tulip's API
model = Tulip.Model{Float64}() Tulip.set_parameter(model, "IPM_IterationsLimit", 200)
See the documentation.
See app building instructions.
If you use Tulip in your work, we kindly ask that you cite the following reference (preprint available here).
@Article{Tulip.jl,
author = {Tanneau, Mathieu and Anjos, Miguel F. and Lodi, Andrea},
journal = {Mathematical Programming Computation},
title = {Design and implementation of a modular interior-point solver for linear optimization},
year = {2021},
issn = {1867-2957},
month = feb,
doi = {10.1007/s12532-020-00200-8},
language = {en},
url = {https://doi.org/10.1007/s12532-020-00200-8},
urldate = {2021-03-07},
}