Coder Social home page Coder Social logo

tulip.jl's Introduction

Tulip

DOI

Documentation Build Status Coverage
Docs Docs-dev Build Codecov

Overview

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.

Installation

Just install like any Julia package

] add Tulip

Usage

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.

Using with JuMP

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.

Using with MOI

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

Solver parameters

Setting parameters

When using Tulip through JuMP/MOI, parameters can be set either through MOI's generic OptimizerAttributes, 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)

Parameters description

See the documentation.

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},
}

tulip.jl's People

Contributors

amontoison avatar blegat avatar devmotion avatar fredrikekre avatar github-actions[bot] avatar juliatagbot avatar matbesancon avatar mtanneau avatar nsajko avatar odow avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.