假设使用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;
}
}
热门帖子
2014年4月15日星期二
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.
}
}
首先要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.
}
}
地点:
Tampa, FL, USA
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',这样每行数据导出会自动断点。
订阅:
博文 (Atom)