1

我正在尝试找到一个对我的问题足够快的开源 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 文件的问题,但我无法弄清楚它是什么。我究竟做错了什么?

4

1 回答 1

3

确实,您的 MPS 文件有问题。RHS 部分中的行应该有一个名称,例如

RHS
    RHS1      K         20.9
    RHS1      N         20.9
    RHS1      ONE       1

基本上,求解器会选择一组 RHS。范围部分类似。我不确定您打算使用 RANGES 部分中的行来做什么。

于 2017-01-30T04:43:31.833 回答