Try our new documentation site (beta).

Using Gurobi within MATLAB's Problem-Based Optimization

Starting with release R2017b, the MATLAB Optimization Toolbox offers an alternative way to formulate optimization problems, coined “Problem-Based Optimization”. In this section we'll explain how this modeling technique can be used in combination with the Gurobi solver.

The problem-based modeling approach uses an object-oriented paradigm for the components of an optimization problem; the optimization problem itself, the decision variables, and the linear constraints are represented by objects. Their creation and modification is effected through methods. The complete documentation for problem-based optimization is part of the Optimization Toolbox; we will only walk through a simple example. For this it is important that your MATLAB path contains Gurobi's example directory, which can be set as follows:

addpath(fullfile(<path_to_Gurobi>, <architecture>, 'examples', 'matlab'));

The first step is to create an optimization problem:

prob = optimproblem('ObjectiveSense','maximize');

The variable prob now refers to an optimization problem object, which we have specified to be a maximization problem. Next we create three non-negative optimization variables: x, y and z:

x = optimvar('x', 'LowerBound', 0);
y = optimvar('y', 'LowerBound', 0);
z = optimvar('z', 'LowerBound', 0);

With these variables at hand, we now build linear expressions in order to set an objective function, and to add two linear constraints to prob:

prob.Objective = x + 2 * y + 3 * z;
prob.Constraints.cons1 = x + y <= 1;
prob.Constraints.cons2 = y + z <= 1;

Finally we create an options object that guides prob's solution method to the linear program solver function linprog, and call the solve method.

options = optimoptions('linprog');
sol = solve(prob, options);

Since the examples directory of the Gurobi installation has been added to the path in the very first step above, a bit of magic happens at this stage: The directory contains a file linprog.m, so that the invocation of the solve method ends up calling this latter function instead of the built-in function linprog of MATLAB's Optimization Toolbox. The following output from Gurobi will be shown on the console:

Gurobi Optimizer version 9.0.1 build v9.0.1rc0 (linux64)

Optimize a model with 2 rows, 3 columns and 4 nonzeros
Model fingerprint: 0x3a4c68c2
Coefficient statistics:
  Matrix range     [1e+00, 1e+00]
  Objective range  [1e+00, 3e+00]
  Bounds range     [0e+00, 0e+00]
  RHS range        [1e+00, 1e+00]
Presolve removed 2 rows and 3 columns
Presolve time: 0.03s
Presolve: All rows and columns removed
Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0   -4.0000000e+00   0.000000e+00   0.000000e+00      0s

Solved in 0 iterations and 0.05 seconds
Optimal objective -4.000000000e+00

The example we just discussed can be found in the examples directory in the file opttoolbox_lp.m. The example opttoolbox_mip1.m shows an analogous problem formulation with integer variables, that uses the function intlinprog.m, also found in the Gurobi examples directory, as a surrogate for MATLAB's built-in counterpart.

The modeling constructs provided by the Optimization Toolbox do not cover all the features of Gurobi, e.g., SOS, semi-continuous variables and general constraints to name a few. Moreover not all Gurobi parameters have equivalent counterparts in the option objects for linprog and intlinprog. In order to use such features, Gurobi's own Matlab API should be used.

Try Gurobi for Free

Choose the evaluation license that fits you best, and start working with our Expert Team for technical guidance and support.

Evaluation License
Get a free, full-featured license of the Gurobi Optimizer to experience the performance, support, benchmarking and tuning services we provide as part of our product offering.
Academic License
Gurobi supports the teaching and use of optimization within academic institutions. We offer free, full-featured copies of Gurobi for use in class, and for research.
Cloud Trial

Request free trial hours, so you can see how quickly and easily a model can be solved on the cloud.