如何编写一个简单的 MPS 文件提交给 NEOS 服务器
How to write a simple MPS file to submit to NEOS servers
我正在尝试找到一个对我的问题足够快的开源 lp 求解器。我正在尝试构建 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 文件的问题,但我就是无法弄清楚它是什么。我做错了什么?
您的 MPS 文件确实有问题。 RHS 部分中的行应该有一个名称,例如
RHS
RHS1 K 20.9
RHS1 N 20.9
RHS1 ONE 1
基本上求解器会选择一个 RHS 集。与 RANGES 部分类似。我不确定您打算使用 RANGES 部分中的行。
我正在尝试找到一个对我的问题足够快的开源 lp 求解器。我正在尝试构建 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 文件的问题,但我就是无法弄清楚它是什么。我做错了什么?
您的 MPS 文件确实有问题。 RHS 部分中的行应该有一个名称,例如
RHS
RHS1 K 20.9
RHS1 N 20.9
RHS1 ONE 1
基本上求解器会选择一个 RHS 集。与 RANGES 部分类似。我不确定您打算使用 RANGES 部分中的行。