Gurobi versions 11.0 and later can solve models with linear constraints, quadratic constraints (both convex and non-convex), second-order cone constraints, and nonlinear function constraints. This can involve any combination of continuous and integer variables. The canonical form is:
$$\begin{alignat}{3} \min_x\ x^\top Q x + c^\top x &+ d && && \textrm{(Objective)} \\ \textrm{s.t.} \qquad\qquad\enspace Ax &= b && && \textrm{(Linear constraints)} \\x^\top Q_i x + c_i^\top x &\le d_i && \forall i \in I && \textrm{(Quadratic constraints)} \\ f_j(x) &= 0 && \forall j \in J && \textrm{(Nonlinear constraints)} \\ \ell \le x &\le u && && \textrm{(Bound constraints)} \\ x_k &\in \mathbb{Z} && \forall k \in K && \textrm{(Integrality constraints)} \\ x_h &\in \textrm{second-order cones} \quad && \forall h \in H && \textrm{(Cone constraints)} \\ x_m &\in \textrm{SOS} && \forall m \in M \qquad && \textrm{(Special-ordered set constraints)} \end{alignat}$$
Not all elements are required. For instance, if \( Q = 0 \) and \( I = J = H = \emptyset \), then the model is a mixed-integer linear program (MILP).
Before Gurobi 9.0, the quadratic matrices \( Q \) and \( Q_i \) were required to be positive semi-definite, ensuring that the model is convex. Gurobi 9.0+ supports general non-convex quadratic constraints and objective functions, including bilinear and quadratic equality constraints.
Non-convex models are typically harder to solve than convex models. If possible, consider reformulating the model into a convex problem. Until version 11.0, the NonConvex parameter had to be set to 2 to enable optimization for problems with non-convex constraints or objective function. For full details, see the Quadratic Constraints section of the reference manual.
Before Gurobi 11.0, the nonlinear functions \( f_j \) were approximated with piecewise-linear constraints. Starting with Gurobi 11.0, nonlinear functions can be treated exactly by setting the FuncNonlinear parameter to 1 or the FuncNonlinear attribute of the respective function constraint to 1. For more details, see the General Constraints and Function Constraints sections of the documentation.
Comments
0 comments
Article is closed for comments.