使用 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).
所以我的问题是,如何输出实际的变量解。最好在它自己的文件中。看起来这很明显,但经过数小时的查找和试验后我找不到任何东西!
解决方案完全正确。您的约束条件将 b1
或 b2
限制为 0.5,而另一个变量可以是 1。这使得约束条件很紧,并导致最优解值为 1.5。
请注意,SoPlex 是一个纯 LP 求解器,因此将变量指定为二进制将被求解器忽略。如果你想解决整数优化问题,你应该查看 SCIP。
所以考虑一个小问题,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).
所以我的问题是,如何输出实际的变量解。最好在它自己的文件中。看起来这很明显,但经过数小时的查找和试验后我找不到任何东西!
解决方案完全正确。您的约束条件将 b1
或 b2
限制为 0.5,而另一个变量可以是 1。这使得约束条件很紧,并导致最优解值为 1.5。
请注意,SoPlex 是一个纯 LP 求解器,因此将变量指定为二进制将被求解器忽略。如果你想解决整数优化问题,你应该查看 SCIP。