|
2 | 2 | title: "The JuMP ecosystem"
|
3 | 3 | ---
|
4 | 4 |
|
5 |
| -The JuMP project consists of the main [JuMP](https://github.com/juliaopt/JuMP.jl) |
| 5 | +The JuMP project consists of the main [JuMP](https://github.com/jump-dev/JuMP.jl) |
6 | 6 | package, and a large collection of supporting Julia packages.
|
7 | 7 |
|
8 | 8 | The JuMP source code can be found at [https://github.com/jump-dev/JuMP.jl](https://github.com/jump-dev/JuMP.jl).
|
9 | 9 |
|
10 |
| -Beneath JuMP, there is an abstraction layer called MathOptInterface ([source code](https://github.com/jump-dev/MathOptInterface.jl)). MathOptInterface defines an API that solvers |
11 |
| -should implement so that they can be used by JuMP, handles the automatic |
12 |
| -reformulation of problems via _bridges_, and has a large infrastructure for |
13 |
| -automatically testing solvers. |
| 10 | +## MathOptInterface |
14 | 11 |
|
15 |
| -At the bottom of the stack, there are solver wrappers. These packages wrap the |
16 |
| -solvers, which are often written in C or C++, and implement the API defined by |
17 |
| -MathOptInterface. |
| 12 | +Beneath JuMP, there is an abstraction layer called MathOptInterface |
| 13 | +([source code](https://github.com/jump-dev/MathOptInterface.jl)). |
| 14 | + |
| 15 | +MathOptInterface defines an API that solvers should implement so that they can |
| 16 | +be used by JuMP, handles the automatic reformulation of problems via _bridges_, |
| 17 | +and has a large infrastructure for automatically testing solvers. |
| 18 | + |
| 19 | +## Solvers and solver-wrappers |
| 20 | + |
| 21 | +At the bottom of the stack, there are solvers. These packages are either |
| 22 | +pure-Julia implementations of optimization algorithms, or they provide a Julia |
| 23 | +interface to external solvers (often written in C or C++). Each solver also |
| 24 | +implements the API defined by MathOptInterface so that it can be used from JuMP. |
18 | 25 |
|
19 | 26 | A non-exhaustive list of solvers available through JuMP is available in the
|
20 | 27 | [JuMP documentation](https://jump.dev/JuMP.jl/stable/installation/#Getting-Solvers-1).
|
| 28 | + |
| 29 | +## JuMP extensions |
| 30 | + |
| 31 | +JuMP extensions are Julia packages which extend JuMP's algebraic modeling language |
| 32 | +by providing additional syntax and functionality for specific problem classes. |
| 33 | + |
| 34 | +Examples of JuMP extensions include: |
| 35 | + * [BilevelJuMP](https://github.com/joaquimg/BilevelJuMP.jl), which extends JuMP |
| 36 | + to support bi-level programs. |
| 37 | + * [Coluna.jl](https://github.com/atoptima/Coluna.jl), which extends JuMP to |
| 38 | + support a branch-and-cut-and-price solution framework. |
| 39 | + * [InfiniteOpt](https://github.com/pulsipher/InfiniteOpt.jl), which extends |
| 40 | + JuMP to support infinite-dimensional optimization problems. |
| 41 | + * [Plasmo.jl](https://github.com/zavalab/Plasmo.jl), which extends JuMP to |
| 42 | + support a graph-based algebraic modeling framework. |
| 43 | + * [SDDP.jl](https://github.com/odow/SDDP.jl), which extends JuMP to support |
| 44 | + multistage stochastic programs. |
| 45 | + * [StochasticPrograms.jl](https://github.com/mbiel/StochasticPrograms.jl), which |
| 46 | + extends JuMP to support stochastic programs. |
| 47 | + * [SumOfSquares](https://github.com/jump-dev/SumOfSquares.jl), which extends |
| 48 | + JuMP to support polynomial optimization. |
| 49 | + * [vOptGeneric.jl](https://github.com/vOptSolver/vOptGeneric.jl), which extends |
| 50 | + JuMP to support multiobjective programs. |
| 51 | + |
| 52 | +Note that with the exception of SumOfSquares, these JuMP extensions are not part of |
| 53 | +the core JuMP-dev ecosystem, but are developed independently by the community. |
| 54 | + |
| 55 | +(This list of JuMP extensions is open to new contributions! If you know one that |
| 56 | +isn't listed here, tell us by making a pull-request to edit the file [code.md](https://github.com/jump-dev/jump-dev.github.io/blob/master/pages/code.md).) |
| 57 | + |
| 58 | +## Convex.jl |
| 59 | + |
| 60 | +An alternative to JuMP is [Convex.jl](https://jump.dev/Convex.jl/stable/). |
| 61 | +Convex.jl is a Julia package for disciplined convex programming, built on-top-of |
| 62 | +MathOptInterface. Thus, it can use all of the same MathOptInterface-compatible |
| 63 | +solvers as JuMP. |
0 commit comments