首页 > 解决方案 > 如何将已解决的变量从 ILOG CPLEX 导出到 MATLAB?

问题描述

我正在使用 IBM ilog cplex 优化器来解决一个大整数编程问题。我必须依赖 MATLAB 来生成数据集,我可以将它以适当的格式复制到 .dat 文件中。使用这个 .dat 文件,我可以解决 IBM ilog cplex 环境中的问题。接下来,我尝试将求解的值写入 .txt 或 .m 文件,以便可以在 MATLAB 中导入这些值并将它们用于图形表示。但是,当我尝试执行此操作时,如果变量太长,则将其写入多行,如下所示:

x_b =  [0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 1 0
     0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     0 0 1 0 0 0 1 0];

因此,在 MATLAB 中将其作为数组导入变得不可能。那么,有人可以建议一个更好的方法来做到这一点吗?

谢谢。

标签: matlabcplexilog

解决方案


在 OPL CPLEX 中,如果您编写 .mod

range r=1..80;
int x_b[r]=...;

execute
{
  var f=new IloOplOutputFile("exp.txt");
  for(var i in r) f.writeln(x_b[i]);
  f.close();
}

并使用您的 .dat

x_b =  [0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 1 0
     0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     0 0 1 0 0 0 1 0];

你会得到 exp.txt

0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
1
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0

您可以使用 Matlab 中的 fscanf 读取


推荐阅读