热门帖子

显示标签为“export”的博文。显示所有博文
显示标签为“export”的博文。显示所有博文

2014年4月15日星期二

如何将C++ CPLEX数据输出到txt文件

假设使用cplex solver求解,获得optimal solution为一个三维矩阵u[i][j][k]如下:

i.j k1 k2 k3 k4 k5...
1.1  2  4  6  4  2...
1.2  3  2  1  4  5...
...              ....
j.j  1  2  3  4  5...

使用以下代码可将此三维矩阵存储到外部txt文件:
ofstream ofs; //创建一个output stream ofs
char filename1[128];  //定义字符串,长度为文件路径的字符数
sprintf(filename1, "C:/Users/allen/Dropbox/Large Scale Project/Data/Random Generate/vijk.txt"); //定义filename1为你所要导出的txt文件,后面是路径
ofs.open(filename1,ostream::app); /*以添加模式打开文件*/ 
         for(i = 0;i < nbnodes; i++){
  for(j = 0;j < nbnodes; j++){
  for(k = 0; k < nblines; k++){
  ofs << u[i][j][k] << "\t";
  }  //逐行输出
  ofs << endl;
  }
  }


C++ Cplex 定义三维变量矩阵,Define 3 dimensional Matrix

刚学的时候有各种问题,比如这次遇到的如何定义三维矩阵,找遍了GOOGLE居然都找不到一个答案,Manual上说的更是模糊,因此在这里我要详细说明一下。

首先要define你的三维矩阵,因为三维要用到二维,因此也需要定义二维矩阵。
typedef IloArray<IloIntVarArray> IntVarMatrix2; //定义二维矩阵
typedef IloArray<IloArray<IloIntVarArray> > IntVarMatrix3; //定义三维矩阵

然后定义你的三维变量,这里我的三维变量形式为V[i][j][k],其中i=1..nbnodes, j =1..nbnodes, k=1..nblines;

IntVarMatrix3 V(env,nbnodes); //定义第一维的长度
for(i = 0; i < nbnodes; i++){
V[i] = IntVarMatrix2(env, nbnodes); //定义第二维的长度
for(j = 0; j < nbnodes; j++){
V[i][j] = IloIntVarArray(env, nblines, 0, RAND_MAX); //定义第三维的长度,也就是每个V[i][j][k]的范围是0到无穷大,之前我用IloInfinity不知道为什么编译后求解x的上限为一个负的大数,因此我就改为了RAND_MAX.
}
}

2014年4月11日星期五

Export matrix in Matlab to .txt file 使用Matlab导出数据到txt文件

虽然很简单,但是还是要记录一下,在你的matlab里输入这个code:

dlmwrite(filename, M, 'delimiter', '\t', 'newline','pc');
 

这里filename代表你要输出的txt文件名称,前面加路径就可以输出到你所需要输出的那个路径的文件里,M代表你要输出的在Matlab中的矩阵名称,

‘delimiter'代表数据中间的间隔形式,后面的'\t'表示每两个数据间用tab间隔,也可以用' ',或者','分别是中间为空格和逗号,

想要导出的数据工整的话就需要加后面的 'newline','pc',这样每行数据导出会自动断点。