Tulip
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.
License
Tulip is licensed under the MPL 2.0 license.
Installation
Install Tulip using the Julia package manager:
import PkgPkg.add("Tulip")Usage
The recommended way of using Tulip is through JuMP or MathOptInterface (MOI).
The low-level interface is still under development and is likely change in the future. The MOI interface is more stable.
Using with JuMP
Tulip follows the syntax convention PackageName.Optimizer:
using JuMPimport Tulipmodel = Model(Tulip.Optimizer)Linear objectives, linear constraints and lower/upper bounds on variables are supported.
Using with MOI
The type Tulip.Optimizer is parametrized by the model's arithmetic, for example, Float64 or BigFloat. This allows to solve problem in higher numerical precision. See the documentation for more details.
import MathOptInterface as MOIimport Tulipmodel = Tulip.Optimizer{Float64}() # Create a model in Float64 precisionmodel = Tulip.Optimizer() # Defaults to the above callmodel = Tulip.Optimizer{BigFloat}() # Create a model in BigFloat precisionSolver parameters
See the documentation for a full list of parameters.
To set parameters in JuMP, use:
using JuMP, Tulipmodel = Model(Tulip.Optimizer)set_attribute(model, "IPM_IterationsLimit", 200)To set parameters in MathOptInterface, use:
using Tulipimport MathOptInterface as MOImodel = Tulip.Optimizer{Float64}()MOI.set(model, MOI.RawOptimizerAttribute("IPM_IterationsLimit"), 200)To set parameters in the Tulip API, use:
using Tulipmodel = Tulip.Model{Float64}()Tulip.set_parameter(model, "IPM_IterationsLimit", 200)Command-line executable
See app building instructions.
Citing Tulip.jl
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},
}