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!
See NEWS for a list of the significant breaking changes in the JuMP 0.19 release.
Latest Release: 0.20.0 (release-0.20
branch)
- Documentation
- Examples
- Testing status:
Development version (master
branch):
- Documentation
- Examples
- Testing status:
- Changes: see NEWS
- Developer chatroom
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.
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
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.
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 is a Sponsored Project of NumFOCUS, a 501(c)(3) nonprofit charity in the United States. NumFOCUS provides JuMP with fiscal, legal, and administrative support to help ensure the health and sustainability of the project. Visit numfocus.org for more information.
You can support JuMP by donating.
Donations to JuMP are managed by NumFOCUS. For donors in the United States, your gift is tax-deductible to the extent provided by law. As with any donation, you should consult with your tax adviser about your particular tax situation.
JuMP's largest expense is the annual JuMP-dev workshop. Donations will help us provide travel support for JuMP-dev attendees and take advantage of other opportunities that arise to support JuMP development.