Gurobi for MPL gives MPL users access to state-of-the-art simplex-based linear programming and mixed-integer programming solvers from within the user-friendly Windows environment of MPL. The Gurobi solver is accessed from MPL for Windows as a Dynamic Link Library (DLL). This tight integration allows MPL users to transparently access Gurobi solution algorithms from their MPL application.

The Gurobi solver is a simplex-based linear and mixed-integer programming optimizer. Its mixed-integer capability has been designed from the ground up to take full advantage of modern multi-core architectures. The Gurobi algorithms enable you to solve:

- LP - Linear programming problems.
- QP - Quadratic programming problems.
- MIP - Mixed integer programming problems.
- MIQP - Mixed integer quadratic programming problems.

Future Gurobi releases intend to add the following capabilities:

- QCP (quadratic constrained programming).
- MIQCP (mixed-integer quadratic constrained programming).
- SOCP (second order cone programming).

For LP's Gurobi is tuned to solve the vast majority of LP problems using default settings. There are however occasions where one may need to change defaults because of unacceptably slow solve times or numerical instability issues. On the whole the dual simplex method is best for most LP problems, although there are some instances where the primal simplex method may work best.

While MIP performance has improved dramatically in recent years, some instances still remain extremely difficult to solve. Though there are no steadfast rules for enhancing MIP performance in cases like these, we do list below some of the considerations one should take into account:

**Cuts:**Cutting planes are one of the principal reasons for recent improvements in MIP performance. Cuts can have a significant positive effect on the best bound, but may also slow down the solution of the LP relaxations. The Gurobi optimizer provides one main cut parameter to control the overall aggressiveness of cut generation as well as a set of individual cut parameters to control the generation of individual types of cuts. One might want to increase the aggressiveness of cut generation if branch-and-bound doesn't move the best bound at an acceptable rate**Heuristics:**Applying more heuristics and/or applying these heuristics more aggressively may lead to better integer-feasible solutions being found sooner. Better feasibles in turn can have the effect of helping to fathom nodes sooner and improve variables fixing through reduced costs. The tradeoff is that heuristics can be very time consuming and of course are counterproductive once an optimal solution has been found.**Presolve:**Presolve reductions are particularly important for MIP. However, some of these reductions, most particularly probing, can be quite expensive and have consequently been moderated in the default settings. It may thus make sense to choose more aggressive settings for hard models.

MPL displays the progress of Gurobi during a solve run in the message window. This information can also be directed to a log file. One can set various logging parameters in MPL for both LPs and MIPs. For example, the frequency of Gurobi logging is based upon elapsed wall clock time. This frequency can be adjusted. The log initially displays information about model dimensions followed by information about the presolved model:

STATUS: Optimizing 'Rail_ties' with Gurobi 1.0 Solver GUROBI: Optimize a model with 2103 Rows, 1298 Columns and 5240 NonZeroes GUROBI: Presolve removed 1701 rows and 893 columns GUROBI: Presolve tightened 1650 bounds and modified 107 coefficients GUROBI: Presolve changed 32 inequalities to equalities GUROBI: Presolve time: 0.02s GUROBI: Presolved: 402 Rows, 405 Columns, 1398 Nonzeros

For MIP problems, the Gurobi solver prints regular status information during the branch-and-bound search. The first two output columns in each log line show the number of nodes that have been explored so far in the search tree followed by the number of nodes that remain unexplored. The next three columns provide information on the most recently explored node in the tree. The solver prints the relaxation objective value for this node, followed by its depth in the search tree, followed by the number of integer variables with fractional values in the node relaxation solution. The next three columns provide information on the progress of the global MIP bounds. They show the objective value for the best known integer feasible solution, the best bound on the value of the optimal solution, and the gap between these lower and upper bounds. Finally, the last two columns provide information on the amount of work performed so far. The first column gives the average number of simplex iterations per explored node, and the next column gives the elapsed wall clock time since the optimization began.

GUROBI: Root relaxation: 239 iterations, 0.00 seconds GUROBI: Nodes | Current Node | Objective Bounds | Work GUROBI: Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time GUROBI: 0 0 4502.1420 0 18 - 4502.1420 - - 0s GUROBI: 0 0 4762.2109 0 58 - 4762.2109 - - 0s GUROBI: 0 0 4815.2637 0 58 - 4815.2637 - - 0s GUROBI: 0 0 4838.1339 0 64 - 4838.1339 - - 0s GUROBI: 0 0 4845.3194 0 41 - 4845.3194 - - 0s GUROBI: 0 0 4845.5014 0 60 - 4845.5014 - - 0s GUROBI: 0 0 4847.0585 0 61 - 4847.0585 - - 0s GUROBI: 0 0 4847.0585 0 61 - 4847.0585 - - 0s GUROBI: 0 2 4851.0046 0 61 - 4851.0046 - - 0s GUROBI: * 109 71 24 6445.0000 4902.1084 23.9% 18.1 0s GUROBI: H 111 68 6161.0000 4902.1084 20.4% 17.8 0s GUROBI: H 273 160 5931.0000 4975.7418 16.1% 14.2 0s GUROBI: * 516 228 24 5879.0000 5053.6529 14.0% 14.0 1s

Once the optimal solution is found for a MIP problem the log will show summary statistics and also the number and type of cuts that were added during the solving process:

GUROBI: Cutting planes: GUROBI: Gomory: 8 GUROBI: Cover: 5 GUROBI: Implied bound: 20 GUROBI: MIR: 5 GUROBI: Explored 8582 nodes (80322 simplex iterations) in 7.61 seconds GUROBI: Thread count was 1 (of 4 available processors) GUROBI: Optimal solution found (tolerance 1.00e-04) GUROBI: Best objective 5.8300000000e+03, best bound 5.8300000000e+03, gap 0.0000% Solver Statistics Solver name: Gurobi (1.0) Objective value: 5830.00000000000 Integer Nodes: 8582 Iterations: 80322 Solution time: 7.60 sec Result code: 2

For full description of all the GUROBI Parameters that are supported in MPL please go to the GUROBI Option Parameters page.