Main Content

mpsread

Read MPS file for LP and MILP optimization data

Description

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.

example

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("https://miplib.zib.de/WebData/instances/eil33-2.mps.gz")
problem = mpsread("eil33-2.mps")
Running HiGHS 1.7.0 (git hash: n/a): Copyright (c) 2024 HiGHS under MIT licence terms
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]

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);

Figure Optimization Plot Function contains an axes object. The axes object with title Best Objective: 934.008, Relative Gap: 0, xlabel Number of nodes, ylabel Objective value contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Primal bound, Dual bound, New solution.

Optimal solution found.

Intlinprog stopped because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 1e-06. The intcon variables are integer within tolerance, options.ConstraintTolerance = 1e-06.

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("https://miplib.zib.de/WebData/instances/eil33-2.mps.gz")
problem = mpsread("eil33-2.mps",ReturnNames=true)
Running HiGHS 1.7.0 (git hash: n/a): Copyright (c) 2024 HiGHS under MIT licence terms
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
    "x1"
    "x2"
    "x3"
    "x4"

problem.constraintNames.eqlin(1:4)
ans = 4×1 string
    "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

expand all