Matrix CPLEX can';因为矩阵太大,所以无法从excell文件中读取数据?

Matrix CPLEX can';因为矩阵太大,所以无法从excell文件中读取数据?,matrix,cplex,opl,Matrix,Cplex,Opl,我正在用一个有9241个节点的欧洲电网解决一个优化问题。为此,我创建了一个连接矩阵并将其插入Excel文件中。使用来自较小问题(较少节点)的代码(从Excel文件中获取信息以编写CPLEX矩阵),我尝试将其应用于这个较大的问题,但得到以下错误: IBM ILOG Concert出现异常:无法从excel读取数据。PEGASE-9241data.dat/Teste 8:36-37 E:\Program Files\IBM\ILOG\CPLEX\U Studio129\opl\oplide\work

我正在用一个有9241个节点的欧洲电网解决一个优化问题。为此,我创建了一个连接矩阵并将其插入Excel文件中。使用来自较小问题(较少节点)的代码(从Excel文件中获取信息以编写CPLEX矩阵),我尝试将其应用于这个较大的问题,但得到以下错误:

IBM ILOG Concert出现异常:无法从excel读取数据。PEGASE-9241data.dat/Teste 8:36-37 E:\Program Files\IBM\ILOG\CPLEX\U Studio129\opl\oplide\workspace\Teste\PEGASE-9241data.dat opl问题标记

需要了解的一些重要事项:

-Excel文件是.xlsx

-我使用Matlab将连接性矩阵写入Excel文件(用于较小的问题)

当我用一个较小的问题(3120个节点)尝试相同的代码时,效果很好

型号:

range n = 1..9241;

dvar boolean x[n];
dvar boolean y[n][n];

 //Conectivity matrix
 int A[n][n] =...;

 //Vector ZIB
 int z[n] =...;

 //Objective Function
 dexpr int total = sum (p in n) x[p];


 minimize (total);

 subject to {

   forall (i in n)
      sum (j in n)             
       (A[i][j]*x[j] +A[i][j]*z[j]*y[i][j]) >= 1;

    forall (j in n)
      sum(i in n)
        A[i][j]*y[i][j] == z[j];

 }

数据:


我想你的记忆力有问题。我成功地运行了可伸缩示例

直到n=7000

所以在你的情况下,我会把你的正方形分成4个正方形。让我分享完整的模型来实现这一点

首先写入Excel文件,以便进行测试

国防部

.dat

然后为了读取f2.xls

国防部


IBM developerWorks论坛中关于线程的建议有帮助吗?那么您的意思是,我需要将9241矩阵分成4个部分,然后分别测试它们?我想我或多或少了解它,我将尝试实现它。但是,我相信我的问题不在于内存,因为当我执行程序时,它永远不会达到完全使用,所以它一定是其他东西。无论如何,谢谢你提供的信息
SheetConnection sheet("E:\\Program Files\\IBM\\ILOG\\CPLEX_Studio129\\opl\\oplide\\workspace\\Teste\\PEGASEmatriz9241.xlsx");
A from SheetRead(sheet,"matriz9241");

z from SheetRead(sheet,"zib9241");
execute
{

// http://cwestblog.com/2013/09/05/javascript-snippet-convert-number-to-column-name/
function toColumnName(num) {
  for (var ret = '', a = 1, b = 26; (num -= a) >= 0; a = b, b *= 26) {
    ret = String.fromCharCode(parseInt((num % b) / a) + 65) + ret;
  }
  return ret;
}

// 1,1 => A1  1,4 => D1 2,27 => AA2
function convertR1C1toA1(r,c)
{
return(toColumnName(c)+r);
}

}

int n=4;

int cell[i in 1..n][j in 1..n]=i*j;

int cell1[i in 1..n div 2][j in 1..n div 2]=cell[i][j];
int cell2[i in 1..n div 2][j in n div 2+1..n]=cell[i][j];
int cell3[i in n div 2+1..n][j in 1..n div 2]=cell[i][j];
int cell4[i in n div 2+1..n][j in n div 2+1 ..n]=cell[i][j];

string sheetWriteString1;
string sheetWriteString2;
string sheetWriteString3;
string sheetWriteString4;



execute
{
sheetWriteString1=convertR1C1toA1(1,1)+":"+convertR1C1toA1(n/2,n/2);
writeln("sheetWriteString1=",sheetWriteString1);
sheetWriteString2=convertR1C1toA1(1,n/2+1)+":"+convertR1C1toA1(n/2,n);
writeln("sheetWriteString2=",sheetWriteString2);
sheetWriteString3=convertR1C1toA1(n/2+1,1)+":"+convertR1C1toA1(n,n/2);
writeln("sheetWriteString3=",sheetWriteString3);
sheetWriteString4=convertR1C1toA1(n/2+1,n/2+1)+":"+convertR1C1toA1(n,n);
writeln("sheetWriteString4=",sheetWriteString4);

}
SheetConnection s("f2.xlsx");

    cell1 to SheetWrite(s,sheetWriteString1);
    cell2 to SheetWrite(s,sheetWriteString2);
    cell3 to SheetWrite(s,sheetWriteString3);
    cell4 to SheetWrite(s,sheetWriteString4);
int n=...;
    string sheetWriteString1=...;
    string sheetWriteString2=...;
    string sheetWriteString3=...;
    string sheetWriteString4=...;

    int cell1[i in 1..n div 2][j in 1..n div 2]=...;
    int cell2[i in 1..n div 2][j in n div 2+1..n]=...;
    int cell3[i in n div 2+1..n][j in 1..n div 2]=...;
    int cell4[i in n div 2+1..n][j in n div 2+1..n]=...;

    int cell[i in 1..n][j in 1..n]=
    (i<=n div 2)?((j<=n div 2)?cell1[i][j]:cell2[i][j]):((j<=n div 2)?cell3[i][j]:cell4[i][j]);



    assert forall(i,j in 1..n) cell[i][j]==i*j;
SheetConnection s("f2.xlsx");

    n=4;
    sheetWriteString1="A1:B2";
    sheetWriteString2="C1:D2";
    sheetWriteString3="A3:B4";
    sheetWriteString4="C3:D4";

    cell1 from SheetRead(s,sheetWriteString1);
    cell2 from SheetRead(s,sheetWriteString2);
    cell3 from SheetRead(s,sheetWriteString3);
    cell4 from SheetRead(s,sheetWriteString4);