主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

mpsread

读取 MPS 文件中的 LP 和 MILP 优化数据

说明

problem = mpsread(mpsfile) 读取线性规划 (LP) 和混合整数线性规划 (MILP) 问题的数据。它以 intlinproglinprog 求解器接受的结构体形式返回数据。

示例

problem = mpsread(mpsfile,'ReturnNames',true)variableNamesconstraintNames 字段扩充返回的 problem 结构体,这些字段包含 mpsfile 中变量和约束的名称。

示例

示例

全部折叠

加载 mps 文件并求解它描述的问题。

从公共存储库中加载 eil33-2.mps 文件。查看问题类型。

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]

请注意,problem.intcon 不为空,而 problem.solver 为 'intlinprog'。该问题是整数线性规划问题。

更改选项以隐藏迭代输出,并随着求解器进度生成绘图。

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

通过调用 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.

加载一个 mps 文件,并获取其变量和约束名称。

从公共存储库中加载 eil33-2.mps 文件。查看返回的问题结构体。

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]

查看每种类型的前几个名称。

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"

问题中没有不等式约束。

problem.constraintNames.ineqlin
ans = 

  0×1 empty string array

输入参数

全部折叠

MPS 文件的路径,指定为字符向量或字符串标量。mpsfile 应为 MPS 格式的文件。

注意

  • mpsread 不支持半连续约束或 SOS 约束。

  • mpsread 支持“固定格式”文件。

  • mpsread 不支持扩展,如 objsenseobjname

  • 对于以前没有出现在 MPS 文件的 COLUMNS 部分中的变量,mpsread 会以静默方式忽略 BOUNDS 部分中的这些变量。

示例: "documents/optimization/milpproblem.mps"

数据类型: char | string

名称-值对组,指示从 MPS 文件返回变量和约束名称,值指定为逻辑值。false 指示不返回名称。true 导致 mpsreadproblem 输出结构体中返回两个额外的字段:

  • problem.variableNames - 变量名称的字符串数组

  • problem.constraintNames - 约束名称的结构体:

    • problem.constraintNames.eqlin - 线性等式约束名称的字符串数组

    • problem.constraintNames.ineqlin - 线性不等式约束名称的字符串数组

problem 结构体不等式约束 problem.Aineqproblem.bineq 的顺序与 problem.constraintNames.ineqlin 中名称的顺序相同。同样,约束 problem.Aeqproblem.beq 的顺序与 problem.constraintNames.eqlin 中名称的顺序相同。在对 problem 结构体运行 linprogintlinprog 后,problem.variableNames 顺序与解变量 x 的顺序相同。

示例: mpsread('filename','ReturnNames',true)

数据类型: logical

输出参量

全部折叠

问题结构体,以具有以下字段的结构体形式返回:

f表示目标 f'*x 的向量
intcon表示取整数值的变量的向量(对于 LP 为空,对于 MILP 为非空)
Aineq线性不等式约束 Aineq*x bineq 中的矩阵

bineq

线性不等式约束 Aineq*x bineq 中的向量

Aeq

线性等式约束 Aeq*x = beq 中的矩阵

beq

线性等式约束 Aeq*x = beq 中的向量
lb由下界组成的向量
ub由上界组成的向量
solver'intlinprog'(如果 intcon 为非空),或 'linprog'(如果 intcon 为空)

options

由以下命令返回的默认选项

optimoptions(solver)
variableNames包含来自 MPS 文件的变量名称的字符串数组。仅当 ReturnNamestrue 时,此字段才会出现。
constraintNames包含来自 MPS 文件的约束名称的结构体。有关说明,请参阅 ReturnNames。仅当 ReturnNamestrue 时,此字段才会出现。

mpsreadproblem.Aineqproblem.Aeq 以稀疏矩阵形式返回。

版本历史记录

在 R2015b 中推出

全部展开