JuMP.jl

Modeling language for Mathematical Optimization (linear, mixed-integer, conic, semidefinite, nonlinear)

Subscribe to updates I use JuMP.jl


Statistics on JuMP.jl

Number of watchers on Github 457
Number of open issues 56
Average time to close an issue 4 days
Main language Julia
Average time to merge a PR 2 days
Open pull requests 44+
Closed pull requests 21+
Last commit 4 months ago
Repo Created almost 6 years ago
Repo Last Updated 4 months ago
Size 9.72 MB
Organization / Authorjuliaopt
Latest Releasev0.18.0
Contributors18
Page Updated
Do you use JuMP.jl? Leave a review!
View open issues (56)
View JuMP.jl activity
View on github
Latest Open Source Launches
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating JuMP.jl for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

JuMP

JuMP is a domain-specific modeling language for mathematical optimization embedded in Julia. It currently supports a number of open-source and commercial solvers (Artelys Knitro, BARON, Bonmin, Cbc, Clp, Couenne, CPLEX, ECOS, FICO Xpress, GLPK, Gurobi, Ipopt, MOSEK, NLopt, SCS) for a variety of problem classes, including linear programming, (mixed) integer programming, second-order conic programming, semidefinite programming, and nonlinear programming.

JuMP makes it easy to specify and solve optimization problems without expert knowledge, yet at the same time allows experts to implement advanced algorithmic techniques such as exploiting efficient hot-starts in linear programming or using callbacks to interact with branch-and-bound solvers. JuMP is also fast - benchmarking has shown that it can create problems at similar speeds to special-purpose commercial tools such as AMPL while maintaining the expressiveness of a generic high-level programming language. JuMP can be easily embedded in complex work flows including simulations and web servers.

Our documentation includes an installation guide, quick-start guide, and reference manual. The juliaopt-notebooks repository contains a small but growing collection of contributed examples. Submissions are welcome!

Latest Release: 0.18.0 (release-0.18 branch)

Read about the upcoming transition to MathOptInterface (MOI) and breaking changes in JuMP 0.19 here.

The master branch now includes these breaking changes, but we do not yet recommend using this branch unless you are a JuMP developer or solver developer.

Development version (master branch):

Installation

JuMP can be installed through the Julia package manager:

julia> Pkg.add("JuMP")

For full installation instructions, including how to install solvers, see the documentation linked above.

Supported problem classes

Mathematical optimization encompasses a large variety of problem classes. We list below what is currently supported. See the documentation for more information.

Objective types

  • Linear
  • Convex Quadratic
  • Nonlinear (convex and nonconvex)

Constraint types

  • Linear
  • Convex Quadratic
  • Second-order Conic
  • Semidefinite
  • Nonlinear (convex and nonconvex)

Variable types

  • Continuous
  • Integer-valued
  • Semicontinuous
  • Semi-integer

Bug reports and support

Please report any issues via the Github issue tracker. All types of issues are welcome and encouraged; this includes bug reports, documentation typos, feature requests, etc. The Optimization (Mathematical) category on Discourse is appropriate for general discussion, including how do I do this? questions.

Citing JuMP

If you find JuMP useful in your work, we kindly request that you cite the following paper (pdf):

@article{DunningHuchetteLubin2017,
author = {Iain Dunning and Joey Huchette and Miles Lubin},
title = {JuMP: A Modeling Language for Mathematical Optimization},
journal = {SIAM Review},
volume = {59},
number = {2},
pages = {295-320},
year = {2017},
doi = {10.1137/15M1020575},
}

For an earlier work where we presented a prototype implementation of JuMP, see here:

@article{LubinDunningIJOC,
author = {Miles Lubin and Iain Dunning},
title = {Computing in Operations Research Using Julia},
journal = {INFORMS Journal on Computing},
volume = {27},
number = {2},
pages = {238-248},
year = {2015},
doi = {10.1287/ijoc.2014.0623},
}

