Main Content

mpsread

LP および MILP 最適化データの MPS ファイルの読み取り

説明

problem = mpsread(mpsfile) は、線形計画法 (LP) および混合整数線形計画法 (MILP) の問題のデータを読み取ります。これによって、intlinprog または linprog ソルバーが受け入れる構造体にデータが返されます。

problem = mpsread(mpsfile,'ReturnNames',true) は、返された problem 構造体に、mpsfile 内に変数と制約の名前が格納された variableNames フィールドと constraintNames フィールドを追加します。

すべて折りたたむ

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 ファイルへのパス。文字ベクトルまたは string スカラーとして指定されます。mpsfile は、MPS 形式のファイルでなければなりません。

メモ

  • mpsread は、半連続的な制約または SOS 制約をサポートしません。

  • mpsread は “固定書式” ファイルをサポートします。

  • mpsreadobjsense および objname などの拡張子をサポートしていません。

  • mpsread は、以前に MPS ファイルの COLUMNS セクションに表示されなかった BOUNDS セクションの変数を暗黙的に無視します。

例: "documents/optimization/milpproblem.mps"

データ型: char | string

値が logical として指定された、MPS ファイルから変数名と制約名を返すことを示す名前と値のペア。false は、名前を返さないことを指定します。true は、problem 出力構造体に 2 つの追加のフィールドを返すように mpsread に指示します。

  • problem.variableNames — 変数名の string 配列

  • problem.constraintNames — 制約名の構造体:

    • problem.constraintNames.eqlin — 線形等式制約名の string 配列

    • problem.constraintNames.ineqlin — 線形不等式制約名の string 配列

problem 構造体不等式制約の problem.Aineqproblem.bineqproblem.constraintNames.ineqlin 内の名前と同じ順序です。同様に、制約の problem.Aeqproblem.beqproblem.constraintNames.eqlin 内の名前と同じ順序です。problem.variableNames の順序は、problem 構造体に対する linprog または intlinprog の実行後の解の変数 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)
variableNamesMPS ファイルからの変数名を含む string 配列。このフィールドは、ReturnNamestrue の場合にのみ表示されます。
constraintNamesMPS ファイルからの制約名を含む構造体。詳細については、ReturnNames を参照してください。このフィールドは、ReturnNamestrue の場合にのみ表示されます。

mpsread は、problem.Aineq および problem.Aeq をスパース行列として返します。

バージョン履歴

R2015b で導入

すべて展開する