Matlab中CVX的一种报错:while a model is being constructed.

问题描述

今天,我在Matlab中用CVX工具求解问题,运行过程中爆出错误,提示如下:

The global CVX solver selection cannot be changed while a model is being constructed.

在搜索引擎中找到的前人给出的解决方法都是执行clear all即可。但是,我的程序中是反复循环求解一个问题并统计最终结果的,如果每次求解前执行clear all所有变量都丢失了,导致无法运行下去;如果在求解后执行clear all,导致结果也丢了。所以简单的执行clear all语句并不是根本解决方法。
其次,我在四台电脑上同时跑着相同的程序,只有一台爆出以上问题。因此,我断定我遇到的问题不是因为没有clear all导致的。而是因为其他原因。

我的推断

从错误提示来看,推断是在CVX分配变量空间时出现问题导致构造失败。之前遇到过一种情况是,第一次执行CVX求解没问题,但是如果被强行中断的话,再次求解时会报错。原因是CVX在被中断时,某些资源未被正确释放导致一直占用着,而且这些资源没有在workspace中显示出来。执行clear all可以强制释放掉这些资源,所以执行一次clear all之后,再次运行程序时,错误不再出现。

我遇到的情况不属于上面分析的情况,因为我执行过程中没有被强行中断。未被强行中断,但是仍然出现构造失败的情况,我怀疑是内存不足。因为我的程序是使用parfor在跑,总计占用了约20+G。我的电脑内存是32G,当错误爆出时,电脑剩余内存不足1G,因此,我认为很有可能是因为内存不住导致CVX在请求新的内存空间时出现错误导致的运行错误。我的内存占用如下:

MiB Mem :  31987.6 total,    826.5 free,  30996.5 used

另外,参考文档 http://web.cvxr.com/cvx/doc/f... 中给出的cvx_clear命令,可以清楚CVX构造的model,但是我不确定在循环中反复执行CVX求解能否解决内存不足的问题。从我在其他电脑上执行的结果来看并未发现随着执行次数增多内存占用增大,如果不断增大的话,我认为就是内存泄露问题了。在此只给出建议,可以用一下cvx_clear。请自行尝试效果。

你可能感兴趣的