如何导出复杂的解决方案?
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
我有一个包含以下内容的文件 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