Gurobi Optimizer 9.0 can solve models with linear constraints, quadratic constraints (both convex and non-convex), and second-order cone 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)} \\ \ell \le x &\le u && && \textrm{(Bound constraints)} \\ x_j &\in \mathbb{Z} && \forall j \in J && \textrm{(Integrality constraints)} \\ x_k &\in \textrm{second-order cones} \quad && \forall k \in K && \textrm{(Cone constraints)} \\ x_h &\in \textrm{SOS} && \forall h \in H \qquad && \textrm{(Special ordered set constraints)} \end{alignat}$$

Not all elements are required. For instance, if \( Q = 0 \) and \( I = K = H = \emptyset \), this is a mixed-integer linear program (MILP).

Until Gurobi 9.0, it was required that the quadratic matrices \( Q \) and \( Q_i \) were positive semi-definite, so that the model is convex. This is no longer the case for Gurobi 9.0, which supports general non-convex quadratic constraints and objective functions, including bilinear and quadratic equality constraints. Currently, users need to explicitly set the parameter NonConvex to 2 to enable optimization with non-convex constraints. An error is reported otherwise. This is to avoid accidentally solving a much harder problem when there might still be the possibility of reformulating the model into a convex problem. For full details, see the Quadratic Constraints section of the Reference Manual.

There are also features for piecewise-linear objectives and constraints, which can represent or approximate many separable nonconvex functions. For more details, see the sections on General Constraints and Function Constraints.

### Further information