Main Content

Generate Code for linprog

This example shows how to generate code for the linprog optimization solver. Code generation requires a MATLAB Coder™ license. For details about code generation requirements, see Code Generation for linprog Background.

Problem

The problem is to solve a 2-D linear program with the following linear inequality constraint matrices A and b and linear equality constraint matrices Aeq and beq.

A = [1 1
    1 1/4
    1 -1
    -1/4 -1
    -1 -1
    -1 1];
b = [2 1 2 1 -1 2]; 
Aeq = [1 1/4];
beq = 1/2;

Set these bounds:

-1x(1)1.5-0.5x(2)1.25.

lb = [-1,-0.5];
ub = [1.5,1.25];

Use the objective function -x(1)-x(2)/3.

f = [-1 -1/3];

Set Up Code Generation

Create a file named test_linprog.m containing code that creates the problem and constraints. The file must set options to use the "interior-point" algorithm.

function [x,fval,exitflag,output] = test_linprog
A = [1 1
    1 1/4
    1 -1
    -1/4 -1
    -1 -1
    -1 1];
b = [2 1 2 1 -1 2];
Aeq = [1 1/4];
beq = 1/2;
f = [-1 -1/3];
lb = [-1,-0.5];
ub = [1.5,1.25];
opts = optimoptions("linprog",Algorithm="interior-point");
[x,fval,exitflag,output] = linprog(f,A,b,Aeq,beq,lb,ub,opts);
end

Generate code for the test_linprog file.

codegen -config:mex test_linprog
Code generation successful.

After some time, codegen creates a MEX file named test_linprog_mex.mexw64 (the file extension varies, depending on your system). Run the resulting C code.

[x,fval,exitflag,output] = test_linprog_mex
x = 2×1

    0.1875
    1.2500

fval = 
-0.6042
exitflag = 
1
output = struct with fields:
          algorithm: 'interior-point'
    constrviolation: 3.5682e-07
      firstorderopt: 3.6989e-06
         iterations: 4

The exit flag of 1 indicates that the code creates a reliable solution. The code takes only four iterations to reach the solution, which is not surprising for such a small problem.

See Also

| (MATLAB Coder) |

Topics