Standard form problem
MathOptInterface represents optimization problems in the standard form:
\[\begin{align} & \min_{x \in \mathbb{R}^n} & f_0(x) \\ & \;\;\text{s.t.} & f_i(x) & \in \mathcal{S}_i & i = 1 \ldots m \end{align}\]
where:
- the functions $f_0, f_1, \ldots, f_m$ are specified by
AbstractFunction
objects - the sets $\mathcal{S}_1, \ldots, \mathcal{S}_m$ are specified by
AbstractSet
objects
For more information on this standard form, read our paper.
MOI defines some commonly used functions and sets, but the interface is extensible to other sets recognized by the solver.
Functions
The function types implemented in MathOptInterface.jl are:
Function | Description |
---|---|
VariableIndex | $x_j$, the projection onto a single coordinate defined by a variable index $j$. |
VectorOfVariables | The projection onto multiple coordinates (that is, extracting a sub-vector). |
ScalarAffineFunction | $a^T x + b$, where $a$ is a vector and $b$ scalar. |
ScalarNonlinearFunction | $f(x)$, where $f$ is a nonlinear function. |
VectorAffineFunction | $A x + b$, where $A$ is a matrix and $b$ is a vector. |
ScalarQuadraticFunction | $\frac{1}{2} x^T Q x + a^T x + b$, where $Q$ is a symmetric matrix, $a$ is a vector, and $b$ is a constant. |
VectorQuadraticFunction | A vector of scalar-valued quadratic functions. |
VectorNonlinearFunction | $f(x)$, where $f$ is a vector-valued nonlinear function. |
Extensions for nonlinear programming are present but not yet well documented.
One-dimensional sets
The one-dimensional set types implemented in MathOptInterface.jl are:
Set | Description |
---|---|
LessThan(u) | $(-\infty, u]$ |
GreaterThan(l) | $[l, \infty)$ |
EqualTo(v) | $\{v\}$ |
Interval(l, u) | $[l, u]$ |
Integer() | $\mathbb{Z}$ |
ZeroOne() | $\{ 0, 1 \}$ |
Semicontinuous(l, u) | $\{ 0\} \cup [l, u]$ |
Semiinteger(l, u) | $\{ 0\} \cup \{l,l+1,\ldots,u-1,u\}$ |
Vector cones
The vector-valued set types implemented in MathOptInterface.jl are:
Set | Description |
---|---|
Reals(d) | $\mathbb{R}^{d}$ |
Zeros(d) | $0^{d}$ |
Nonnegatives(d) | $\{ x \in \mathbb{R}^{d} : x \ge 0 \}$ |
Nonpositives(d) | $\{ x \in \mathbb{R}^{d} : x \le 0 \}$ |
SecondOrderCone(d) | $\{ (t,x) \in \mathbb{R}^{d} : t \ge \lVert x \rVert_2 \}$ |
RotatedSecondOrderCone(d) | $\{ (t,u,x) \in \mathbb{R}^{d} : 2tu \ge \lVert x \rVert_2^2, t \ge 0,u \ge 0 \}$ |
ExponentialCone() | $\{ (x,y,z) \in \mathbb{R}^3 : y \exp (x/y) \le z, y > 0 \}$ |
DualExponentialCone() | $\{ (u,v,w) \in \mathbb{R}^3 : -u \exp (v/u) \le \exp(1) w, u < 0 \}$ |
GeometricMeanCone(d) | $\{ (t,x) \in \mathbb{R}^{1+n} : x \ge 0, t \le \sqrt[n]{x_1 x_2 \cdots x_n} \}$ where $n$ is $d - 1$ |
PowerCone(α) | $\{ (x,y,z) \in \mathbb{R}^3 : x^{\alpha} y^{1-\alpha} \ge |z|, x \ge 0,y \ge 0 \}$ |
DualPowerCone(α) | $\{ (u,v,w) \in \mathbb{R}^3 : \left(\frac{u}{\alpha}\right)^{\alpha}\left(\frac{v}{1-\alpha}\right)^{1-\alpha} \ge |w|, u,v \ge 0 \}$ |
NormOneCone(d) | $\{ (t,x) \in \mathbb{R}^{d} : t \ge \sum_i \lvert x_i \rvert \}$ |
NormInfinityCone(d) | $\{ (t,x) \in \mathbb{R}^{d} : t \ge \max_i \lvert x_i \rvert \}$ |
RelativeEntropyCone(d) | $\{ (u, v, w) \in \mathbb{R}^{d} : u \ge \sum_i w_i \log (\frac{w_i}{v_i}), v_i \ge 0, w_i \ge 0 \}$ |
HyperRectangle(l, u) | $\{x \in \bar{\mathbb{R}}^d: x_i \in [l_i, u_i] \forall i=1,\ldots,d\}$ |
NormCone(p, d) | $\{ (t,x) \in \mathbb{R}^{d} : t \ge \left(\sum\limits_i \lvert x_i \rvert^p\right)^{\frac{1}{p}} \}$ |
Matrix cones
The matrix-valued set types implemented in MathOptInterface.jl are:
Set | Description |
---|---|
RootDetConeTriangle(d) | $\{ (t,X) \in \mathbb{R}^{1+d(1+d)/2} : t \le \det(X)^{1/d}, X \mbox{ is the upper triangle of a PSD matrix} \}$ |
RootDetConeSquare(d) | $\{ (t,X) \in \mathbb{R}^{1+d^2} : t \le \det(X)^{1/d}, X \mbox{ is a PSD matrix} \}$ |
PositiveSemidefiniteConeTriangle(d) | $\{ X \in \mathbb{R}^{d(d+1)/2} : X \mbox{ is the upper triangle of a PSD matrix} \}$ |
PositiveSemidefiniteConeSquare(d) | $\{ X \in \mathbb{R}^{d^2} : X \mbox{ is a PSD matrix} \}$ |
LogDetConeTriangle(d) | $\{ (t,u,X) \in \mathbb{R}^{2+d(1+d)/2} : t \le u\log(\det(X/u)), X \mbox{ is the upper triangle of a PSD matrix}, u > 0 \}$ |
LogDetConeSquare(d) | $\{ (t,u,X) \in \mathbb{R}^{2+d^2} : t \le u \log(\det(X/u)), X \mbox{ is a PSD matrix}, u > 0 \}$ |
NormSpectralCone(r, c) | $\{ (t, X) \in \mathbb{R}^{1 + r \times c} : t \ge \sigma_1(X), X \mbox{ is a } r\times c\mbox{ matrix} \}$ |
NormNuclearCone(r, c) | $\{ (t, X) \in \mathbb{R}^{1 + r \times c} : t \ge \sum_i \sigma_i(X), X \mbox{ is a } r\times c\mbox{ matrix} \}$ |
HermitianPositiveSemidefiniteConeTriangle(d) | The cone of Hermitian positive semidefinite matrices, with |
side_dimension rows and columns. | |
Scaled(S) | The set S scaled so that Utilities.set_dot corresponds to LinearAlgebra.dot |
Some of these cones can take two forms: XXXConeTriangle
and XXXConeSquare
.
In XXXConeTriangle
sets, the matrix is assumed to be symmetric, and the elements are provided by a vector, in which the entries of the upper-right triangular part of the matrix are given column by column (or equivalently, the entries of the lower-left triangular part are given row by row).
In XXXConeSquare
sets, the entries of the matrix are given column by column (or equivalently, row by row), and the matrix is constrained to be symmetric. As an example, given a 2-by-2 matrix of variables X
and a one-dimensional variable t
, we can specify a root-det constraint as [t, X11, X12, X22] ∈ RootDetConeTriangle
or [t, X11, X12, X21, X22] ∈ RootDetConeSquare
.
We provide both forms to enable flexibility for solvers who may natively support one or the other. Transformations between XXXConeTriangle
and XXXConeSquare
are handled by bridges, which removes the chance of conversion mistakes by users or solver developers.
Multi-dimensional sets with combinatorial structure
Other sets are vector-valued, with a particular combinatorial structure. Read their docstrings for more information on how to interpret them.
Set | Description |
---|---|
SOS1 | A Special Ordered Set (SOS) of Type I |
SOS2 | A Special Ordered Set (SOS) of Type II |
Indicator | A set to specify an indicator constraint |
Complements | A set to specify a mixed complementarity constraint |
AllDifferent | The all_different global constraint |
BinPacking | The bin_packing global constraint |
Circuit | The circuit global constraint |
CountAtLeast | The at_least global constraint |
CountBelongs | The nvalue global constraint |
CountDistinct | The distinct global constraint |
CountGreaterThan | The count_gt global constraint |
Cumulative | The cumulative global constraint |
Path | The path global constraint |
Table | The table global constraint |