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