有没有比fmincon更快更高效的解算器呢?我正在使用fmincon来解决一个特定的问题,而对于中等大小的向量变量,我耗尽了内存。我也没有任何超级计算机或云计算可供我选择。我知道任何替代解决方案都会耗尽内存,但我只是想看看问题出在哪里。
另外,我不想要一个会改变我处理实际问题的方式的解决方案。我知道凸优化是要走的路,我已经做了足够的工作来达到这里。
附注:我看到了另一个关于开源替代方案的问题。这不是我要找的。我正在寻找更有效的,如果有人面临同样的问题,并转移到更好的解决方案。
发布于 2013-06-12 13:34:39
嗯..。
在没有进一步的信息的情况下,我猜测fmincon
耗尽了内存,因为它需要Hessian (假设您的决策变量是10^4,那么Hessian将是10^4 x numel(f(x1,x2,x3,....))
large)。
这也需要大量的时间来确定黑森公式的值,因为如果你没有显式地指定导数,fmincon
通常会使用有限差分。
你可以做几件事来提高速度。
,
HessPattern
传递海森矩阵的稀疏模式。这节省了大量的内存和计算时间。HessFcn
选项将其传递给fmincon
。GradConstr
(用于非线性约束函数)和/或GradObj
(用于目标函数)在此应用。这里可能有一些我忘了的选项,它们也可以帮助你。只需浏览一下优化工具箱的optimset中的所有选项,看看它们是否能帮助您。
如果所有这些都不起作用,那么您将不得不更换优化器。鉴于fmincon
是MATLAB优化工具箱的骄傲和joy,确实没有更好的现成工具,您必须到其他地方去搜索。
TOMLAB是MATLAB的一个非常好的商业解决方案。如果你不介意使用C或C++,这里有SNOPT (这也是TOMLAB/SNOPT的基础)。在GSL中有很多你可以尝试的东西(尽管我还没见过像SNOPT这样高级的东西……)。
我不知道您使用的是什么版本的fmincon
,但我知道在R2009b (可能以后也是如此)中,MATLAB对于某些类型的问题有一些真正的弱点。我非常了解这个,因为我曾经因为它输掉了一个非常有声望的比赛( GTOC)。我们的方法被证明与获胜者的方法完全相同,除了他们可以访问SNOPT,这使得他们的几百万变量优化问题在几次迭代中收敛,而fmincon
根本不能收敛,无论我们尝试过什么(相信我,我们尝试过)。直到今天,我仍然不知道为什么会发生这种情况,但我在访问SNOPT时亲自验证了这一点。有一次,当我有无限的时间时,我会找出这一点,并将其报告给MathWorks。但在那之前……我对fmincon
失去了一点信任:)
https://stackoverflow.com/questions/17062925
复制相似问题