Main Content

mpsread

Read MPS file for LP and MILP optimization data

Description

example

problem = mpsread(mpsfile) reads data for linear programming (LP) and mixed-integer linear programming (MILP) problems. It returns the data in a structure that the intlinprog or linprog solvers accept.

example

problem = mpsread(mpsfile,'ReturnNames',true) augments the returned problem structure with variableNames and constraintNames fields containing the names of the variables and constraints in mpsfile.

Examples

collapse all

Load an mps file and solve the problem it describes.

Load the eil33-2.mps file from a public repository. View the problem type.

gunzip('http://miplib.zib.de/WebData/instances/eil33-2.mps.gz')
problem = mpsread('eil33-2.mps')
problem = 

          f: [4516x1 double]
      Aineq: [0x4516 double]
      bineq: [0x1 double]
        Aeq: [32x4516 double]
        beq: [32x1 double]
         lb: [4516x1 double]
         ub: [4516x1 double]
     intcon: [4516x1 double]
     solver: 'intlinprog'
    options: [1x1 optim.options.Intlinprog]

Notice that problem.intcon is not empty, and problem.solver is 'intlinprog'. The problem is an integer linear programming problem.

Change the options to suppress iterative display and to generate a plot as the solver progresses.

options = optimoptions('intlinprog','Display','final','PlotFcn',@optimplotmilp);
problem.options = options;

Solve the problem by calling intlinprog.

[x,fval,exitflag,output] = intlinprog(problem);
Optimal solution found.

Intlinprog stopped because the objective value is within a gap tolerance of the optimal value,
options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are
integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).

Load an mps file and obtain its variable and constraint names.

Load the eil33-2.mps file from a public repository. View the returned problem structure.

gunzip('http://miplib.zib.de/WebData/instances/eil33-2.mps.gz')
problem = mpsread('eil33-2.mps','ReturnNames',true)
problem = 

  struct with fields:

                  f: [4516×1 double]
              Aineq: [0×4516 double]
              bineq: [0×1 double]
                Aeq: [32×4516 double]
                beq: [32×1 double]
                 lb: [4516×1 double]
                 ub: [4516×1 double]
             intcon: [4516×1 double]
             solver: 'intlinprog'
            options: [1×1 optim.options.Intlinprog]
      variableNames: [4516×1 string]
    constraintNames: [1×1 struct]

View the first few names of each type.

problem.variableNames(1:4)
ans = 

  4×1 string array

    "x1"
    "x2"
    "x3"
    "x4"
problem.constraintNames.eqlin(1:4)
ans = 

  4×1 string array

    "c1"
    "c2"
    "c3"
    "c4"

There are no inequality constraints in the problem.

problem.constraintNames.ineqlin
ans = 

  0×1 empty string array

Input Arguments

collapse all

Path to MPS file, specified as a character vector or string scalar. mpsfile should be a file in the MPS format.

Note

  • mpsread does not support semicontinuous constraints or SOS constraints.

  • mpsread supports “fixed format” files.

  • mpsread does not support extensions such as objsense and objname.

  • mpsread silently ignores variables in the BOUNDS section that do not previously appear in the COLUMNS section of the MPS file.

Example: "documents/optimization/milpproblem.mps"

Data Types: char | string

Name-value pair indicating to return variable and constraint names from the MPS file, with the value specified as logical. false indicates not to return the names. true causes mpsread to return two extra fields in the problem output structure:

  • problem.variableNames — String array of variable names

  • problem.constraintNames — Structure of constraint names:

    • problem.constraintNames.eqlin String array of linear equality constraint names

    • problem.constraintNames.ineqlin String array of linear inequality constraint names

The problem structure inequality constraints problem.Aineq and problem.bineq have the same order as the names in problem.constraintNames.ineqlin. Similarly, the constraints problem.Aeq and problem.beq have the same order as the names in problem.constraintNames.eqlin. The problem.variableNames order is the same as the order of the solution variables x after running linprog or intlinprog on the problem structure.

Example: mpsread('filename','ReturnNames',true)

Data Types: logical

Output Arguments

collapse all

Problem structure, returned as a structure with fields:

fVector representing objective f'*x
intconVector indicating variables that take integer values (empty for LP, nonempty for MILP)
AineqMatrix in linear inequality constraints Aineq*x  bineq

bineq

Vector in linear inequality constraints Aineq*x  bineq

Aeq

Matrix in linear equality constraints Aeq*x = beq

beq

Vector in linear equality constraints Aeq*x = beq
lbVector of lower bounds
ubVector of upper bounds
solver'intlinprog' (if intcon is nonempty), or 'linprog' (if intcon is empty)

options

Default options, as returned by the command

optimoptions(solver)
variableNamesString array containing variable names from the MPS file. This field appears only if ReturnNames is true.
constraintNamesStructure containing constraint names from the MPS file. For a description, see ReturnNames. This field appears only if ReturnNames is true.

mpsread returns problem.Aineq and problem.Aeq as sparse matrices.

Version History

Introduced in R2015b