A preprint of this paper is freely available.

JuMP.jl open issues Ask a question     (View All Issues)
  • over 1 year JuMP is ignoring callbacks if using a conic solver
  • over 1 year vecnorm with generator syntax
  • over 1 year Changing objective function from quadratic to linear
  • over 1 year MethodError when matrix-multiplying transpose of sparse matrix
  • over 1 year Anonymous single non-linear expression
  • over 1 year Assert error with closures used with user defined function
  • over 1 year constraint names, better print behavior
  • over 1 year Support Callbacks with nonlinear models
  • over 1 year constraints being ignored/removed
  • almost 2 years Coveralls: Source not available
  • almost 2 years writeLP does not include SOS constraints
  • almost 2 years Scope of index variables
  • almost 2 years Pkg.test("JuMP") problem on v 0.6 at nonlinear test
  • almost 2 years Concatenation of JuMPArrays
  • almost 2 years Iterable JuMPArray
  • almost 2 years update inline comments for buildrefsets and getloopedcode
  • almost 2 years Make function registration local
  • almost 2 years Make ``JuMP.register`` optional
  • about 2 years testing whether a JuMP expression == 0
  • about 2 years Solver support for setvalue
  • about 2 years docs are a bit confusing on name vs basename
  • about 2 years WIP Julia 0.5 perf regressions
  • about 2 years getvalue slow for nonlinear expressions
  • about 2 years make variable category a kwarg
  • about 2 years allow more of the newly named functions to take vector arguments
  • over 2 years Indexing 0-based JuMPArray: end keyword throws errors
  • over 2 years add syntax for creating exponential cone constraints
  • over 2 years Its kind of weird we export `at-LinearConstraint` and `at-QuadConstraint`
  • over 2 years Strange macro error with division
  • over 2 years Using macros within nonlinear expressions
JuMP.jl open pull requests (View All Pulls)
  • take in model object as first argument to @defExpr
  • Add precompile entries autogenerated by SnoopCompile
  • [WIP] New manual
  • DNMY: rely on promote_op for many operations
  • [WIP] Macro extension interface
  • WIP: Documentation v2
  • implement defVars macro
  • deprecate @defConstrRef
  • WIP: documentation for extensions
  • For your consideration: Latex-y
  • Just for fun: presolving in JuMP
  • debugging work for travis failure on master
  • Renaming of functions and types
  • Better error message when only a symbol is passed to constraint macro
  • support for _locally_ valid lazy constraints and user cuts
  • Deprecate updatemodel!
  • WIP: avoid generating rows for variables already in varcones
  • handling the "local cuts" variant for lazy constraints and user cuts
  • allow anonymous variables in @variable
  • Add getconstraint (close #639)
  • Write out default bounds in MPS writer. Closes #792
  • Copy extension dictionaries
  • collect index sets for printing
  • Permit info callbacks in states other than MIPInfo
  • Fixing KeyIterator used for JuMPArray to work also when index sets are non indexable.
  • drop support for Julia 0.4
  • Adding JuMPKey as elements of keys(::JuMPArray) and keys(::JuMPDict)
  • Implement NLopt parameter change to avoid hanging during test
  • Avoid test failure if SCS is not loaded
  • call registercallbacks also for NLPs
  • WIP: move from FactCheck to Base.Test
  • Fix #889
  • add category keyword argument to variable macro
  • return simplified expression graphs via NLPEvaluator
  • Add fix function for #919
  • update citation info
  • WIP: Add syntax for set inclusion constraints
  • [WIP] add support for general conic constraints
  • save optimization data for ``stat !=: Optimal`` nlp problems
  • WIP: Refactoring JuMP.solve
  • nightly -> 0.6 in Travis and AppVeyor
  • Update solvers.jl
  • Unexported solvers
  • Gets JuMP to compile on 0.7
JuMP.jl list of languages used
Other projects in Julia