2014-09-05 24 views
0

我使用MATLAB來編程一些元啓發式。最近,我一直在研究解決工業工程問題的算法。我對MATLAB的問題是「內存不足」錯誤。現在我正在嘗試Mathworks和Stackoverflow的一些建議(希望它們能夠工作)。但是,有一件事我不明白。在MATLAB中增加內存使用情況

在MATLAB的算法運行過程中(中型問題需要4000-5000 cpu秒),即使預先分配了變量,代碼並不需要動態調整數組大小,也不會添加新變量,但我注意到算法的內存使用量不斷增長。主函數調用我寫的一些其他函數。內存使用增加的原因是什麼?

我用於算法運行的計算機有8GB內存和win8 64位安裝。

+0

算法的空間複雜度是多少? – lanpa 2014-09-05 09:07:05

+0

如果一切都失敗,考慮(編程)在固定數量的循環後重新啓動matlab。每次只需幾秒鐘,但它是清除內存最強大的方法。 (你可能需要在某個地方保存一個變量來記住你有多遠。) – 2014-09-08 08:48:06

+0

你在調用任何mex文件嗎?我之前通過mex遇到了內存泄漏問題。 – nkjt 2014-09-08 10:47:59

回答

0

內存使用增長的原因是CPlex。我嘗試了很多選擇,但是我找不到任何其他有用的解決方案,而不是將虛擬內存增加到幾百GB。如果您沒有特別的理由堅持使用CPlex(商業用途,許可證等),我會建議遇到此問題的任何人使用GUROBI。它是免費的,無限制的學術用法,完全可以與MATLAB集成。這是我用Cplex解決問題的解決方案。我希望這個解決方案適用於所有人。

0

解決這個問題的唯一方法是查看內存在哪裏。 我想你可能會意外地存儲你不需要的結果,或者你低估了輸出/中間變量的大小。

這是我如何將着手:

  1. 打開dbstop if error
  2. 運行代碼,直到你得到的內存不足的錯誤
  3. 看到多少內存被使用(請務必檢查所有工作空間)

也許你現在知道額外的內存在哪裏。如果你沒有找到太多的內存被使用,請繼續執行此:

  1. 檢查memory命令來查看內存多少還是可以
  2. 仔細看線執行,或許你真的需要一個巨大的它的內存量

如果一切都失敗了分享你的發現在這裏和其他人可以幫助你找到它。

+0

謝謝丹尼斯!我會分享結果ASAP – HByrm 2014-09-05 13:09:44

+0

在第一篇文章中,我忘了提及我在循環中使用cplexlp.m數十萬次。我檢查了工作區(按照您的建議),但找不到任何不自然的東西(總工作區大小甚至低於100 MB)。我googled -matlab + cplex +內存+錯誤 - 我發現了一些建議(我認爲這是由於cplexlp.m)。現在我嘗試「清除cplexlp;」在每次調用cplexlp之後......我在等待結果。 – HByrm 2014-09-05 20:54:21

+0

@HByrm期待您的結論。如果可行,但性能會受到太大的影響,請考慮每1000次左右清理一次。 – 2014-09-08 08:04:56