使用 soplex 命令行输出解决方案

Using soplex command line to output a solution

所以考虑一个小问题,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

这很明显 "normalized" 问题是将所有内容除以 2(如您所见 objective 是 1.5,而不是 3 而它 returns 解决方案是 b1 是 0.5而不是 1).

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

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

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