|
1 | 1 | # MathOptInterface |
2 | 2 |
|
3 | | -[MathOptInterface.jl](https://github.com/jump-dev/MathOptInterface.jl) is a standardized API for mathematical optimization solvers. |
| 3 | +Each mathematical optimization solver API has its own concepts and data |
| 4 | +structures for representing optimization models and obtaining results. |
| 5 | +However, it is often desirable to represent an instance of an optimization |
| 6 | +problem at a higher level so that it is easy to try using different solvers. |
4 | 7 |
|
5 | | -```@contents |
6 | | -Pages = ["apimanual.md", "apireference.md", "testing.md"] |
7 | | -Depth = 3 |
| 8 | +[MathOptInterface.jl](https://github.com/jump-dev/MathOptInterface.jl) (MOI) is |
| 9 | +an abstraction layer designed to provide a unified interface to mathematical |
| 10 | +optimization solvers so that users do not need to understand multiple |
| 11 | +solver-specific APIs. |
| 12 | + |
| 13 | +MOI can be used directly, or through a higher-level modeling interface like |
| 14 | +[JuMP](https://github.com/jump-dev/JuMP.jl). |
| 15 | + |
| 16 | +## Background |
| 17 | + |
| 18 | +MOI has been designed to replace [MathProgBase](https://github.com/JuliaOpt/MathProgBase.jl), |
| 19 | +which was been used by modeling packages such as [JuMP](https://github.com/jump-dev/JuMP.jl) |
| 20 | +and [Convex.jl](https://github.com/jump-dev/Convex.jl). |
| 21 | + |
| 22 | +This second-generation abstraction layer addresses a number of limitations of |
| 23 | +MathProgBase. MOI is designed to: |
| 24 | +- Be simple and extensible, unifying linear, quadratic, and conic optimization, |
| 25 | + and seamlessly facilitate extensions to essentially arbitrary constraints and |
| 26 | + functions (e.g., indicator constraints, complementarity constraints, and |
| 27 | + piecewise-linear functions) |
| 28 | +- Be fast by allowing access to a solver's in-memory representation of a problem |
| 29 | + without writing intermediate files (when possible) and by using multiple |
| 30 | + dispatch and avoiding requiring containers of nonconcrete types |
| 31 | +- Allow a solver to return multiple results (e.g., a pool of solutions) |
| 32 | +- Allow a solver to return extra arbitrary information via attributes (e.g., |
| 33 | + variable- and constraint-wise membership in an irreducible inconsistent subset |
| 34 | + for infeasibility analysis) |
| 35 | +- Provide a greatly expanded set of status codes explaining what happened during |
| 36 | + the optimization procedure |
| 37 | +- Enable a solver to more precisely specify which problem classes it supports |
| 38 | +- Enable both primal and dual warm starts |
| 39 | +- Enable adding and removing both variables and constraints by indices that are |
| 40 | + not required to be consecutive |
| 41 | +- Enable any modification that the solver supports to an existing model |
| 42 | +- Avoid requiring the solver wrapper to store an additional copy of the problem |
| 43 | + data |
| 44 | + |
| 45 | +## Sections of this documentation |
| 46 | + |
| 47 | +There are two main sections to this documentation. |
| 48 | + |
| 49 | +The manual introduces the concepts needed to understand MOI and gives a |
| 50 | +high-level picture of how all of the pieces fit together. The primary focus of |
| 51 | +[Basic usage](@ref) is on MOI from the perspective of a user of the interface. |
| 52 | +The section [Advanced usage](@ref) provides more detail on advanced topics |
| 53 | +such as [Duality](@ref). The manual also has a section on [Implementing a solver interface](@ref). |
| 54 | + |
| 55 | +In addition to the basic API, MathOptInterface.jl contains a number of |
| 56 | +submodules to help users interact with a model in MathOptInterface form. These |
| 57 | +include: |
| 58 | + - [The `Benchmarks` submodule](@ref) |
| 59 | + - [The `Bridges` submodule](@ref) |
| 60 | + - [The `FileFormats` submodule](@ref) |
| 61 | + - [The `Utilities` submodule](@ref) |
| 62 | + - [The `Test` submodule](@ref) |
| 63 | + |
| 64 | +The [API Reference](@ref) page lists the complete API. |
| 65 | + |
| 66 | +## Further reading |
| 67 | + |
| 68 | +A [paper describing the design and features of MathOptInterface](https://arxiv.org/abs/2002.03447) |
| 69 | +is available on [arXiv](https://arxiv.org). |
| 70 | + |
| 71 | +If you find MathOptInterface useful in your work, we kindly request that you |
| 72 | +cite the following paper: |
| 73 | +``` |
| 74 | +@misc{ |
| 75 | + legat2020mathoptinterface, |
| 76 | + title = {MathOptInterface: a data structure for mathematical optimization problems}, |
| 77 | + author = {Beno{\^i}t Legat and Oscar Dowson and Joaquim Dias Garcia and Miles Lubin}, |
| 78 | + year = {2020}, |
| 79 | + eprint = {2002.03447}, |
| 80 | + archivePrefix = {arXiv}, |
| 81 | + primaryClass = {math.OC}, |
| 82 | + url = {https://arxiv.org/abs/2002.03447}, |
| 83 | +} |
8 | 84 | ``` |
0 commit comments