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