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)

Типы данных: логический

Выходные аргументы

свернуть все

Структура задачи, возвращенная как структура с полями:

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 isempty,

options

Опции по умолчанию, как возвращено командой

optimoptions(solver)
variableNamesМассив строк, содержащий имена переменных из файла MPS. Это поле появляется только если ReturnNames true.
constraintNamesСтруктура, содержащая ограничение, называет из файла MPS. Для описания смотрите ReturnNames. Это поле появляется только если ReturnNames true.

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

Введенный в R2015b