Введение

Формат файла MPS (Mathematical Programming System) — это формат файла для представления и архивирования задач линейного программирования (LP) и задач целочисленного программирования со смешанными переменными.

Обзор

Формат был назван в честь раннего продукта IBM LP и стал де-факто стандартным ASCII-форматом среди большинства коммерческих решателей LP-задач. Фактически, все коммерческие решатели LP-задач принимают этот формат, а также система COIN OR с открытым исходным кодом. Другому программному обеспечению может потребоваться специализированная подпрограмма для чтения файлов MPS. Однако с распространением алгебраических языков моделирования использование MPS снизилось. Например, согласно статистике сервера NEOS в январе 2011 года, менее 1% представленных задач были в формате MPS, по сравнению с 59,4% задач, представленных на AMPL, и 29,7% задач, представленных на GAMS. MPS ориентирован на столбцы (в отличие от ввода модели в виде уравнений), и все компоненты модели (переменные, строки и т.д.) имеют имена. MPS – это старый формат, поэтому он разработан с учетом перфокарт: поля начинаются в столбцах 2, 5, 15, 25, 40 и 50. Разделы файла MPS отмечаются так называемыми заголовочными картами, которые отличаются тем, что начинаются в первом столбце. Хотя по историческим причинам обычно используется верхний регистр во всем файле, многие программы чтения MPS принимают смешанный регистр для всего, кроме заголовочных карт, а некоторые допускают смешанный регистр в любом месте. Выбранные вами имена для отдельных элементов (ограничений или переменных) не имеют значения для решателя; следует выбирать осмысленные имена или простые имена для последующей обработки данных.

Переменные

Запись NAME может иметь любое значение, начиная со столбца 15. Раздел ROWS определяет имена всех ограничений; в столбцах 2 или 3 указываются E для строк равенства (=), L для строк "меньше или равно" (<=), G для строк "больше или равно" (>=) и N для строк без ограничений. Порядок строк, указанных в этом разделе, не имеет значения, за исключением не ограничивающих строк, обозначенных N, первый из которых интерпретируется как целевая функция. Раздел COLUMNS содержит элементы матрицы A. Все элементы для данного столбца должны быть расположены последовательно, хотя внутри столбца порядок элементов (строк) не имеет значения. Строкам, не указанным для столбца, подразумевается коэффициент, равный нулю. Раздел RHS позволяет определить один или несколько векторов правой части; обычно определяется не более одного. В приведенном выше примере имя вектора RHS – RHS1, и он имеет ненулевые значения во всех 3 строках ограничений задачи. Строкам, не упомянутым в векторе RHS, присваивается правая часть, равная нулю. Необязательный раздел BOUNDS задает нижние и верхние границы для отдельных переменных, если они не заданы строками в матрице. Все границы с заданным именем в столбце 5 рассматриваются как набор. Переменные, не упомянутые в данном наборе BOUNDS, считаются неотрицательными (нижняя граница равна нулю, верхняя граница не ограничена). Граница типа UP означает, что к переменной применяется верхняя граница. Граница типа LO означает, что применяется нижняя граница. Граница типа FX ("фиксированная") означает, что переменная имеет верхнюю и нижнюю границы, равные одному и тому же значению. Граница типа FR ("свободная") означает, что переменная не имеет ни нижней, ни верхней границы и, следовательно, может принимать отрицательные значения. Вариация этого – MI для свободной отрицательной, задающей верхнюю границу 0, но без нижней границы. Граница типа PL – это свободная положительная от нуля до плюс бесконечности, но поскольку это значение по умолчанию, она редко используется. Существуют также типы границ для использования в моделях MIP: BV для бинарной (принимающей значения 0 или 1), UI для верхней целой и LI для нижней целой. SC означает полунепрерывную и указывает, что переменная может быть равна нулю, но в противном случае должна быть не меньше заданного значения. Другой необязательный раздел под названием RANGES задает двойные неравенства несколько неинтуитивным способом, который здесь не описан. Способы обозначения целочисленных переменных также выходят за рамки данной статьи (включают ключевое слово MARKER и, возможно, SOS). Последняя карта должна быть ENDATA (обратите внимание на необычное написание). Некоторые специальные случаи стандарта MPS не всегда последовательно обрабатываются различными реализациями. В разделе BOUNDS, если переменной задана неположительная верхняя граница, но не задана нижняя граница, ее нижняя граница может по умолчанию быть равна нулю или минус бесконечности (также, если верхняя граница задана как ноль, нижняя граница может быть равна нулю или минус бесконечности). Если целочисленной переменной не задана верхняя граница, ее верхняя граница может по умолчанию быть равна 1, а не плюс бесконечности.

Ограничения

У MPS много ограничений. Он не определяет направление оптимизации, которое решается различными решателями по-разному. Числовые поля имеют ширину в 12 символов, что ограничивает точность вычислений. Формат представления неудобен для восприятия человеком и не является компактным (хотя он сохраняет информацию о порядке столбцов и строк, что часто полезно для воспроизводимости поведения решателя линейного программирования). Одной из альтернатив MPS, лишенной этих ограничений и поддерживаемой большинством решателей, является формат файла nl.

Расширения

Многие продукты линейного программирования включают расширения формата MPS. Свободный формат MPS позволяет использовать длинные имена и более точные данные, поскольку поля могут превышать столбцы, определенные исходным стандартом, и использовать пробелы в качестве разделителей вместо фиксированных позиций столбцов (следует отметить, что это делает некоторые файлы MPS, содержащие пробелы в именах, недействительными). Некоторые расширения предусматривают добавление в файл MPS новых типов данных (например, разделов для указания смысла целевой функции, требований к целочисленности, квадратичных данных или сложных конструкций моделирования MIP). Существует также сжатый формат файла MPSC. SMPS – это специализированное расширение, предназначенное для представления экземпляров задач стохастического программирования, особенно часто используемое в исследовательских целях. Несмотря на то, что некоторые расширения не стандартизованы, формат по-прежнему широко применяется.