我有一个文件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
返回,我将不得不再次解析。
有没有办法将变量及其值导出到例如制表符或逗号分隔文件?
答案 0 :(得分:4)
没有自动方式从交互式中执行此操作。如果您执行以下操作,则会让您关闭:
./cplex -c "read quadratic_obj.lp" "opt" "set logfile tmp.log" "display solution variables -" "quit"
这会将输出放到一个名为tmp.log的文件中,但是还有一些额外的东西,你需要用脚本(或类似的东西)进行后处理。有关此技术的更多信息,请参阅this链接(适用于版本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
答案 1 :(得分:1)
您可以使用OPL在CPLEX中执行此操作:
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 问候