【问题标题】:Using soplex command line to output a solution使用soplex命令行输出解决方案
【发布时间】:2023-06-03 16:43:02
【问题描述】:

所以拿一个小问题,test.lp

Maximize
 obj: b1 + b2
Subject To
 c1: + 2 b1 + 2 b2  <= 3
Binary
 b1 b2
End

有一个显而易见的答案,即 b1 或 b2 应该是 1,而另一个应该是 0。

我可以像这样运行SoPlex

soplex --lpfile test.lp -X -x

哪个输出:

SoPlex status       : problem is solved [optimal]
Solving time (sec)  : 0.00
Iterations          : 1
Objective value     : 1.50000000e+00


Primal solution (name, value):
b1      5.0000000000000000e-01
b2      1.0000000000000000e+00

很明显,它通过将所有内容除以 2 来“标准化”问题(您可以看到目标是 1.5,而不是 3,它返回的解决方案是 b1 是 0.5 而不是 1)。

所以我的问题是,如何输出实际的变量解。最好在它自己的文件中。看起来这真的很明显,但经过数小时的寻找和试验,我找不到任何东西!

【问题讨论】:

    标签: optimization scip


    【解决方案1】:

    解决方案完全正确。您的约束将 b1b2 限制为 0.5,而另一个变量可以为 1。这使约束变得严格并导致最优解值为 1.5。

    请注意,SoPlex 是一个纯 LP 求解器,因此将变量指定为二进制只会被求解器忽略。如果您想解决整数优化问题,请查看SCIP

    【讨论】:

    • 啊,我明白了。谢谢!
    最近更新 更多