2013-06-12 143 views
2

fmincon以外是否有更快更有效的求解器?我正在使用fmincon来解决一个特定的问题,并且我用尽了适度大小的矢量变量。我也没有任何超级计算机或云计算选项可供选择。我知道任何备用解决方案仍然会耗尽内存,但我只是想知道问题出在哪里。FMINCON的替代品

P.S.我不想要一个能够改变我接近实际问题的解决方案。我知道凸优化是要走的路,我已经做了足够的工作来到这里。

P.P.S我看到关于开源替代品的另一个问题。这不是我要找的。如果有人面临同样的问题并转向更好的求解器,我正在寻找更高效的方法。

+0

多大的决策变量一点信任吗?例如,您期望在矢量内有多少个元素最多?另外,你需要哪些种类的约束(线性,约束,非线性或全部)? –

+0

最多10^4。 – SPRajagopal

+0

你在32位Windows上吗?你能用64位Matlab在64位机器上运行代码还是你没有? – horchler

回答

3

嗯...

没有进一步的信息,我猜fmincon内存用完,因为它需要黑森州(假定你的决策变量为10^4,将10^4 x numel(f(x1,x2,x3,....))大)。

确定Hessian的值也需要大量的时间,因为fmincon通常使用有限差分,因为如果不明确指定导数。

有几件事你可以在这里加快速度。

  • 如果你事先知道会有很多你的黑森州零,您可以通过HessPattern通过Hessian矩阵的稀疏模式。这节省了大量的内存和计算时间。

  • 如果您很容易为您的目标函数的Hessian提出明确的公式,请创建一个计算Hessian的函数,并通过optimset中的HessFcn选项将其传递到fmincon

  • 这同样适用于渐变。 GradConstr(用于您的非线性约束函数)和/或GradObj(用于您的目标函数)适用于此处。

这里可能有几个选项我忘记了,这也可以帮助你。只需通过优化工具箱'optimset中的所有选项并查看它们是否可以帮助您。

如果这一切都无济于事,那么您将不得不切换优化器。考虑到fmincon是MATLAB优化工具箱的骄傲和喜悦,实际上没有什么比现在好得多,你必须在其他地方搜索。

TOMLAB是一个很好的MATLAB商业解决方案。如果你不介意转向C或C++ ......有SNOPT(这是TOMLAB/SNOPT的基础)。还有一些你可以在GSL中尝试的东西(尽管我没有看到任何比SNOPT更先进的东西......)。

我不知道你有什么版本的MATLAB,但是我知道在R2009b(也可能是更高版本)中,fmincon对于某些类型的问题有一些真正的弱点。我知道这个很好,因为我曾经因为它而失去了一个很有声望的比赛(GTOC)。我们的方法竟然是完全相同作为获奖者,除了他们有获得SNOPT这使得在几次迭代他们几百万变量优化问题的收敛,而fmincon不能带来收敛在所有,无论我们试图(和信任我,我们试图)。到目前为止,我仍然不知道为什么会发生这种情况,但是当我访问SNOPT时,我自己对其进行了验证。有一次,当我有无限的时间时,我会发现并将其报告给MathWorks。但在那之前......我失去了在fmincon :)

+0

好的..谢谢。因此,找到麻烦 - 这是一种尝试从fmincon获得(哄骗)解决方案的方法。我试图使用cvxopt。让我们看看结果如何。 – SPRajagopal

+0

@SPRajagopal:cvxopt?我不知道那一个......请让我知道这是如何工作:) –

+0

是啊,没有太好。我刚刚发布了另一个关于错误的问题。 – SPRajagopal