0
我遇到了一个问题,当我运行我的代码时,每当我运行一个相对较大的实例,然后程序卡住了,然后matlab没有响应,我需要重新启动计算机,基本上我需要使用cplexqcp函数来解决ILOG CPLEX中的SOCP。我调试的代码,以下是程序卡住了它是否为MATLAB的内存不足?
for i=1:prog.Sddcount
if prog.Sdd(i).totalSddVars~=0
for j=1:prog.Sdd(i).totalSdd
diagvec = sparse([varSum+prog.Sdd(i).numAlpha+(j-1)*5+4:varSum+prog.Sdd(i).numAlpha+(j-1)*5+6],[1 1 1],[1 -1 1],prog.Socp.numVars+1,1);
prog.Socp.qc(alphaSum+j).a=sparse([],[],[],prog.Socp.numVars+1,1);
prog.Socp.qc(alphaSum+j).rhs=0;
prog.Socp.qc(alphaSum+j).Q = spdiags(diagvec(:),0,prog.Socp.numVars+1,prog.Socp.numVars+1);
end
alphaSum = alphaSum + prog.Sdd(i).totalSdd;
end
varSum = varSum + prog.Sdd(i).totalVars;
end
并杀死程序一个实例的具体参数是
prog.Sddcount=11;
[prog.Sdd.totalSdd]=[1540 1540 1540 1540 1540 1540 1540 1540 1540 1540 7875]
prog.Socp.numVars=117061;
我想这可能是巨大的大小(以117061 117061)和矩阵Q的大数(sum([prog.Sdd.totalSdd]))),但它是非常稀疏的,只有三个入口非零,所以我认为它可以......但每次运行一个类似的实例大小,它崩溃。从上面的信息,任何人都可以告诉问题在哪里?是内存不足或我需要预先分配足够的内存
prog.Socp.qc.Q
而我该如何修改代码? 非常感谢。
可能需要一段时间才能完成代码,但是如果您有一个不稀疏的117061x116061矩阵(我指的是不同于0而不是稀疏类型的元素),您肯定会遇到内存问题。必须尝试使用调试器并检查每个断点消耗的内存吗? – patrik 2014-08-27 11:18:59
是否有可能使用可执行代码重新创建此行为?我最初的猜测是,有一个转换到完整的地方,但我不能马上发现它。 – 2014-08-27 11:33:28
您也可以简单地打开任务管理器,查看运行代码时内存是否填满。 – 2014-08-27 11:43:49