exponenta event banner

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 структура вывода:

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

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

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

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

problem ограничения структурного неравенства problem.Aineq и problem.bineq имеют тот же порядок, что и имена в problem.constraintNames.ineqlin. Аналогично, ограничения problem.Aeq и problem.beq имеют тот же порядок, что и имена в problem.constraintNames.eqlin. 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