Quadratic programming is a fundamental form of nonlinear optimization. Mixed-integer quadratically constrained programming (MIQCP) is a subset of this model class. For a basic introduction to quadratic programming, check out these Quadratic Optimization FAQs.
In MIQCP, the objective function is typically linear, while at least one constraint contains a quadratic term. The decision variables can be a mix of continuous values (i.e., can be divided into smaller amounts) and integers (i.e., must be represented as whole numbers).
This makes MIQCP much more complex than related programs. Basic quadratic programming (QP), for example, deals with quadratic relationships, but continuous variables and linear constraints make the process more straightforward. Similarly, mixed-integer quadratic programming (MIQP) expands on QP to include integer variables, but still has more simple linear constraints. This complexity means that MIQCP requires more specialized formulations, solution algorithms, and solvers.
MIQCP is used across industries, from finance to energy to supply chain management. Here are a few real-world examples of MIQCP in action:
Yes, Gurobi supports MIQCP and has developed specific capabilities to identify high-quality solutions for MIQCP problems. For example, Gurobi 9.0 introduced the bilinear solver, which enables the solution of problems with non-convex quadratic objectives and constraints.
Gurobi 12.0, the most recent release, dramatically improved solution times for non-convex MIQCP problems, meaning that optimization teams will have actionable insights faster than ever before.
Finally, Gurobi’s approach to MIQCP is user-friendly. The Gurobi Python API allows teams to get started using one of the most common coding languages. If they prefer another language (e.g., C, C++, Java, MATLAB, .NET, R), Gurobi can accommodate them too. In addition, Gurobi is flexible enough to work with a variety of file formats, allowing the Gurobi solver to integrate seamlessly into teams’ workflows.
One of the algorithms Gurobi uses for MIQCP problems is the branch-and-bound method. This approach breaks the feasible region down into sub-problems. Visually, the breakdown of the problem and sub-problems looks like a family tree or an organizational chart. In the case of non-convex problems, the solver also branches on continuous variables, a procedure referred to as spatial branching. Furthermore, the non-convex quadratic constraints are handled via a dynamic outer-approximation approach. Next, the algorithm eliminates the sub-problems that cannot include the optimal solution. In other words, it chops off the sub-optimal tree branches. This reduces the number of potential solutions and makes solving faster.
This spatial branch-and-bound approach makes Gurobi particularly adept at solving non-convex MIQCP problems. As discussed in the quadratic optimization FAQs, convex MIQCP solutions are (relatively) straightforward, as the local optimum is the global optimum. Non-convex MIQCP’s local optima can create false results for other solvers. Gurobi’s bilinear solver and branch-and-bound approach deliver the confidence teams need when working on complex problems.
In addition to its solver’s robust performance, Gurobi sets itself apart with resources and support. The extensive resource center is available to anyone, and Gurobi offers customers free technical guidance, support, and model tuning services. Even customers testing out the free trial can access Gurobi’s customer service to refine their MIQCP models.
To learn more about solving MIQCPs with Gurobi, check out this Jupyter notebook example of the pooling problem, which empowers users to begin building an MIQCP model with Python.
Choose the evaluation license that fits you best, and start working with our Expert Team for technical guidance and support.
Request free trial hours, so you can see how quickly and easily a model can be solved on the cloud.