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('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]

problem.intcon が空ではなく、problem.solver'intlinprog' であることがわかります。これは、整数線形計画問題です。

反復表示を抑制し、ソルバーの進行状況に応じてプロットを生成するように、オプションを変更します。

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

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

mps ファイルを読み込んで、その変数名と制約名を取得します。

公開リポジトリから eil33-2.mps ファイルを読み込みます。返された問題構造体を表示します。

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]

各タイプの最初の数個の名前を表示します。

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"

問題に不等式制約は含まれていません。

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 で導入