mpsread

Чтение файла MPS для данных оптимизации LP и MILP

Описание

пример

problem = mpsread(mpsfile) считывает данные для задач линейного программирования (LP) и смешано-целочисленного линейного программирования (MILP). Он возвращает данные в структуре, которая intlinprog или linprog решатели принимают.

пример

problem = mpsread(mpsfile,'ReturnNames',true) увеличивает возвращенный problem структура с variableNames и constraintNames поля, содержащие имена переменных и ограничения в mpsfile.

Примеры

свернуть все

Загрузка 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, заданный как вектор символов или строковый скаляр. mpsfile должен быть файлом в формате MPS.

Примечание

  • mpsread не поддерживает полунепрерывные ограничения или ограничения SOS.

  • mpsread поддерживает файлы «фиксированного формата».

  • mpsread не поддерживает такие расширения, как objsense и objname.

  • mpsread бесшумно игнорирует переменные в BOUNDS раздел, который ранее не отображается в COLUMNS раздел файла MPS.

Пример: "documents/optimization/milpproblem.mps"

Типы данных: char | string

Пара "имя-значение", указывающая на возврат имен переменной и ограничений из файла MPS со значением, заданным как логическое. false указывает, что не возвращать имена. true причины mpsread чтобы вернуть два дополнительных поля в problem структура output:

  • problem.variableNames - Строковые массивы имен переменных

  • problem.constraintNames - Структура имен ограничений:

    • problem.constraintNames.eqlin Строковые массивы имен линейных ограничений равенства

    • problem.constraintNames.ineqlin Строковые массивы имен ограничений линейного неравенства

The problem структурные ограничения неравенства problem.Aineq и problem.bineq имеют тот же порядок, что и имена в problem.constraintNames.ineqlin. Точно так же ограничения problem.Aeq и problem.beq имеют тот же порядок, что и имена в problem.constraintNames.eqlin. The problem.variableNames порядок совпадает с порядком переменных решения x после выполнения linprog или intlinprog на problem структура.

Пример: 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. Это поле появляется только в том случае, если ReturnNames является true.
constraintNamesСтруктура, содержащая имена ограничений из файла MPS. Описание см. в разделе ReturnNames. Это поле появляется только в том случае, если ReturnNames является true.

mpsread возвращает problem.Aineq и problem.Aeq как разреженные матрицы.

Введенный в R2015b