MATLAB中内存使用的增长

MATLAB中内存使用的增长,matlab,memory,Matlab,Memory,我用MATLAB编写了一些元启发式程序。最近,我一直在研究解决一个工业工程问题的算法。我的MATLAB问题是“内存不足”错误。现在我正在尝试Mathworks和Stackoverflow的一些建议(希望它们能起作用)。然而,有一件事我不明白 在MATLAB中运行算法的过程中(一个中等规模的问题需要4000-5000 cpu秒),即使我预先分配了变量,代码也不需要动态调整数组大小,也不需要添加新变量,但我观察到算法的内存使用量不断增长。main函数调用我编写的一些其他函数。内存使用量增加的原因是什

我用MATLAB编写了一些元启发式程序。最近,我一直在研究解决一个工业工程问题的算法。我的MATLAB问题是“内存不足”错误。现在我正在尝试Mathworks和Stackoverflow的一些建议(希望它们能起作用)。然而,有一件事我不明白

在MATLAB中运行算法的过程中(一个中等规模的问题需要4000-5000 cpu秒),即使我预先分配了变量,代码也不需要动态调整数组大小,也不需要添加新变量,但我观察到算法的内存使用量不断增长。main函数调用我编写的一些其他函数。内存使用量增加的原因是什么


我用于运行该算法的计算机内存为8GBs,安装了win8 64位。

解决此问题的唯一方法是查看内存的去向。 我认为您可能会意外地存储不需要的结果,或者您低估了输出/中间变量的大小

以下是我将采取的行动:

  • 如果出现错误,则打开dbstop
  • 运行代码,直到出现内存不足错误
  • 查看正在使用的内存量(确保检查所有工作空间)
  • 也许你现在知道了额外的内存在哪里。如果您发现没有太多内存被使用,请继续执行以下操作:

  • 检查
    memory
    命令以查看还有多少内存可用
  • 仔细观察正在执行的行,可能实际上需要大量内存

  • 如果所有其他方法都失败,请在此处分享您的发现,其他人可以帮助您查找。

    内存使用量增长的原因是CPlex。我尝试了许多替代方案,但除了将虚拟内存增加到几百GB之外,我找不到任何其他有用的解决方案。如果您没有特别的理由坚持使用CPlex(商业使用、许可等),我建议遇到此问题的任何人使用GUROBI。它是免费的,不受限制的学术用途,完全可与MATLAB集成。这就是我找到的解决Cplex问题的方法。我希望这个解决方案对每个人都适用。

    算法的空间复杂度是什么?如果所有其他的都失败了,考虑(程序性的)在一定数量的循环之后重新启动MATLAB。每次只需几秒钟,但这是清除内存最有效的方法。(您可能需要将一个变量保存在某个地方,以记住您所得到的距离。)是否调用任何mex文件?我以前有过通过mex泄露内存的问题。谢谢你,丹尼斯!我将在第一篇我忘记提到我在循环中使用cplexlp.m数十万次的帖子中分享结果。我检查了工作区(如您所建议的),但没有发现任何不自然的地方(工作区的总大小甚至低于100 MB)。我在谷歌上搜索了-matlab+cplex+内存+错误-我发现了一些建议(我认为这是由于cplexlp.m)。现在我在每次调用cplexlp之后尝试“清除cplexlp;”。。。我在等待结果。@HByrm期待您的结论。如果它工作,但性能太多,考虑只清理1000次左右。“清除CopLLP”命令不起作用。根据一些建议,我在计算机的高级系统设置中添加了“MKL_DISABLE_FAST_MM”环境变量。但它不起作用。我使用了linprog,它工作正常,但运行时间显著增加。我很无助。