What is JuMP?
JuMP is a modeling language and collection of supporting packages for mathematical optimization in Julia.
JuMP makes it easy to formulate and solve a range of problem classes, including linear programs, integer programs, conic programs, semidefinite programs, and constrained nonlinear programs. Here’s an example:
julia> using JuMP, Ipopt
julia> function solve_constrained_least_squares_regression(A::Matrix, b::Vector)
m, n = size(A)
model = Model(Ipopt.Optimizer)
set_silent(model)
@variable(model, x[1:n])
@variable(model, residuals[1:m])
@constraint(model, residuals == A * x - b)
@constraint(model, sum(x) == 1)
@objective(model, Min, sum(residuals.^2))
optimize!(model)
return value.(x)
end
solve_constrained_least_squares_regression (generic function with 1 method)
julia> A, b = rand(10, 3), rand(10);
julia> x = solve_constrained_least_squares_regression(A, b)
3-element Vector{Float64}:
0.4137624719002825
0.09707679853084578
0.48916072956887174
JuMP is used…
- to model and solve real-world problems, including
- large-scale inventory routing problems at Renault
- train scheduling at Thales Inc.
- power grid expansion planning at PSR
- school bus routing for Boston Public Schools
- to teach optimization at universities around the world, including
- to build continental-scale energy system models, including
- MIT’s GenX
- the National Renewable Energy Laboratory’s Sienna
- Spine’s SpineOpt.jl
- TNO’s TulipaEnergyModel.jl (part of the NextGenOpt project)
- to accelerate pre-exascale metabolic modeling workflows at PerMedCoE
- to write hundreds of research papers each year, on topics such as
Resources for getting started
- Decide if you should use JuMP by reading Should I use JuMP?
- Install JuMP and Julia by reading the Installation Guide
- Learn Julia by reading Getting started with Julia
- Solve your first JuMP model by reading Getting started with JuMP
- Get help by joining the community forum to search for answers to commonly asked questions.
There is a growing collection of third-party materials about JuMP. This includes the book, Julia Programming for Operations Research, which covers a variety of topics on optimization, with an emphasis on solving practical problems using JuMP and Julia.
Get involved
Here are some things you can do to become more involved in the JuMP community:
- Help answer questions on the community forum
- Star and watch the repository
- Read the contributing guide
- Read about our governance structure
- Join the developer chatroom
- Attend upcoming events
See also
The JuMP ecosystem includes Convex.jl, an algebraic modeling language for convex optimization based on the concept of Disciplined Convex Programming.
Outside of the JuMP organization:
- JuliaSmoothOptimizers provides a collection of tools primarily designed for developing solvers for smooth nonlinear optimization.
- JuliaNLSolvers offers implementations in Julia of standard optimization algorithms for unconstrained or box-constrained problems such as BFGS, Nelder-Mead, conjugate gradient, etc.
- JuliaHub lists 200+ optimization packages in Julia!
NumFOCUS
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.