如何导出复杂的解决方案?

How to export cplex' solution?

我有一个包含以下内容的文件 quadratic_obj.lp

Minimize
obj: a + b + [ a^2 + 4 a * b + 7 b^2 ]/2
Subject To
c1: a + b >= 10
End

在交互式 cplex 会话中,我使用 read 读取文件,使用 optimize 进行优化。然后我可以使用

显示解决方案
display solution variables -

这给了我

Variable Name           Solution Value
a                            10.000000
b                             0.000000

有没有办法流水线输出?所以在理想的世界中会有这样的东西:

display solution variables - -> myoutput.csv

我使用了 write,但那里的文件类型选项不是我想要的。例如。 sol 作为 xml 返回,我将不得不再次解析。

有没有办法将变量及其值导出到例如制表符或逗号分隔的文件?

您可以在 CPLEX 中使用 OPL 执行此操作:

dvar float+ a;
dvar float+ b;

minimize a + b + ( a*a + 4 *a * b + 7 *b*b )/2;
subject to
{
c1: a + b >= 10;
}

execute
{
var f=new IloOplOutputFile("res.csv");
f.writeln(a);
f.writeln(b);
f.close();
}

这将创建一个 csv 文件 res.csv 问候

没有从交互中自动执行此操作的方法。如果您执行以下操作,它会让您关闭:

./cplex -c "read quadratic_obj.lp" "opt" "set logfile tmp.log" "display solution variables -" "quit"

这会将输出放入名为 tmp.log 的文件中,但其中仍有一些额外的内容需要您 post 使用脚本(或类似的东西)进行处理).有关此技术的更多信息,请参阅 this link(适用于版本 12.6.3)。

另一种选择是使用 API's。然后,您可以完全控制输出。例如,使用 Python API,您可以执行如下操作:

import cplex

cpx = cplex.Cplex()
cpx.read('quadratic_obj.lp')
cpx.solve()
# Check solution status here via cpx.solution.get_status()
for name, value in zip(cpx.variables.get_names(),
                       cpx.solution.get_values()):
    print name, value