Как написать простой файл MPS для отправки на серверы NEOS

Я пытаюсь найти программу с открытым исходным кодом, которая достаточно быстра для моей проблемы. Я пытаюсь создать файл MPS, чтобы я мог отправить его на серверы NEOS и сравнить производительность различных решателей.

Моя проблема заключается в том, что в самых сложных случаях примерно 150 целочисленных переменных, но я начну с простого случая, чтобы помочь мне понять, как работает формат файла MPS.

Это проблема:

minimize  : 330.3 * M1 + 1132.88 * M2 + 955.86 * M3
subject to:
         20 <= 60 * M2 <= 20.9
         20 <= 34 * M3 <= 20.9
         M1 + M2 + M3 = 1

и я написал следующий файл MPS:

NAME problema1
ROWS
 L  K
 L  N
 E  ONE
 N  CUSTO
COLUMNS
    M1        ONE       1              CUSTO     330.3
    M2        K         60
    M2        ONE       1              CUSTO     1132.88
    M3        N         34
    M3        ONE       1              CUSTO     955.86
RHS
    KLESS     K         20.9
    NLESS     N         20.9
    ONEREST   ONE       1
RANGES
    RANGE1    K         0.9
    RANGE2    N         0.9
ENDATA

Используя линейные решатели, доступные на NEOS ( https://neos-server.org/neos/solvers/index.html), только Gurobi может решить эту проблему. Другие считают, что проблема неосуществима (а это не так).

Я уверен, что это проблема с моим файлом MPS, но я просто не могу понять, что это такое. Что я делаю неправильно?

1 ответ

Решение

Действительно, ваш файл MPS имеет проблему. Строки в разделе RHS должны иметь одно имя, например

RHS
    RHS1      K         20.9
    RHS1      N         20.9
    RHS1      ONE       1

В основном решатель выбирает один набор RHS. Аналогично для раздела RANGES. Я не уверен, что вы намеревались использовать строки в разделе RANGES.